<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>エンドルフィン風呂に浸かる。</title><description>🐧🐧🐧</description><link>https://endorphinbath.com/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.8.10</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年5月27日 01:16:32</lastBuildDate><item><title>今年食ったサバ缶のまとめ（2025年版：後編）</title><link>https://endorphinbath.com/posts/mackerel-packed-can-2025-2nd/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mackerel-packed-can-2025-2nd/</guid><description>2025年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶だ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今年食べた、サバ缶の一覧です。&lt;a href=&quot;#今年食べたサバ缶の一覧です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;見ていきましょう。数が多過ぎるので今回は後編とします。前編では80個紹介して、後編では64個紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;81. はごろもフーズ_さばで健康_水煮（はごろもフーズ）&lt;a href=&quot;#81-はごろもフーズ_さばで健康_水煮はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/01.DmHDMjjK_1AMxCH.webp&quot; srcset=&quot;/_astro/01.DmHDMjjK_ZSQ49m.webp 640w, /_astro/01.DmHDMjjK_ZMqGw7.webp 750w, /_astro/01.DmHDMjjK_1MLuYW.webp 828w, /_astro/01.DmHDMjjK_Z1w0AaV.webp 1080w, /_astro/01.DmHDMjjK_16T3xr.webp 1280w, /_astro/01.DmHDMjjK_281uMD.webp 1668w, /_astro/01.DmHDMjjK_Z1qsqKC.webp 2048w, /_astro/01.DmHDMjjK_Z1Ajch1.webp 2560w, /_astro/01.DmHDMjjK_1AMxCH.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-28に食べたはごろもフーズ製の「はごろもフーズ_さばで健康_水煮」です。
魚は鯖で、水煮な風味と白、緑の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1748mgで、EPAが756mgでした。
感想：今晩は夜のくせに暑いな・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;82. ファミマル_国産いわしの蒲焼（高木商店）&lt;a href=&quot;#82-ファミマル_国産いわしの蒲焼高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/02.mqWO39jH_Z14Nmvi.webp&quot; srcset=&quot;/_astro/02.mqWO39jH_Z1t9aJX.webp 640w, /_astro/02.mqWO39jH_Z1mIN7I.webp 750w, /_astro/02.mqWO39jH_1dtool.webp 828w, /_astro/02.mqWO39jH_RzCu0.webp 1080w, /_astro/02.mqWO39jH_Z1yGQAy.webp 1280w, /_astro/02.mqWO39jH_Zxzplm.webp 1668w, /_astro/02.mqWO39jH_X7LTj.webp 2048w, /_astro/02.mqWO39jH_Nh1nU.webp 2560w, /_astro/02.mqWO39jH_Z14Nmvi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-29に食べた高木商店製の「ファミマル_国産いわしの蒲焼」です。
魚は鰯で、蒲焼な風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2490mgで、EPAが2300mgでした。
感想：まあ、それなりに美味いのだが、この手の味の魚の缶詰には山椒が欲しくなってくるんだよなあ。今日みたいに暑いと尚更、我が舌が所望している。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;83. マルハニチロ_さばのトマト煮（じゃがいも入り）（マルハニチロ）&lt;a href=&quot;#83-マルハニチロ_さばのトマト煮じゃがいも入りマルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/03.DNYuLt1M_Z29HGUs.webp&quot; srcset=&quot;/_astro/03.DNYuLt1M_Z2aiqjL.webp 640w, /_astro/03.DNYuLt1M_Z23S3Gw.webp 750w, /_astro/03.DNYuLt1M_wk8Ox.webp 828w, /_astro/03.DNYuLt1M_ZcjGUa.webp 1080w, /_astro/03.DNYuLt1M_2qzVNd.webp 1280w, /_astro/03.DNYuLt1M_Z1CtJKw.webp 1668w, /_astro/03.DNYuLt1M_Z6LxuQ.webp 2048w, /_astro/03.DNYuLt1M_ZgCj1f.webp 2560w, /_astro/03.DNYuLt1M_Z29HGUs.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-31に食べたマルハニチロ製の「マルハニチロ_さばのトマト煮（じゃがいも入り）」です。
魚は鯖で、トマトな風味と赤、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが660mgで、EPAが210mgでした。
感想：リコピンの含有量も書いてあった。11mgだってよ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;84. からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったさば缶_鯖_味噌煮_信州味噌使用（信田缶詰）&lt;a href=&quot;#84-からだwelcia_銚子いいのさ銚子産の獲れたてだけでつくったさば缶_鯖_味噌煮_信州味噌使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/04.CSgyYz_x_42X2u.webp&quot; srcset=&quot;/_astro/04.CSgyYz_x_1vdkBf.webp 640w, /_astro/04.CSgyYz_x_1BCHeu.webp 750w, /_astro/04.CSgyYz_x_ZRle3n.webp 828w, /_astro/04.CSgyYz_x_21qX2M.webp 1080w, /_astro/04.CSgyYz_x_ZpPw2L.webp 1280w, /_astro/04.CSgyYz_x_AgUcq.webp 1668w, /_astro/04.CSgyYz_x_26Y7s6.webp 2048w, /_astro/04.CSgyYz_x_1W8lVH.webp 2560w, /_astro/04.CSgyYz_x_42X2u.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-01に食べた信田缶詰製の「からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったさば缶_鯖_味噌煮_信州味噌使用」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：なんかチーズみたいな風味がしたな？？ さすがに気の所為？？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;85. からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったさば缶_鯖_水煮_塩こうじ使用（信田缶詰）&lt;a href=&quot;#85-からだwelcia_銚子いいのさ銚子産の獲れたてだけでつくったさば缶_鯖_水煮_塩こうじ使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/05.CQ8Uz_CP_ZvBzTF.webp&quot; srcset=&quot;/_astro/05.CQ8Uz_CP_F2cbz.webp 640w, /_astro/05.CQ8Uz_CP_LryNO.webp 750w, /_astro/05.CQ8Uz_CP_Z1Hwmt3.webp 828w, /_astro/05.CQ8Uz_CP_1qLp5C.webp 1080w, /_astro/05.CQ8Uz_CP_Z10v4YV.webp 1280w, /_astro/05.CQ8Uz_CP_Bmfg.webp 1668w, /_astro/05.CQ8Uz_CP_1wjyuV.webp 2048w, /_astro/05.CQ8Uz_CP_1msMYx.webp 2560w, /_astro/05.CQ8Uz_CP_ZvBzTF.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-03に食べた信田缶詰製の「からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったさば缶_鯖_水煮_塩こうじ使用」です。
魚は鯖で、水煮な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：良くも悪くも普通のサバ缶です。水を飲むぐらいの気分で只々食えました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;86. からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったいわし缶_鰯_味噌味_信州味噌使用（信田缶詰）&lt;a href=&quot;#86-からだwelcia_銚子いいのさ銚子産の獲れたてだけでつくったいわし缶_鰯_味噌味_信州味噌使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/06.XvgcZmwK_Z1qaCsF.webp&quot; srcset=&quot;/_astro/06.XvgcZmwK_1sgOTU.webp 640w, /_astro/06.XvgcZmwK_1yGcxa.webp 750w, /_astro/06.XvgcZmwK_ZUhIJH.webp 828w, /_astro/06.XvgcZmwK_wdmwC.webp 1080w, /_astro/06.XvgcZmwK_Z1U47xV.webp 1280w, /_astro/06.XvgcZmwK_ZSVFiJ.webp 1668w, /_astro/06.XvgcZmwK_BKvVV.webp 2048w, /_astro/06.XvgcZmwK_rTKqx.webp 2560w, /_astro/06.XvgcZmwK_Z1qaCsF.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-05に食べた信田缶詰製の「からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったいわし缶_鰯_味噌味_信州味噌使用」です。
魚は鰯で、味噌煮な風味と白、黄色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが790mgで、EPAが1100mgでした。
感想：鰯の缶詰は一般的に小ぶりに切り分けられているから食べやすいよな。今日は本当に暑いなちくしょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;87. はごろもフーズ_さばで健康_みそ煮（はごろもフーズ）&lt;a href=&quot;#87-はごろもフーズ_さばで健康_みそ煮はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/07.BR9c8k8i_ZMoxL4.webp&quot; srcset=&quot;/_astro/07.BR9c8k8i_ZDxWSa.webp 640w, /_astro/07.BR9c8k8i_Zx8AfU.webp 750w, /_astro/07.BR9c8k8i_234Bg9.webp 828w, /_astro/07.BR9c8k8i_19Yree.webp 1080w, /_astro/07.BR9c8k8i_Z1hi2Qk.webp 1280w, /_astro/07.BR9c8k8i_ZgaAB8.webp 1668w, /_astro/07.BR9c8k8i_1fwADx.webp 2048w, /_astro/07.BR9c8k8i_15FP89.webp 2560w, /_astro/07.BR9c8k8i_ZMoxL4.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-06に食べたはごろもフーズ製の「はごろもフーズ_さばで健康_みそ煮」です。
魚は鯖で、味噌煮な風味と白、紫色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1867mgで、EPAが658mgでした。
感想：いくらなんでも暑いな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;88. Norlake_魚馳走様_さば味噌煮（ノルレェイク・インターナショナル）&lt;a href=&quot;#88-norlake_魚馳走様_さば味噌煮ノルレェイクインターナショナル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/08.DVRZS2nP_Zk3ev8.webp&quot; srcset=&quot;/_astro/08.DVRZS2nP_1ErivR.webp 640w, /_astro/08.DVRZS2nP_1KQF97.webp 750w, /_astro/08.DVRZS2nP_ZI7g8K.webp 828w, /_astro/08.DVRZS2nP_1CkKua.webp 1080w, /_astro/08.DVRZS2nP_ZNVIAo.webp 1280w, /_astro/08.DVRZS2nP_caHDN.webp 1668w, /_astro/08.DVRZS2nP_1HRTTt.webp 2048w, /_astro/08.DVRZS2nP_1y29o5.webp 2560w, /_astro/08.DVRZS2nP_Zk3ev8.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-08に食べたノルレェイク・インターナショナル製の「Norlake_魚馳走様_さば味噌煮」です。
魚は鯖で、味噌煮な風味と黄色の缶の色が特徴です。美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2250mgで、EPAが810mgでした。
感想：爪を切ったばかりとは言うものの、こんなに缶切りを上げるのに手こずったことがあったっけ？ 味も微妙。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;89. 創健社_さばカレー煮_オリジナル配合のカレー風味調味料を使用（創健社）&lt;a href=&quot;#89-創健社_さばカレー煮_オリジナル配合のカレー風味調味料を使用創健社&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/09.DlM94hXM_154K7m.webp&quot; srcset=&quot;/_astro/09.DlM94hXM_Z2nV0oR.webp 640w, /_astro/09.DlM94hXM_Z2hvCLC.webp 750w, /_astro/09.DlM94hXM_iGyJr.webp 828w, /_astro/09.DlM94hXM_Z22InGh.webp 1080w, /_astro/09.DlM94hXM_Abg26.webp 1280w, /_astro/09.DlM94hXM_1BiHhi.webp 1668w, /_astro/09.DlM94hXM_Z1WbegX.webp 2048w, /_astro/09.DlM94hXM_Z271YMm.webp 2560w, /_astro/09.DlM94hXM_154K7m.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-09に食べた創健社製の「創健社_さばカレー煮_オリジナル配合のカレー風味調味料を使用」です。
魚は鯖で、辛いな風味と黄色、橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1824mgで、EPAが684mgでした。
感想：各種スパイスにオニオン・トマトパウダーを加え、スパイシーかつまろやかに仕上げました。スープカレーっぽい感じだった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;90. ミズノトレーディング_醤油味付_さば（ミズノトレーディング）&lt;a href=&quot;#90-ミズノトレーディング_醤油味付_さばミズノトレーディング&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/10.BC0MhzBX_Z2agK91.webp&quot; srcset=&quot;/_astro/10.BC0MhzBX_Z2eqEA.webp 640w, /_astro/10.BC0MhzBX_4aUWE.webp 750w, /_astro/10.BC0MhzBX_Z2pN0kd.webp 828w, /_astro/10.BC0MhzBX_ZcRK8I.webp 1080w, /_astro/10.BC0MhzBX_2q1SzE.webp 1280w, /_astro/10.BC0MhzBX_Z1D2MY5.webp 1668w, /_astro/10.BC0MhzBX_Z7kAIp.webp 2048w, /_astro/10.BC0MhzBX_ZhbmeN.webp 2560w, /_astro/10.BC0MhzBX_Z2agK91.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-11に食べたミズノトレーディング製の「ミズノトレーディング_醤油味付_さば」です。
魚は鯖で、醤油煮な風味と橙色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：最近は涼しくて助かりますね。まあでも運動不足なのでオメガ3を入れて血液をサラつかせておかないとな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;91. Norlake_魚馳走様_さば水煮（ノルレェイク・インターナショナル）&lt;a href=&quot;#91-norlake_魚馳走様_さば水煮ノルレェイクインターナショナル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/11.p4GqB_8F_Z2rMXCg.webp&quot; srcset=&quot;/_astro/11.p4GqB_8F_ZGOucy.webp 640w, /_astro/11.p4GqB_8F_ZAp7zj.webp 750w, /_astro/11.p4GqB_8F_1YN4VK.webp 828w, /_astro/11.p4GqB_8F_ZuoXBX.webp 1080w, /_astro/11.p4GqB_8F_28uF6p.webp 1280w, /_astro/11.p4GqB_8F_Z1Uz1sk.webp 1668w, /_astro/11.p4GqB_8F_ZoQOcE.webp 2048w, /_astro/11.p4GqB_8F_ZyHzI3.webp 2560w, /_astro/11.p4GqB_8F_Z2rMXCg.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-12に食べたノルレェイク・インターナショナル製の「Norlake_魚馳走様_さば水煮」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2250mgで、EPAが915mgでした。
感想：こっちは水煮として自然の味で勝負している分、奇妙な味は少なかった。サザエ食ってるような感じ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;92. キョクヨー_いわし蒲焼_2025（極洋）&lt;a href=&quot;#92-キョクヨー_いわし蒲焼_2025極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/12.CygAAJcg_1qATkf.webp&quot; srcset=&quot;/_astro/12.CygAAJcg_13Szn9.webp 640w, /_astro/12.CygAAJcg_1aiW0o.webp 750w, /_astro/12.CygAAJcg_Z1jEYht.webp 828w, /_astro/12.CygAAJcg_Z1Gceto.webp 1080w, /_astro/12.CygAAJcg_VHpeY.webp 1280w, /_astro/12.CygAAJcg_1WOQub.webp 1668w, /_astro/12.CygAAJcg_Z1AE545.webp 2048w, /_astro/12.CygAAJcg_Z1KuPzt.webp 2560w, /_astro/12.CygAAJcg_1qATkf.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-16に食べた極洋製の「キョクヨー_いわし蒲焼_2025」です。
魚は鰯で、蒲焼な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが531mgで、EPAが630mgでした。
感想：タレがしっかり付いている蒲焼きです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;93. からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったいわし缶_鰯_しょうゆ味_丸大豆醤油使用（信田缶詰）&lt;a href=&quot;#93-からだwelcia_銚子いいのさ銚子産の獲れたてだけでつくったいわし缶_鰯_しょうゆ味_丸大豆醤油使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/13.2BgsRUK5_b29oW.webp&quot; srcset=&quot;/_astro/13.2BgsRUK5_ZLDok0.webp 640w, /_astro/13.2BgsRUK5_ZFe1GK.webp 750w, /_astro/13.2BgsRUK5_1TYaOj.webp 828w, /_astro/13.2BgsRUK5_28q9pf.webp 1080w, /_astro/13.2BgsRUK5_ZiQkFj.webp 1280w, /_astro/13.2BgsRUK5_Hg6yS.webp 1668w, /_astro/13.2BgsRUK5_2dXiOy.webp 2048w, /_astro/13.2BgsRUK5_247xja.webp 2560w, /_astro/13.2BgsRUK5_b29oW.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-18に食べた信田缶詰製の「からだWelcia_銚子いいのさ！銚子産の獲れたてだけでつくったいわし缶_鰯_しょうゆ味_丸大豆醤油使用」です。
魚は鰯で、醤油煮な風味と白、赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが840mgで、EPAが1000mgでした。
感想：鰯の醤油煮って一般的に食べやすいような予感がします。うん食べやすい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;94. K＆K_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに！（岩手缶詰）&lt;a href=&quot;#94-kk_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに岩手缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/14.DCNYZ9IE_1eKWNb.webp&quot; srcset=&quot;/_astro/14.DCNYZ9IE_Z1SAKmC.webp 640w, /_astro/14.DCNYZ9IE_Z1MbnJn.webp 750w, /_astro/14.DCNYZ9IE_N1NLG.webp 828w, /_astro/14.DCNYZ9IE_Z1S2b0s.webp 1080w, /_astro/14.DCNYZ9IE_JRsHU.webp 1280w, /_astro/14.DCNYZ9IE_1KYTX7.webp 1668w, /_astro/14.DCNYZ9IE_Z1Mu1A9.webp 2048w, /_astro/14.DCNYZ9IE_Z1WkM6x.webp 2560w, /_astro/14.DCNYZ9IE_1eKWNb.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-20に食べた岩手缶詰製の「K＆K_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに！」です。
魚は鯖で、トマトな風味と白、青、橙色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが300mgで、EPAが150mgでした。
感想：少し酸味が強いかなあ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;95. 創健社_さば味噌煮_信州赤系味噌・鹿児島県喜界島産粗糖使用（創健社）&lt;a href=&quot;#95-創健社_さば味噌煮_信州赤系味噌鹿児島県喜界島産粗糖使用創健社&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/15.Bg0keTKo_ZShcd0.webp&quot; srcset=&quot;/_astro/15.Bg0keTKo_Z2hNrzI.webp 640w, /_astro/15.Bg0keTKo_Z2bo4Wt.webp 750w, /_astro/15.Bg0keTKo_oO7yA.webp 828w, /_astro/15.Bg0keTKo_146MMi.webp 1080w, /_astro/15.Bg0keTKo_Z1naGig.webp 1280w, /_astro/15.Bg0keTKo_Zm3f34.webp 1668w, /_astro/15.Bg0keTKo_19DWcB.webp 2048w, /_astro/15.Bg0keTKo_YNbGd.webp 2560w, /_astro/15.Bg0keTKo_ZShcd0.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-23に食べた創健社製の「創健社_さば味噌煮_信州赤系味噌・鹿児島県喜界島産粗糖使用」です。
魚は鯖で、味噌煮な風味とベージュ、紫の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2508mgで、EPAが1007mgでした。
感想：醤油っぽいというか、これが粗糖を使った味なのですかね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;96. 創健社_さば水煮_地中海の天日塩使用（創健社）&lt;a href=&quot;#96-創健社_さば水煮_地中海の天日塩使用創健社&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/16.CE790UEF_169mmy.webp&quot; srcset=&quot;/_astro/16.CE790UEF_Z2nSSit.webp 640w, /_astro/16.CE790UEF_Z2htvFe.webp 750w, /_astro/16.CE790UEF_iIFPP.webp 828w, /_astro/16.CE790UEF_Z21DLr5.webp 1080w, /_astro/16.CE790UEF_BfRhi.webp 1280w, /_astro/16.CE790UEF_1Cnjwu.webp 1668w, /_astro/16.CE790UEF_Z1V6C1L.webp 2048w, /_astro/16.CE790UEF_Z25Wnxa.webp 2560w, /_astro/16.CE790UEF_169mmy.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-24に食べた創健社製の「創健社_さば水煮_地中海の天日塩使用」です。
魚は鯖で、水煮な風味とベージュ、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3097mgで、EPAが817mgでした。
感想：うん、普通の水煮のサバ缶です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;97. 木の屋_石巻水産_まぐろの尾肉_大和煮（木の屋石巻水産）&lt;a href=&quot;#97-木の屋_石巻水産_まぐろの尾肉_大和煮木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/17.BLD0NfFT_8Vp76.webp&quot; srcset=&quot;/_astro/17.BLD0NfFT_Z1qJ5hb.webp 640w, /_astro/17.BLD0NfFT_Z1kjHDV.webp 750w, /_astro/17.BLD0NfFT_1fStR8.webp 828w, /_astro/17.BLD0NfFT_26kp7o.webp 1080w, /_astro/17.BLD0NfFT_ZkW4Xa.webp 1280w, /_astro/17.BLD0NfFT_Famh2.webp 1668w, /_astro/17.BLD0NfFT_2bRywH.webp 2048w, /_astro/17.BLD0NfFT_221N1j.webp 2560w, /_astro/17.BLD0NfFT_8Vp76.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-26に食べた木の屋石巻水産製の「木の屋_石巻水産_まぐろの尾肉_大和煮」です。
魚は鮪で、煮付な風味と緑の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：缶を開けた直後の見た目から、かなり高級なキャットフードが入っている感じがした・・・(笑)&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;98. 木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み（木の屋石巻水産）&lt;a href=&quot;#98-木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/18.BYqAMY2z_1qhDrb.webp&quot; srcset=&quot;/_astro/18.BYqAMY2z_1nSJgK.webp 640w, /_astro/18.BYqAMY2z_1uj6T0.webp 750w, /_astro/18.BYqAMY2z_ZYEOnR.webp 828w, /_astro/18.BYqAMY2z_Z1Gvums.webp 1080w, /_astro/18.BYqAMY2z_Vo9lU.webp 1280w, /_astro/18.BYqAMY2z_1WvAB7.webp 1668w, /_astro/18.BYqAMY2z_Z1AXkW9.webp 2048w, /_astro/18.BYqAMY2z_Z1KO6sx.webp 2560w, /_astro/18.BYqAMY2z_1qhDrb.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-08-29に食べた木の屋石巻水産製の「木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み」です。
魚は鯖で、水煮な風味と白、水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1590mgで、EPAが1330mgでした。
感想：一般的な鯖より身が小ぶりで柔らかいのかもしれない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;99. 木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み（木の屋石巻水産）&lt;a href=&quot;#99-木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/19.69oABnMd_1Ffddi.webp&quot; srcset=&quot;/_astro/19.69oABnMd_Tm0hn.webp 640w, /_astro/19.69oABnMd_10LmTC.webp 750w, /_astro/19.69oABnMd_Z1tcynf.webp 828w, /_astro/19.69oABnMd_Z1rxUAl.webp 1080w, /_astro/19.69oABnMd_1blI82.webp 1280w, /_astro/19.69oABnMd_2ctane.webp 1668w, /_astro/19.69oABnMd_Z1m0Lb2.webp 2048w, /_astro/19.69oABnMd_Z1vQwGq.webp 2560w, /_astro/19.69oABnMd_1Ffddi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-01に食べた木の屋石巻水産製の「木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2400mgで、EPAが1560mgでした。
感想：食べやすいサバ缶ですね&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;100. K＆K_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに！（岩手缶詰）&lt;a href=&quot;#100-kk_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに岩手缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/14.DCNYZ9IE_1eKWNb.webp&quot; srcset=&quot;/_astro/14.DCNYZ9IE_Z1SAKmC.webp 640w, /_astro/14.DCNYZ9IE_Z1MbnJn.webp 750w, /_astro/14.DCNYZ9IE_N1NLG.webp 828w, /_astro/14.DCNYZ9IE_Z1S2b0s.webp 1080w, /_astro/14.DCNYZ9IE_JRsHU.webp 1280w, /_astro/14.DCNYZ9IE_1KYTX7.webp 1668w, /_astro/14.DCNYZ9IE_Z1Mu1A9.webp 2048w, /_astro/14.DCNYZ9IE_Z1WkM6x.webp 2560w, /_astro/14.DCNYZ9IE_1eKWNb.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-03に食べた岩手缶詰製の「K＆K_缶つま_さば味噌イタリアン_さば味噌煮をトマトソースでイタリアンに！」です。
魚は鯖で、トマトな風味と白、青、橙色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが300mgで、EPAが150mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;101. ちようした_ごはんのおとも_国産さばのおろし煮_国産大根（田原缶詰）&lt;a href=&quot;#101-ちようした_ごはんのおとも_国産さばのおろし煮_国産大根田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/21.fZImkX-Q_Z2oFtzW.webp&quot; srcset=&quot;/_astro/21.fZImkX-Q_Z1bJw3x.webp 640w, /_astro/21.fZImkX-Q_Z15k9qi.webp 750w, /_astro/21.fZImkX-Q_1uS35L.webp 828w, /_astro/21.fZImkX-Q_ZrhtzE.webp 1080w, /_astro/21.fZImkX-Q_2bCa8I.webp 1280w, /_astro/21.fZImkX-Q_Z1Rrwq1.webp 1668w, /_astro/21.fZImkX-Q_ZlJkal.webp 2048w, /_astro/21.fZImkX-Q_ZvA5FJ.webp 2560w, /_astro/21.fZImkX-Q_Z2oFtzW.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-05に食べた田原缶詰製の「ちようした_ごはんのおとも_国産さばのおろし煮_国産大根」です。
魚は鯖で、煮付な風味と白、茶色、紺色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2560mgで、EPAが1340mgでした。
感想：おろしは見当たらない。サッパリしています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;102. ちようした_国産ぶり照焼き（田原缶詰）&lt;a href=&quot;#102-ちようした_国産ぶり照焼き田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/22.BBsjTStX_Z1Bsykx.webp&quot; srcset=&quot;/_astro/22.BBsjTStX_2gVyKw.webp 640w, /_astro/22.BBsjTStX_2nlVnL.webp 750w, /_astro/22.BBsjTStX_Z6BYT6.webp 828w, /_astro/22.BBsjTStX_kUqEK.webp 1080w, /_astro/22.BBsjTStX_Z26m3pN.webp 1280w, /_astro/22.BBsjTStX_Z15eBaB.webp 1668w, /_astro/22.BBsjTStX_qsA54.webp 2048w, /_astro/22.BBsjTStX_gBOyF.webp 2560w, /_astro/22.BBsjTStX_Z1Bsykx.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-07に食べた田原缶詰製の「ちようした_国産ぶり照焼き」です。
魚は鰤で、その他な風味と白、黄色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：鰤は歯ごたえがあるな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;103. SEE_FISH_SEAFOOD_DELICATESSEN_SMOKED_SARDINES_IN_OIL（nakato（ラトビア製造））&lt;a href=&quot;#103-see_fish_seafood_delicatessen_smoked_sardines_in_oilnakatoラトビア製造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/23.Cc1owTvG_ZvtRBC.webp&quot; srcset=&quot;/_astro/23.Cc1owTvG_Z1s2DiC.webp 640w, /_astro/23.Cc1owTvG_Z1lCgFn.webp 750w, /_astro/23.Cc1owTvG_1ezUPG.webp 828w, /_astro/23.Cc1owTvG_1qT7nF.webp 1080w, /_astro/23.Cc1owTvG_Z10nmGS.webp 1280w, /_astro/23.Cc1owTvG_J4xj.webp 1668w, /_astro/23.Cc1owTvG_1wrgMY.webp 2048w, /_astro/23.Cc1owTvG_1mAvhA.webp 2560w, /_astro/23.Cc1owTvG_ZvtRBC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-09に食べたnakato（ラトビア製造）製の「SEE_FISH_SEAFOOD_DELICATESSEN_SMOKED_SARDINES_IN_OIL」です。
魚は鰯で、オイルな風味と白、青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：こういう見た目の缶詰って美味くない確率が高いから恐る恐る食べたのだが、想像していたよりも遥かに美味かった。蓋が缶じゃないからこれは缶詰と呼んで差し支えないのかはよく分からんが。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;104. ちようした_ごはんのおとも_国産さばの味噌煮_信州蔵出（田原缶詰）&lt;a href=&quot;#104-ちようした_ごはんのおとも_国産さばの味噌煮_信州蔵出田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/24.CjSkArlW_ZgE1pg.webp&quot; srcset=&quot;/_astro/24.CjSkArlW_1u4hU.webp 640w, /_astro/24.CjSkArlW_7TqUa.webp 750w, /_astro/24.CjSkArlW_Z2m4umH.webp 828w, /_astro/24.CjSkArlW_1FIXA2.webp 1080w, /_astro/24.CjSkArlW_ZKxvuw.webp 1280w, /_astro/24.CjSkArlW_fyUJF.webp 1668w, /_astro/24.CjSkArlW_1Lh80l.webp 2048w, /_astro/24.CjSkArlW_1BqmtW.webp 2560w, /_astro/24.CjSkArlW_ZgE1pg.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-10に食べた田原缶詰製の「ちようした_ごはんのおとも_国産さばの味噌煮_信州蔵出」です。
魚は鯖で、味噌煮な風味と白、茶色、橙色の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1530mgで、EPAが920mgでした。
感想：程よい柔らかさで良いのではないでしょうか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;105. ちようした_極みの逸品_いわし蒲焼（田原缶詰）&lt;a href=&quot;#105-ちようした_極みの逸品_いわし蒲焼田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/25.BL3p92r3_1NGt5l.webp&quot; srcset=&quot;/_astro/25.BL3p92r3_1NGt5l.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-12に食べた田原缶詰製の「ちようした_極みの逸品_いわし蒲焼」です。
魚は鰯で、蒲焼な風味と黒、緑の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;106. ちようした_極みの逸品_さんま蒲焼（田原缶詰）&lt;a href=&quot;#106-ちようした_極みの逸品_さんま蒲焼田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/26.UiQUTNvj_Z29PRjX.webp&quot; srcset=&quot;/_astro/26.UiQUTNvj_Z29PRjX.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-13に食べた田原缶詰製の「ちようした_極みの逸品_さんま蒲焼」です。
魚は秋刀魚で、蒲焼な風味と黒、赤の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1510mgで、EPAが1010mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;107. ローソンオリジナル_さば水煮_2025（高木商店）&lt;a href=&quot;#107-ローソンオリジナル_さば水煮_2025高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/27.N0OMUmhI_jPiuH.webp&quot; srcset=&quot;/_astro/27.N0OMUmhI_Z2ppYkb.webp 640w, /_astro/27.N0OMUmhI_Z2j0BGV.webp 750w, /_astro/27.N0OMUmhI_hczO8.webp 828w, /_astro/27.N0OMUmhI_2heiv0.webp 1080w, /_astro/27.N0OMUmhI_Za3bzy.webp 1280w, /_astro/27.N0OMUmhI_Q4fED.webp 1668w, /_astro/27.N0OMUmhI_2mLrUj.webp 2048w, /_astro/27.N0OMUmhI_2cUGoU.webp 2560w, /_astro/27.N0OMUmhI_jPiuH.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-15に食べた高木商店製の「ローソンオリジナル_さば水煮_2025」です。
魚は鯖で、水煮な風味とベージュの缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1963mgで、EPAが1729mgでした。
感想：水のように何も考えずに食べられる鯖だ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;108. ローソンオリジナル_さば味噌煮_2025（高木商店）&lt;a href=&quot;#108-ローソンオリジナル_さば味噌煮_2025高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/28.wlW3tdPq_Z28xJ7s.webp&quot; srcset=&quot;/_astro/28.wlW3tdPq_1ARQWd.webp 640w, /_astro/28.wlW3tdPq_1Hiezs.webp 750w, /_astro/28.wlW3tdPq_ZLFGHp.webp 828w, /_astro/28.wlW3tdPq_Zb9J7a.webp 1080w, /_astro/28.wlW3tdPq_2rJTBd.webp 1280w, /_astro/28.wlW3tdPq_Z1BjLWw.webp 1668w, /_astro/28.wlW3tdPq_Z5BzGQ.webp 2048w, /_astro/28.wlW3tdPq_Zfsldf.webp 2560w, /_astro/28.wlW3tdPq_Z28xJ7s.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-17に食べた高木商店製の「ローソンオリジナル_さば味噌煮_2025」です。
魚は鯖で、味噌煮な風味とベージュの缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2934mgで、EPAが2145mgでした。
感想：やはり高木商店は安定感があるよな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;109. 木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み（木の屋石巻水産）&lt;a href=&quot;#109-木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/19.69oABnMd_1Ffddi.webp&quot; srcset=&quot;/_astro/19.69oABnMd_Tm0hn.webp 640w, /_astro/19.69oABnMd_10LmTC.webp 750w, /_astro/19.69oABnMd_Z1tcynf.webp 828w, /_astro/19.69oABnMd_Z1rxUAl.webp 1080w, /_astro/19.69oABnMd_1blI82.webp 1280w, /_astro/19.69oABnMd_2ctane.webp 1668w, /_astro/19.69oABnMd_Z1m0Lb2.webp 2048w, /_astro/19.69oABnMd_Z1vQwGq.webp 2560w, /_astro/19.69oABnMd_1Ffddi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-18に食べた木の屋石巻水産製の「木の屋_石巻水産_金華さば_彩_味噌煮_獲れたて仕込み」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2400mgで、EPAが1560mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;110. 木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[まろやか醤油味]（木の屋石巻水産）&lt;a href=&quot;#110-木の屋石巻水産_料理に活きる_サラダサバ_さば油漬けまろやか醤油味木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/30.CyRMPgWP_Z1HhaEs.webp&quot; srcset=&quot;/_astro/30.CyRMPgWP_WGYMJ.webp 640w, /_astro/30.CyRMPgWP_147mpY.webp 750w, /_astro/30.CyRMPgWP_Z1pQyQS.webp 828w, /_astro/30.CyRMPgWP_f6OkP.webp 1080w, /_astro/30.CyRMPgWP_Z2caEJI.webp 1280w, /_astro/30.CyRMPgWP_Z1b3duw.webp 1668w, /_astro/30.CyRMPgWP_kDXK9.webp 2048w, /_astro/30.CyRMPgWP_aNdeK.webp 2560w, /_astro/30.CyRMPgWP_Z1HhaEs.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-20に食べた木の屋石巻水産製の「木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[まろやか醤油味]」です。
魚は鯖で、オイルな風味と赤色、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが350mgで、EPAが100mgでした。
感想：サラダ・・・なのか？ まあ、サッパリしていて食いやすかったけど。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;111. 3つ星ローソン_北海道産まいわしみそ煮（マルハニチロ）&lt;a href=&quot;#111-3つ星ローソン_北海道産まいわしみそ煮マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/31.D4R09SdV_2m4o01.webp&quot; srcset=&quot;/_astro/31.D4R09SdV_Z1wnz7d.webp 640w, /_astro/31.D4R09SdV_Z1pXctX.webp 750w, /_astro/31.D4R09SdV_1af026.webp 828w, /_astro/31.D4R09SdV_ZKIJNC.webp 1080w, /_astro/31.D4R09SdV_1RaSTK.webp 1280w, /_astro/31.D4R09SdV_Z2bSMDY.webp 1668w, /_astro/31.D4R09SdV_ZFbAoj.webp 2048w, /_astro/31.D4R09SdV_ZP2lTH.webp 2560w, /_astro/31.D4R09SdV_2m4o01.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-23に食べたマルハニチロ製の「3つ星ローソン_北海道産まいわしみそ煮」です。
魚は鰯で、味噌煮な風味と白、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2354mgで、EPAが4013mgでした。
感想：生姜の風味があります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;112. ニッスイ_さば水煮_日本産さば使用_MACKEREL（日本水産）&lt;a href=&quot;#112-ニッスイ_さば水煮_日本産さば使用_mackerel日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/32.CHBa37pJ_Z1rMfeT.webp&quot; srcset=&quot;/_astro/32.CHBa37pJ_9avFv.webp 640w, /_astro/32.CHBa37pJ_fzSiK.webp 750w, /_astro/32.CHBa37pJ_Z2eo2Y7.webp 828w, /_astro/32.CHBa37pJ_uAJKo.webp 1080w, /_astro/32.CHBa37pJ_Z1VFJka.webp 1280w, /_astro/32.CHBa37pJ_ZUyi4X.webp 1668w, /_astro/32.CHBa37pJ_A8TaH.webp 2048w, /_astro/32.CHBa37pJ_qi8Ej.webp 2560w, /_astro/32.CHBa37pJ_Z1rMfeT.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-25に食べた日本水産製の「ニッスイ_さば水煮_日本産さば使用_MACKEREL」です。
魚は鯖で、水煮な風味と水色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2000mgで、EPAが700mgでした。
感想：うわあ出たよ。丸型なのに開けづらい缶だ・・・。味は大味だった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;113. ニッスイ_さば味噌煮_日本産さば使用_MACKEREL（日本水産）&lt;a href=&quot;#113-ニッスイ_さば味噌煮_日本産さば使用_mackerel日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/33.BvXqYaeo_Z1ivu8M.webp&quot; srcset=&quot;/_astro/33.BvXqYaeo_Z1tA91W.webp 640w, /_astro/33.BvXqYaeo_Z1naLoH.webp 750w, /_astro/33.BvXqYaeo_1d2q7m.webp 828w, /_astro/33.BvXqYaeo_DRuQv.webp 1080w, /_astro/33.BvXqYaeo_Z1MoYe3.webp 1280w, /_astro/33.BvXqYaeo_ZLhwXQ.webp 1668w, /_astro/33.BvXqYaeo_JpEgO.webp 2048w, /_astro/33.BvXqYaeo_zySKq.webp 2560w, /_astro/33.BvXqYaeo_Z1ivu8M.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-28に食べた日本水産製の「ニッスイ_さば味噌煮_日本産さば使用_MACKEREL」です。
魚は鯖で、味噌煮な風味と黄色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2000mgで、EPAが700mgでした。
感想：あー、これも開けにくい・・・。味噌味が付いていたから大味さは目立たなかったな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;114. 木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み（木の屋石巻水産）&lt;a href=&quot;#114-木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/18.BYqAMY2z_1qhDrb.webp&quot; srcset=&quot;/_astro/18.BYqAMY2z_1nSJgK.webp 640w, /_astro/18.BYqAMY2z_1uj6T0.webp 750w, /_astro/18.BYqAMY2z_ZYEOnR.webp 828w, /_astro/18.BYqAMY2z_Z1Gvums.webp 1080w, /_astro/18.BYqAMY2z_Vo9lU.webp 1280w, /_astro/18.BYqAMY2z_1WvAB7.webp 1668w, /_astro/18.BYqAMY2z_Z1AXkW9.webp 2048w, /_astro/18.BYqAMY2z_Z1KO6sx.webp 2560w, /_astro/18.BYqAMY2z_1qhDrb.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-09-29に食べた木の屋石巻水産製の「木の屋_石巻水産_金華さば_彩_水煮_獲れたて仕込み」です。
魚は鯖で、水煮な風味と白、水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1590mgで、EPAが1330mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;115. 木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[あっさり塩味]（木の屋石巻水産）&lt;a href=&quot;#115-木の屋石巻水産_料理に活きる_サラダサバ_さば油漬けあっさり塩味木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/35.B9vL-1Jk_1x0D2W.webp&quot; srcset=&quot;/_astro/35.B9vL-1Jk_Z2x2quy.webp 640w, /_astro/35.B9vL-1Jk_Z2qC3Rj.webp 750w, /_astro/35.B9vL-1Jk_9A8DK.webp 828w, /_astro/35.B9vL-1Jk_Z1zMuKG.webp 1080w, /_astro/35.B9vL-1Jk_1378WG.webp 1280w, /_astro/35.B9vL-1Jk_24eAcS.webp 1668w, /_astro/35.B9vL-1Jk_Z1uflln.webp 2048w, /_astro/35.B9vL-1Jk_Z1E66QL.webp 2560w, /_astro/35.B9vL-1Jk_1x0D2W.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-02に食べた木の屋石巻水産製の「木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[あっさり塩味]」です。
魚は鯖で、オイルな風味と青、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが590mgで、EPAが300mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;116. HOKO_国内産さば_水煮（宝幸）&lt;a href=&quot;#116-hoko_国内産さば_水煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/36.BbNAeN1V_Z1PQVrt.webp&quot; srcset=&quot;/_astro/36.BbNAeN1V_ZbBD7n.webp 640w, /_astro/36.BbNAeN1V_Z5cgu8.webp 750w, /_astro/36.BbNAeN1V_2v0V1V.webp 828w, /_astro/36.BbNAeN1V_6w3xO.webp 1080w, /_astro/36.BbNAeN1V_Z2kKqwJ.webp 1280w, /_astro/36.BbNAeN1V_Z1jCYhx.webp 1668w, /_astro/36.BbNAeN1V_c4cX8.webp 2048w, /_astro/36.BbNAeN1V_2drrJ.webp 2560w, /_astro/36.BbNAeN1V_Z1PQVrt.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-04に食べた宝幸製の「HOKO_国内産さば_水煮」です。
魚は鯖で、水煮な風味と白、青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：塩がちょっと濃いめだが美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;117. みなさまのお墨付き_香ばしいいわしの蒲焼（西友オリジナル、岩手缶詰）&lt;a href=&quot;#117-みなさまのお墨付き_香ばしいいわしの蒲焼西友オリジナル岩手缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/37.CWSDm_qq_3FONB.webp&quot; srcset=&quot;/_astro/37.CWSDm_qq_1lce9B.webp 640w, /_astro/37.CWSDm_qq_1rBALQ.webp 750w, /_astro/37.CWSDm_qq_Z12mkv1.webp 828w, /_astro/37.CWSDm_qq_214ONT.webp 1080w, /_astro/37.CWSDm_qq_ZqcEgE.webp 1280w, /_astro/37.CWSDm_qq_zTLXx.webp 1668w, /_astro/37.CWSDm_qq_26BYed.webp 2048w, /_astro/37.CWSDm_qq_1VLdHO.webp 2560w, /_astro/37.CWSDm_qq_3FONB.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-06に食べた西友オリジナル、岩手缶詰製の「みなさまのお墨付き_香ばしいいわしの蒲焼」です。
魚は鰯で、蒲焼な風味と白、橙色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1157mgで、EPAが1180mgでした。
感想：普通に無意識に食べやすい良い蒲焼きです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;118. はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：アヒージョ）（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#118-はごろもking-oscar_オイルサーディン_丁寧に手詰め仕上げ調理例アヒージョはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/38.CUBWOC_Z_ZfFTHk.webp&quot; srcset=&quot;/_astro/38.CUBWOC_Z_ZWvmLq.webp 640w, /_astro/38.CUBWOC_Z_ZQ609b.webp 750w, /_astro/38.CUBWOC_Z_1J7cmS.webp 828w, /_astro/38.CUBWOC_Z_1GH5hX.webp 1080w, /_astro/38.CUBWOC_Z_ZJzoMA.webp 1280w, /_astro/38.CUBWOC_Z_gx2rB.webp 1668w, /_astro/38.CUBWOC_Z_1MfeHh.webp 2048w, /_astro/38.CUBWOC_Z_1CotbS.webp 2560w, /_astro/38.CUBWOC_Z_ZfFTHk.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-08に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：アヒージョ）」です。
魚は鰯で、オイルな風味と赤の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：やはり、他のイワシのオイル漬けよりも質が良い感じがするんだよな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;119. 木の屋石巻水産_秋冬さば_味噌煮_宮城県・石巻港女川港水揚げ（木の屋石巻水産）&lt;a href=&quot;#119-木の屋石巻水産_秋冬さば_味噌煮_宮城県石巻港女川港水揚げ木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/39.D9qqcrIO_Z1HdxKP.webp&quot; srcset=&quot;/_astro/39.D9qqcrIO_Z2jpI1o.webp 640w, /_astro/39.D9qqcrIO_Z2d0lo9.webp 750w, /_astro/39.D9qqcrIO_ncQ7U.webp 828w, /_astro/39.D9qqcrIO_fares.webp 1080w, /_astro/39.D9qqcrIO_Z2c72Q6.webp 1280w, /_astro/39.D9qqcrIO_Z1aYAAT.webp 1668w, /_astro/39.D9qqcrIO_kHADL.webp 2048w, /_astro/39.D9qqcrIO_aQP8n.webp 2560w, /_astro/39.D9qqcrIO_Z1HdxKP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-11に食べた木の屋石巻水産製の「木の屋石巻水産_秋冬さば_味噌煮_宮城県・石巻港女川港水揚げ」です。
魚は鯖で、味噌煮な風味と赤、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが640mgで、EPAが230mgでした。
感想：みりんと魚の脂の風味が強くて、味噌煮っぽい味はしなかったな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;120. はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：サラダ）（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#120-はごろもking-oscar_オイルサーディン_丁寧に手詰め仕上げ調理例サラダはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/40.DzZTEwJV_ZDyArp.webp&quot; srcset=&quot;/_astro/40.DzZTEwJV_1DNTcj.webp 640w, /_astro/40.DzZTEwJV_1KegOy.webp 750w, /_astro/40.DzZTEwJV_ZIJEsj.webp 828w, /_astro/40.DzZTEwJV_1iOoxS.webp 1080w, /_astro/40.DzZTEwJV_Z18s5wF.webp 1280w, /_astro/40.DzZTEwJV_Z7kDht.webp 1668w, /_astro/40.DzZTEwJV_1omxXc.webp 2048w, /_astro/40.DzZTEwJV_1evMrN.webp 2560w, /_astro/40.DzZTEwJV_ZDyArp.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-15に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：サラダ）」です。
魚は鰯で、オイルな風味と赤の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：安定したイワシのオイル漬けである。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;121. 木の屋石巻水産_秋冬さば_水煮_宮城県・石巻港女川港水揚げ（木の屋石巻水産）&lt;a href=&quot;#121-木の屋石巻水産_秋冬さば_水煮_宮城県石巻港女川港水揚げ木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/15.CaVkWz6j_1Hi4T6.webp&quot; srcset=&quot;/_astro/15.CaVkWz6j_Z1xEPt3.webp 640w, /_astro/15.CaVkWz6j_Z1rfsPN.webp 750w, /_astro/15.CaVkWz6j_18WIFg.webp 828w, /_astro/15.CaVkWz6j_Z1pv3Tx.webp 1080w, /_astro/15.CaVkWz6j_1dozNP.webp 1280w, /_astro/15.CaVkWz6j_2ew242.webp 1668w, /_astro/15.CaVkWz6j_Z1jWTue.webp 2048w, /_astro/15.CaVkWz6j_Z1tNF0C.webp 2560w, /_astro/15.CaVkWz6j_1Hi4T6.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-18に食べた木の屋石巻水産製の「木の屋石巻水産_秋冬さば_水煮_宮城県・石巻港女川港水揚げ」です。
魚は鯖で、水煮な風味と青、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが840mgで、EPAが270mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;122. AIKOCHAN_ご当地_秋田編_鯖_さば味噌煮_秋田味噌使用（伊藤食品）&lt;a href=&quot;#122-aikochan_ご当地_秋田編_鯖_さば味噌煮_秋田味噌使用伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/42.DqaPtGnC_Z2vt7im.webp&quot; srcset=&quot;/_astro/42.DqaPtGnC_r611k.webp 640w, /_astro/42.DqaPtGnC_xvnDz.webp 750w, /_astro/42.DqaPtGnC_Z1VsxDi.webp 828w, /_astro/42.DqaPtGnC_Zy57i4.webp 1080w, /_astro/42.DqaPtGnC_24Owqj.webp 1280w, /_astro/42.DqaPtGnC_Z1Yfa8q.webp 1668w, /_astro/42.DqaPtGnC_ZswWRK.webp 2048w, /_astro/42.DqaPtGnC_ZCnIo9.webp 2560w, /_astro/42.DqaPtGnC_Z2vt7im.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-20に食べた伊藤食品製の「AIKOCHAN_ご当地_秋田編_鯖_さば味噌煮_秋田味噌使用」です。
魚は鯖で、味噌煮な風味とベージュ、ピンクの缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1740mgで、EPAが930mgでした。
感想：魚の脂と味噌の味がちょうど良いバランスで配合されている。味噌自体の味も美味いなあ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;123. 木の屋_石巻水産_金華いわし_醤油味付_獲れたて仕込み（木の屋石巻水産）&lt;a href=&quot;#123-木の屋_石巻水産_金華いわし_醤油味付_獲れたて仕込み木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/43.BOIpiViQ_Z11q4OD.webp&quot; srcset=&quot;/_astro/43.BOIpiViQ_Z1j27UM.webp 640w, /_astro/43.BOIpiViQ_Z1cBKix.webp 750w, /_astro/43.BOIpiViQ_1nArdw.webp 828w, /_astro/43.BOIpiViQ_UWUaE.webp 1080w, /_astro/43.BOIpiViQ_Z1vjyTT.webp 1280w, /_astro/43.BOIpiViQ_Zuc7EH.webp 1668w, /_astro/43.BOIpiViQ_11v4zX.webp 2048w, /_astro/43.BOIpiViQ_QEj4z.webp 2560w, /_astro/43.BOIpiViQ_Z11q4OD.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-23に食べた木の屋石巻水産製の「木の屋_石巻水産_金華いわし_醤油味付_獲れたて仕込み」です。
魚は鰯で、醤油煮な風味と白、茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1790mgで、EPAが2260mgでした。
感想：少し臭みがある。しかしながら、美味い部類だと思う。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;124. マルハニチロ_さんまみそ煮_北海道産さんま使用（マルハニチロ）&lt;a href=&quot;#124-マルハニチロ_さんまみそ煮_北海道産さんま使用マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/44.D5i57Yep_Z1RYEIP.webp&quot; srcset=&quot;/_astro/44.D5i57Yep_1Bntts.webp 640w, /_astro/44.D5i57Yep_1HMQ6H.webp 750w, /_astro/44.D5i57Yep_ZLb5ba.webp 828w, /_astro/44.D5i57Yep_4okgs.webp 1080w, /_astro/44.D5i57Yep_Z2mS9O6.webp 1280w, /_astro/44.D5i57Yep_Z1lKHyT.webp 1668w, /_astro/44.D5i57Yep_9VtFL.webp 2048w, /_astro/44.D5i57Yep_5Ian.webp 2560w, /_astro/44.D5i57Yep_Z1RYEIP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-10-29に食べたマルハニチロ製の「マルハニチロ_さんまみそ煮_北海道産さんま使用」です。
魚は秋刀魚で、味噌煮な風味と臙脂色、赤色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1796mgで、EPAが852mgでした。
感想：程よく食べやすいサンマだ。パクパク食べられる。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;125. はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：ペペロンチーノスパゲッティ）（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#125-はごろもking-oscar_オイルサーディン_丁寧に手詰め仕上げ調理例ペペロンチーノスパゲッティはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/45.CumnSkZ6_Z1zbpkt.webp&quot; srcset=&quot;/_astro/45.CumnSkZ6_Zb4NSn.webp 640w, /_astro/45.CumnSkZ6_Z4Erg8.webp 750w, /_astro/45.CumnSkZ6_2vxKfV.webp 828w, /_astro/45.CumnSkZ6_nczEO.webp 1080w, /_astro/45.CumnSkZ6_Z244TpJ.webp 1280w, /_astro/45.CumnSkZ6_Z12Wsax.webp 1668w, /_astro/45.CumnSkZ6_sJJ58.webp 2048w, /_astro/45.CumnSkZ6_iSXyJ.webp 2560w, /_astro/45.CumnSkZ6_Z1zbpkt.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-02に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：ペペロンチーノスパゲッティ）」です。
魚は鰯で、オイルな風味と赤の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：いつも通り美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;126. マルハニチロ_北海道のいわし_水煮_食塩不使用（マルハニチロ）&lt;a href=&quot;#126-マルハニチロ_北海道のいわし_水煮_食塩不使用マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/46.iJgW8qSH_ruJaC.webp&quot; srcset=&quot;/_astro/46.iJgW8qSH_11WjiT.webp 640w, /_astro/46.iJgW8qSH_18mFV9.webp 750w, /_astro/46.iJgW8qSH_Z1lBflI.webp 828w, /_astro/46.iJgW8qSH_2oSJaU.webp 1080w, /_astro/46.iJgW8qSH_Z2nJTD.webp 1280w, /_astro/46.iJgW8qSH_XIGky.webp 1668w, /_astro/46.iJgW8qSH_2uqSAe.webp 2048w, /_astro/46.iJgW8qSH_2kA84P.webp 2560w, /_astro/46.iJgW8qSH_ruJaC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-06に食べたマルハニチロ製の「マルハニチロ_北海道のいわし_水煮_食塩不使用」です。
魚は鰯で、水煮な風味と水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1500mgで、EPAが2590mgでした。
感想：これこそ純粋な水煮だと言えるほど真水だった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;127. Norlake_鯖_水煮（ノルレェイク・インターナショナル）&lt;a href=&quot;#127-norlake_鯖_水煮ノルレェイクインターナショナル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/47.nHSRLQF3_26NYey.webp&quot; srcset=&quot;/_astro/47.nHSRLQF3_1fe4kD.webp 640w, /_astro/47.nHSRLQF3_1lDqWS.webp 750w, /_astro/47.nHSRLQF3_Z18kujY.webp 828w, /_astro/47.nHSRLQF3_Z10Y9z5.webp 1080w, /_astro/47.nHSRLQF3_1BUu9i.webp 1280w, /_astro/47.nHSRLQF3_Z2r9cpr.webp 1668w, /_astro/47.nHSRLQF3_ZUr09L.webp 2048w, /_astro/47.nHSRLQF3_Z15hKFa.webp 2560w, /_astro/47.nHSRLQF3_26NYey.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-11に食べたノルレェイク・インターナショナル製の「Norlake_鯖_水煮」です。
魚は鯖で、水煮な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1444mgで、EPAが627mgでした。
感想：思っていたよりは美味かった。以前に食べたやつが不味かったんだよな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;128. Norlake_鯖_味噌煮（ノルレェイク・インターナショナル）&lt;a href=&quot;#128-norlake_鯖_味噌煮ノルレェイクインターナショナル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/48.W-VVQ-RO_1Ap8iI.webp&quot; srcset=&quot;/_astro/48.W-VVQ-RO_ZoPDwI.webp 640w, /_astro/48.W-VVQ-RO_ZiqgTt.webp 750w, /_astro/48.W-VVQ-RO_2hLUBA.webp 828w, /_astro/48.W-VVQ-RO_Z1wo0uU.webp 1080w, /_astro/48.W-VVQ-RO_16vDds.webp 1280w, /_astro/48.W-VVQ-RO_27D5sE.webp 1668w, /_astro/48.W-VVQ-RO_Z1qPQ5B.webp 2048w, /_astro/48.W-VVQ-RO_Z1AGBB0.webp 2560w, /_astro/48.W-VVQ-RO_1Ap8iI.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-19に食べたノルレェイク・インターナショナル製の「Norlake_鯖_味噌煮」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1235mgで、EPAが532mgでした。
感想：蓋も開けづらいし、中の身も箸で割き難くて汁が服に飛んだし、食べるのにイライラした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;129. キョクヨー_さんま蒲焼_2025（極洋）&lt;a href=&quot;#129-キョクヨー_さんま蒲焼_2025極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/49.BETrJsLI_Z1UMpa5.webp&quot; srcset=&quot;/_astro/49.BETrJsLI_17gMNm.webp 640w, /_astro/49.BETrJsLI_1dGaqB.webp 750w, /_astro/49.BETrJsLI_Z1ghKQg.webp 828w, /_astro/49.BETrJsLI_1AzPd.webp 1080w, /_astro/49.BETrJsLI_Z2pFTfl.webp 1280w, /_astro/49.BETrJsLI_Z1oys09.webp 1668w, /_astro/49.BETrJsLI_78Jfw.webp 2048w, /_astro/49.BETrJsLI_Z2H1fR.webp 2560w, /_astro/49.BETrJsLI_Z1UMpa5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-25に食べた極洋製の「キョクヨー_さんま蒲焼_2025」です。
魚は秋刀魚で、蒲焼な風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが639mgで、EPAが225mgでした。
感想：不可は無かった。無意識に平らげていた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;130. マルハニチロ_さんま蒲焼_減塩_塩分50%カット（マルハニチロ）&lt;a href=&quot;#130-マルハニチロ_さんま蒲焼_減塩_塩分50カットマルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/50.C7mg00Yo_Z1ovfNy.webp&quot; srcset=&quot;/_astro/50.C7mg00Yo_XiUGx.webp 640w, /_astro/50.C7mg00Yo_14IijM.webp 750w, /_astro/50.C7mg00Yo_Z1pfCX5.webp 828w, /_astro/50.C7mg00Yo_xRJbJ.webp 1080w, /_astro/50.C7mg00Yo_Z1SoJSO.webp 1280w, /_astro/50.C7mg00Yo_ZRhiDC.webp 1668w, /_astro/50.C7mg00Yo_DpSB3.webp 2048w, /_astro/50.C7mg00Yo_tz85E.webp 2560w, /_astro/50.C7mg00Yo_Z1ovfNy.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-27に食べたマルハニチロ製の「マルハニチロ_さんま蒲焼_減塩_塩分50%カット」です。
魚は秋刀魚で、蒲焼な風味と黄緑、歌舞伎定式幕の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1900mgで、EPAが490mgでした。
感想：確かに塩分が少ない気がする。なので味が薄めです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;131. わかさおばま_ミコレ_鯖CAN_みそ_旬獲れ極さば、丸ごと骨まで（福井缶詰）&lt;a href=&quot;#131-わかさおばま_ミコレ_鯖can_みそ_旬獲れ極さば丸ごと骨まで福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/51.DnvmyR7M_ZqmI9i.webp&quot; srcset=&quot;/_astro/51.DnvmyR7M_Z8OqS1.webp 640w, /_astro/51.DnvmyR7M_Z2p4fL.webp 750w, /_astro/51.DnvmyR7M_Z2wo0xD.webp 828w, /_astro/51.DnvmyR7M_1w1gQ0.webp 1080w, /_astro/51.DnvmyR7M_ZUgdey.webp 1280w, /_astro/51.DnvmyR7M_5Qe0D.webp 1668w, /_astro/51.DnvmyR7M_1Byqgj.webp 2048w, /_astro/51.DnvmyR7M_1rHEJU.webp 2560w, /_astro/51.DnvmyR7M_ZqmI9i.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-11-29に食べた福井缶詰製の「わかさおばま_ミコレ_鯖CAN_みそ_旬獲れ極さば、丸ごと骨まで」です。
魚は鯖で、味噌煮な風味と白、青、黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：程よい脂と味噌の風味でバランスの良い味だった気がする。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;132. わかさおばま_ミコレ_鯖CAN_水煮_旬獲れ極さば、丸ごと骨まで（福井缶詰）&lt;a href=&quot;#132-わかさおばま_ミコレ_鯖can_水煮_旬獲れ極さば丸ごと骨まで福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/52.Cq8_CqJL_1DkMbi.webp&quot; srcset=&quot;/_astro/52.Cq8_CqJL_2dlnmk.webp 640w, /_astro/52.Cq8_CqJL_2jKJYz.webp 750w, /_astro/52.Cq8_CqJL_Zadbii.webp 828w, /_astro/52.Cq8_CqJL_Z1tslCl.webp 1080w, /_astro/52.Cq8_CqJL_19ri62.webp 1280w, /_astro/52.Cq8_CqJL_2ayJle.webp 1668w, /_astro/52.Cq8_CqJL_Z1nUcd2.webp 2048w, /_astro/52.Cq8_CqJL_Z1xKWIq.webp 2560w, /_astro/52.Cq8_CqJL_1DkMbi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-02に食べた福井缶詰製の「わかさおばま_ミコレ_鯖CAN_水煮_旬獲れ極さば、丸ごと骨まで」です。
魚は鯖で、水煮な風味と白、青、水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：程よい脂と味噌の風味でバランスの良い塩味だった気がする。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;133. 若狭宇宙鯖缶_醤油味_宇宙に行った味！！_小浜水産高等学校_若狭高等学校_SPACE_MACKEREL_CAN（福井缶詰）&lt;a href=&quot;#133-若狭宇宙鯖缶_醤油味_宇宙に行った味_小浜水産高等学校_若狭高等学校_space_mackerel_can福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/53.D7wLvzgG_2eJ0NV.webp&quot; srcset=&quot;/_astro/53.D7wLvzgG_Z1mBBxv.webp 640w, /_astro/53.D7wLvzgG_Z1gceUg.webp 750w, /_astro/53.D7wLvzgG_1k0WAN.webp 828w, /_astro/53.D7wLvzgG_ZS47YH.webp 1080w, /_astro/53.D7wLvzgG_1JPvIF.webp 1280w, /_astro/53.D7wLvzgG_Z2jeaP4.webp 1668w, /_astro/53.D7wLvzgG_ZMvXzo.webp 2048w, /_astro/53.D7wLvzgG_ZWmJ5M.webp 2560w, /_astro/53.D7wLvzgG_2eJ0NV.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-04に食べた福井缶詰製の「若狭宇宙鯖缶_醤油味_宇宙に行った味！！_小浜水産高等学校_若狭高等学校_SPACE_MACKEREL_CAN」です。
魚は鯖で、醤油煮な風味と白、金色の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：このクオリティの味が宇宙で食えたらバンザイするだろうなあ。うう美味い。以下、商品パッケージに書いてあったPR文章です。 — PRODUCTION STORY: 宇宙食鯖缶は小浜水産高校と福井県立若狭高校で14年という長い年月をかけ、開発されました。生徒たちは工夫し、液にとろみをつけたり、味を濃くしたりするなど試行錯誤を重ねました。そしてついに2018年、JAXAによる宇宙日本食として認証されました。本製品はレシピを再現し、宇宙食鯖缶を、地上の方にも手に届きやすいものにしました。 若狭の宝プロジェクト第1弾 若狭宇宙鯖缶: 「新たな若狭の宝の創造」をコンセプトに、県立若狭高等学校・福井缶詰株式会社・福井物産株式会社が力を合わせ、若狭の宝となりえる新しいものを作り出し、世の中に発信していくプロジェクトです。 第1弾は、県立若狭高校海洋科学科が作り出したJAXA認証 宇宙日本食を多くの方に食してもらいたいという想いから、それぞれの力を掛け合わせて量産できる缶詰にしました。宇宙に行った「味」をお楽しみ下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;134. マルハニチロ_北海道産_ぶり照焼き（マルハニチロ）&lt;a href=&quot;#134-マルハニチロ_北海道産_ぶり照焼きマルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/54.Bzyh-Nhx_1LrV0C.webp&quot; srcset=&quot;/_astro/54.Bzyh-Nhx_ZIuGsE.webp 640w, /_astro/54.Bzyh-Nhx_ZC5jPp.webp 750w, /_astro/54.Bzyh-Nhx_1X7RFE.webp 828w, /_astro/54.Bzyh-Nhx_Z1llcN1.webp 1080w, /_astro/54.Bzyh-Nhx_1hyqUm.webp 1280w, /_astro/54.Bzyh-Nhx_2iFSay.webp 1668w, /_astro/54.Bzyh-Nhx_Z1fN3nH.webp 2048w, /_astro/54.Bzyh-Nhx_Z1pDNT6.webp 2560w, /_astro/54.Bzyh-Nhx_1LrV0C.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-06に食べたマルハニチロ製の「マルハニチロ_北海道産_ぶり照焼き」です。
魚は鰤で、塩焼な風味と黄緑、歌舞伎定式幕の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが871mgで、EPAが840mgでした。
感想：このシリーズはやはりこの甘辛いタレで勝負してきている感が強いな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;135. KINOKUNIYA_北海道根室産さんま使用_さんま醤油煮（マルユウ）&lt;a href=&quot;#135-kinokuniya_北海道根室産さんま使用_さんま醤油煮マルユウ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/55.hx3JWKLm_ZByDRA.webp&quot; srcset=&quot;/_astro/55.hx3JWKLm_Z1seASy.webp 640w, /_astro/55.hx3JWKLm_Z1lOegj.webp 750w, /_astro/55.hx3JWKLm_1enXfK.webp 828w, /_astro/55.hx3JWKLm_1kOl7H.webp 1080w, /_astro/55.hx3JWKLm_Z16s8WQ.webp 1280w, /_astro/55.hx3JWKLm_Z5kGHE.webp 1668w, /_astro/55.hx3JWKLm_1qmux1.webp 2048w, /_astro/55.hx3JWKLm_1gvJ1C.webp 2560w, /_astro/55.hx3JWKLm_ZByDRA.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-09に食べたマルユウ製の「KINOKUNIYA_北海道根室産さんま使用_さんま醤油煮」です。
魚は秋刀魚で、醤油煮な風味と紺色、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：秋刀魚が缶の中に花びらのように絢爛に入れられていて笑った。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;136. はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：ペンネペペロンチーノ）（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#136-はごろもking-oscar_オイルサーディン_丁寧に手詰め仕上げ調理例ペンネペペロンチーノはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/56.KkBL-0YA_2s2Rcs.webp&quot; srcset=&quot;/_astro/56.KkBL-0YA_1pUeej.webp 640w, /_astro/56.KkBL-0YA_1wkAQy.webp 750w, /_astro/56.KkBL-0YA_ZWDkqj.webp 828w, /_astro/56.KkBL-0YA_ZEKgBb.webp 1080w, /_astro/56.KkBL-0YA_1X9n7c.webp 1280w, /_astro/56.KkBL-0YA_Z25Ujrx.webp 1668w, /_astro/56.KkBL-0YA_Zzd7bR.webp 2048w, /_astro/56.KkBL-0YA_ZJ3RHg.webp 2560w, /_astro/56.KkBL-0YA_2s2Rcs.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-11に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（調理例：ペンネペペロンチーノ）」です。
魚は鰯で、オイルな風味と赤の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：パッケージがいつも違うから買って食っているのだが、美味いので全く問題ないな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;137. キョクヨー_さば水煮_日本水揚げ原料使用_2025（極洋）&lt;a href=&quot;#137-キョクヨー_さば水煮_日本水揚げ原料使用_2025極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/57.tAiKT8_x_Z1tHjXG.webp&quot; srcset=&quot;/_astro/57.tAiKT8_x_ZuTOhx.webp 640w, /_astro/57.tAiKT8_x_ZourEi.webp 750w, /_astro/57.tAiKT8_x_2bHJQL.webp 828w, /_astro/57.tAiKT8_x_sFF1B.webp 1080w, /_astro/57.tAiKT8_x_Z1XAO3W.webp 1280w, /_astro/57.tAiKT8_x_ZWtmNK.webp 1668w, /_astro/57.tAiKT8_x_ydOqU.webp 2048w, /_astro/57.tAiKT8_x_on3Uw.webp 2560w, /_astro/57.tAiKT8_x_Z1tHjXG.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-16に食べた極洋製の「キョクヨー_さば水煮_日本水揚げ原料使用_2025」です。
魚は鯖で、水煮な風味と水色、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1445mgで、EPAが1201mgでした。
感想：一般的なサバ缶です。微かに魚特有の臭いが強い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;138. キョクヨー_さばみそ煮_日本水揚げ原料使用_2025（極洋）&lt;a href=&quot;#138-キョクヨー_さばみそ煮_日本水揚げ原料使用_2025極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/58.B55S-ELo_Z2it2k3.webp&quot; srcset=&quot;/_astro/58.B55S-ELo_7uNNd.webp 640w, /_astro/58.B55S-ELo_dUbqs.webp 750w, /_astro/58.B55S-ELo_Z2g3JQp.webp 828w, /_astro/58.B55S-ELo_Zl52jK.webp 1080w, /_astro/58.B55S-ELo_2hOBoC.webp 1280w, /_astro/58.B55S-ELo_Z1Lf5a7.webp 1668w, /_astro/58.B55S-ELo_ZfwRTr.webp 2048w, /_astro/58.B55S-ELo_ZpnDpP.webp 2560w, /_astro/58.B55S-ELo_Z2it2k3.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-18に食べた極洋製の「キョクヨー_さばみそ煮_日本水揚げ原料使用_2025」です。
魚は鯖で、味噌煮な風味と橙色、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが887mgで、EPAが680mgでした。
感想：ごく普通の味の味噌煮のサバ缶です。大ぶり。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;139. キョクヨー_さば味付_日本水揚げ原料使用_2025（極洋）&lt;a href=&quot;#139-キョクヨー_さば味付_日本水揚げ原料使用_2025極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/59.C2QfABJl_1zC1kp.webp&quot; srcset=&quot;/_astro/59.C2QfABJl_Z1dT9GG.webp 640w, /_astro/59.C2QfABJl_Z17tM4r.webp 750w, /_astro/59.C2QfABJl_1sIprC.webp 828w, /_astro/59.C2QfABJl_Z1xb7te.webp 1080w, /_astro/59.C2QfABJl_15Iwf9.webp 1280w, /_astro/59.C2QfABJl_26PXul.webp 1668w, /_astro/59.C2QfABJl_Z1rCX3U.webp 2048w, /_astro/59.C2QfABJl_Z1BtIzj.webp 2560w, /_astro/59.C2QfABJl_1zC1kp.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-20に食べた極洋製の「キョクヨー_さば味付_日本水揚げ原料使用_2025」です。
魚は鯖で、煮付な風味と赤、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1676mgで、EPAが1369mgでした。
感想：このパッケージの他の味と比べたら美味い方だと思う&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;140. KINOKUNIYA_北海道産_さんま蒲焼_山椒入り（田原缶詰）&lt;a href=&quot;#140-kinokuniya_北海道産_さんま蒲焼_山椒入り田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/60.A0pSbkhG_Z1VBaOc.webp&quot; srcset=&quot;/_astro/60.A0pSbkhG_ZlNkbG.webp 640w, /_astro/60.A0pSbkhG_ZfnWyr.webp 750w, /_astro/60.A0pSbkhG_2kOeWC.webp 828w, /_astro/60.A0pSbkhG_LOb6.webp 1080w, /_astro/60.A0pSbkhG_Z2quETs.webp 1280w, /_astro/60.A0pSbkhG_Z1pndEg.webp 1668w, /_astro/60.A0pSbkhG_6jXAp.webp 2048w, /_astro/60.A0pSbkhG_Z3vLTY.webp 2560w, /_astro/60.A0pSbkhG_Z1VBaOc.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-22に食べた田原缶詰製の「KINOKUNIYA_北海道産_さんま蒲焼_山椒入り」です。
魚は秋刀魚で、蒲焼な風味と黄緑、茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：ちょうど良い甘辛タレではないでしょうか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;141. KINOKUNIYA_北海道産_さんま蒲焼_山椒入り（田原缶詰）&lt;a href=&quot;#141-kinokuniya_北海道産_さんま蒲焼_山椒入り田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/60.A0pSbkhG_Z1VBaOc.webp&quot; srcset=&quot;/_astro/60.A0pSbkhG_ZlNkbG.webp 640w, /_astro/60.A0pSbkhG_ZfnWyr.webp 750w, /_astro/60.A0pSbkhG_2kOeWC.webp 828w, /_astro/60.A0pSbkhG_LOb6.webp 1080w, /_astro/60.A0pSbkhG_Z2quETs.webp 1280w, /_astro/60.A0pSbkhG_Z1pndEg.webp 1668w, /_astro/60.A0pSbkhG_6jXAp.webp 2048w, /_astro/60.A0pSbkhG_Z3vLTY.webp 2560w, /_astro/60.A0pSbkhG_Z1VBaOc.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-24に食べた田原缶詰製の「KINOKUNIYA_北海道産_さんま蒲焼_山椒入り」です。
魚は秋刀魚で、蒲焼な風味と黄緑、茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;142. 気仙沼ほてい_鰯_醤油煮（気仙沼ほてい）&lt;a href=&quot;#142-気仙沼ほてい_鰯_醤油煮気仙沼ほてい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/62.IO9X2Jj4_2wqbE5.webp&quot; srcset=&quot;/_astro/62.IO9X2Jj4_2f5NIT.webp 640w, /_astro/62.IO9X2Jj4_2lvbm9.webp 750w, /_astro/62.IO9X2Jj4_Z8sJUI.webp 828w, /_astro/62.IO9X2Jj4_ZAmW9y.webp 1080w, /_astro/62.IO9X2Jj4_22wGyO.webp 1280w, /_astro/62.IO9X2Jj4_Z21wYYU.webp 1668w, /_astro/62.IO9X2Jj4_ZuOMJf.webp 2048w, /_astro/62.IO9X2Jj4_ZEFyfD.webp 2560w, /_astro/62.IO9X2Jj4_2wqbE5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-26に食べた気仙沼ほてい製の「気仙沼ほてい_鰯_醤油煮」です。
魚は鰯で、醤油煮な風味と白、赤の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2800mgで、EPAが3700mgでした。
感想：魚の脂でとろみも付いていて美味しいですよ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;143. キョクヨー_さば水煮_天日塩を使用した素材の味をいかした水煮です（極洋）&lt;a href=&quot;#143-キョクヨー_さば水煮_天日塩を使用した素材の味をいかした水煮です極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/63.BnrkI8gh_2mAuux.webp&quot; srcset=&quot;/_astro/63.BnrkI8gh_ZxkbxW.webp 640w, /_astro/63.BnrkI8gh_ZqTNUH.webp 750w, /_astro/63.BnrkI8gh_29inAm.webp 828w, /_astro/63.BnrkI8gh_ZKcDj6.webp 1080w, /_astro/63.BnrkI8gh_1RH0ph.webp 1280w, /_astro/63.BnrkI8gh_Z2bmG9s.webp 1668w, /_astro/63.BnrkI8gh_ZEEtSM.webp 2048w, /_astro/63.BnrkI8gh_ZOvfpb.webp 2560w, /_astro/63.BnrkI8gh_2mAuux.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-28に食べた極洋製の「キョクヨー_さば水煮_天日塩を使用した素材の味をいかした水煮です」です。
魚は鯖で、水煮な風味と赤、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1426mgで、EPAが973mgでした。
感想：食べやすい部類だと思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;144. キョクヨー_さばみそ煮_信州産のみそを使用した旨味溢れるみそ煮です（極洋）&lt;a href=&quot;#144-キョクヨー_さばみそ煮_信州産のみそを使用した旨味溢れるみそ煮です極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/64.CNKLXHqk_1Fkb3R.webp&quot; srcset=&quot;/_astro/64.CNKLXHqk_1SovqJ.webp 640w, /_astro/64.CNKLXHqk_1YNS3Y.webp 750w, /_astro/64.CNKLXHqk_Zua3dS.webp 828w, /_astro/64.CNKLXHqk_Z1rsWJL.webp 1080w, /_astro/64.CNKLXHqk_1bqFXB.webp 1280w, /_astro/64.CNKLXHqk_2cy8dN.webp 1668w, /_astro/64.CNKLXHqk_Z1lUNks.webp 2048w, /_astro/64.CNKLXHqk_Z1vLyPQ.webp 2560w, /_astro/64.CNKLXHqk_1Fkb3R.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-12-30に食べた極洋製の「キョクヨー_さばみそ煮_信州産のみそを使用した旨味溢れるみそ煮です」です。
魚は鯖で、味噌煮な風味と赤、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1310mgで、EPAが848mgでした。
感想：徹夜明けでも食べれる味噌煮の魚です。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶でした。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>今年食ったサバ缶のまとめ（2025年版：前編）</title><link>https://endorphinbath.com/posts/mackerel-packed-can-2025-1st/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mackerel-packed-can-2025-1st/</guid><description>2025年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶だ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今年食べた、サバ缶の一覧です。&lt;a href=&quot;#今年食べたサバ缶の一覧です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;見ていきましょう。数が多過ぎるので今回は前編とします。前編では80個紹介して、後編では64個紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. キョクヨー_かれいの中骨煮付_鰈（極洋）&lt;a href=&quot;#1-キョクヨー_かれいの中骨煮付_鰈極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/01.CIiuhzj3_Z1NVA2a.webp&quot; srcset=&quot;/_astro/01.CIiuhzj3_1rv3KV.webp 640w, /_astro/01.CIiuhzj3_1xUqob.webp 750w, /_astro/01.CIiuhzj3_ZV3uSG.webp 828w, /_astro/01.CIiuhzj3_8roX8.webp 1080w, /_astro/01.CIiuhzj3_Z2iP57q.webp 1280w, /_astro/01.CIiuhzj3_Z1hHCRe.webp 1668w, /_astro/01.CIiuhzj3_dYynr.webp 2048w, /_astro/01.CIiuhzj3_48MR3.webp 2560w, /_astro/01.CIiuhzj3_Z1NVA2a.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-02に食べた極洋製の「キョクヨー_かれいの中骨煮付_鰈」です。
魚は鰈で、煮付な風味と黄緑の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが291mgで、EPAが499mgでした。
感想：食べれる骨が入っている。タレも美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. SABA_サバ・ガリバタ_ガーリックバター味（清水食品）&lt;a href=&quot;#2-saba_サバガリバタ_ガーリックバター味清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/02.Dp_ZPrrV_Z1FyWz3.webp&quot; srcset=&quot;/_astro/02.Dp_ZPrrV_Z2tmQXG.webp 640w, /_astro/02.Dp_ZPrrV_Z2mWulr.webp 750w, /_astro/02.Dp_ZPrrV_dfHaC.webp 828w, /_astro/02.Dp_ZPrrV_gO2qf.webp 1080w, /_astro/02.Dp_ZPrrV_Z2asrEj.webp 1280w, /_astro/02.Dp_ZPrrV_Z19l0p7.webp 1668w, /_astro/02.Dp_ZPrrV_mmbPy.webp 2048w, /_astro/02.Dp_ZPrrV_cvqka.webp 2560w, /_astro/02.Dp_ZPrrV_Z1FyWz3.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-04に食べた清水食品製の「SABA_サバ・ガリバタ_ガーリックバター味」です。
魚は鯖で、オイルな風味と黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3248mgで、EPAが1484mgでした。
感想：ガリバタというなかなか見かけない風味のサバ缶。これは美味くて香ばしいですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. SABA_サバカリー_インドカリー仕立て（清水食品、新宿中村屋）&lt;a href=&quot;#3-saba_サバカリー_インドカリー仕立て清水食品新宿中村屋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/03.By9aerCP_S1hv.webp&quot; srcset=&quot;/_astro/03.By9aerCP_S1hv.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-06に食べた清水食品、新宿中村屋製の「SABA_サバカリー_インドカリー仕立て」です。
魚は鯖で、辛いな風味と青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3615mgで、EPAが2235mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. キョクヨー_焼いわし_大根おろし入り_梅しそ風味（極洋）&lt;a href=&quot;#4-キョクヨー_焼いわし_大根おろし入り_梅しそ風味極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/04.Cok5MhzY_PK4XN.webp&quot; srcset=&quot;/_astro/04.Cok5MhzY_Z2oobyY.webp 640w, /_astro/04.Cok5MhzY_Z2hXNVJ.webp 750w, /_astro/04.Cok5MhzY_ienzk.webp 828w, /_astro/04.Cok5MhzY_Z2h33OP.webp 1080w, /_astro/04.Cok5MhzY_lQzSx.webp 1280w, /_astro/04.Cok5MhzY_1mY28J.webp 1668w, /_astro/04.Cok5MhzY_Z2buTpw.webp 2048w, /_astro/04.Cok5MhzY_Z2llEUU.webp 2560w, /_astro/04.Cok5MhzY_PK4XN.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-13に食べた極洋製の「キョクヨー_焼いわし_大根おろし入り_梅しそ風味」です。
魚は鰯で、梅な風味と桃色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1136mgで、EPAが2093mgでした。
感想：こういう梅しそ風味には山椒も一緒に入っていて欲しいと思った。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. キョクヨー_さばみそ煮_日本水揚げ原料（極洋）&lt;a href=&quot;#5-キョクヨー_さばみそ煮_日本水揚げ原料極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/05.BgIfUmZD_2iYDEd.webp&quot; srcset=&quot;/_astro/05.BgIfUmZD_2iYDEd.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-17に食べた極洋製の「キョクヨー_さばみそ煮_日本水揚げ原料」です。
魚は鯖で、味噌煮な風味と黄色、白の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが890mgで、EPAが470mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. HOKO_日本のいわし_港町八戸の工場で製造_水煮（宝幸）&lt;a href=&quot;#6-hoko_日本のいわし_港町八戸の工場で製造_水煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/06.BkKRl_wf_Z1PTCIO.webp&quot; srcset=&quot;/_astro/06.BkKRl_wf_Z1PTCIO.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-20に食べた宝幸製の「HOKO_日本のいわし_港町八戸の工場で製造_水煮」です。
魚は鰯で、水煮な風味と青、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1452mgで、EPAが2754mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. キョクヨー_さば味付_日本水揚げ原料使用（極洋）&lt;a href=&quot;#7-キョクヨー_さば味付_日本水揚げ原料使用極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/07.Dcsbn9R4_Z2tTKLw.webp&quot; srcset=&quot;/_astro/07.Dcsbn9R4_78iQg.webp 640w, /_astro/07.Dcsbn9R4_dxFtv.webp 750w, /_astro/07.Dcsbn9R4_Z2gqfNm.webp 828w, /_astro/07.Dcsbn9R4_ZwvKLe.webp 1080w, /_astro/07.Dcsbn9R4_26nRW9.webp 1280w, /_astro/07.Dcsbn9R4_Z1WFNBA.webp 1668w, /_astro/07.Dcsbn9R4_ZqXBlU.webp 2048w, /_astro/07.Dcsbn9R4_ZAOmRj.webp 2560w, /_astro/07.Dcsbn9R4_Z2tTKLw.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-22に食べた極洋製の「キョクヨー_さば味付_日本水揚げ原料使用」です。
魚は鯖で、煮付な風味と赤、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1210mgで、EPAが380mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. キョクヨー_さば水煮_日本水揚げ原料（極洋）&lt;a href=&quot;#8-キョクヨー_さば水煮_日本水揚げ原料極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/08.Dpsy3JIK_Z1WdV4j.webp&quot; srcset=&quot;/_astro/08.Dpsy3JIK_Z1WdV4j.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-24に食べた極洋製の「キョクヨー_さば水煮_日本水揚げ原料」です。
魚は鯖で、水煮な風味と青、白の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1500mgで、EPAが1040mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. キョクヨー_いわし味噌煮_極洋魚缶（極洋）&lt;a href=&quot;#9-キョクヨー_いわし味噌煮_極洋魚缶極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/09.B2hNTj9o_17DVJp.webp&quot; srcset=&quot;/_astro/09.B2hNTj9o_1dhFDl.webp 640w, /_astro/09.B2hNTj9o_1jH3gA.webp 750w, /_astro/09.B2hNTj9o_Z1agS1h.webp 828w, /_astro/09.B2hNTj9o_Z209c4e.webp 1080w, /_astro/09.B2hNTj9o_CKrE9.webp 1280w, /_astro/09.B2hNTj9o_1DRSTl.webp 1668w, /_astro/09.B2hNTj9o_Z1TB2DU.webp 2048w, /_astro/09.B2hNTj9o_Z24rNaj.webp 2560w, /_astro/09.B2hNTj9o_17DVJp.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-26に食べた極洋製の「キョクヨー_いわし味噌煮_極洋魚缶」です。
魚は鰯で、味噌煮な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが952mgで、EPAが721mgでした。
感想：少し料理酒が効いていてまあまあ美味しい普通の味噌煮です。こういう缶の形状って開けづらいんですけどどうにかなりませんか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. キョクヨー_いわし水煮_旨鰯逸品（極洋）&lt;a href=&quot;#10-キョクヨー_いわし水煮_旨鰯逸品極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/10.JRzRFyUb_2rkKVC.webp&quot; srcset=&quot;/_astro/10.JRzRFyUb_6PHeG.webp 640w, /_astro/10.JRzRFyUb_dg4QV.webp 750w, /_astro/10.JRzRFyUb_Z2gHQpV.webp 828w, /_astro/10.JRzRFyUb_ZFsmR1.webp 1080w, /_astro/10.JRzRFyUb_1WrgQm.webp 1280w, /_astro/10.JRzRFyUb_Z26CpHn.webp 1668w, /_astro/10.JRzRFyUb_ZzUdrH.webp 2048w, /_astro/10.JRzRFyUb_ZJKXX6.webp 2560w, /_astro/10.JRzRFyUb_2rkKVC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-28に食べた極洋製の「キョクヨー_いわし水煮_旨鰯逸品」です。
魚は鰯で、水煮な風味と白、水色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1240mgで、EPAが1680mgでした。
感想：だからこの缶の形状は開けづらいのですよ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. いなば_日本産いわし100%_ひと口いわし_みそ煮（いなば食品）&lt;a href=&quot;#11-いなば_日本産いわし100_ひと口いわし_みそ煮いなば食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/11.CqnMvXEF_Bu31W.webp&quot; srcset=&quot;/_astro/11.CqnMvXEF_Bu31W.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-04に食べたいなば食品製の「いなば_日本産いわし100%_ひと口いわし_みそ煮」です。
魚は鰯で、味噌煮な風味と橙色の缶の色が特徴です。美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが520mgで、EPAが480mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. キョクヨー_味付いわし生姜煮_極洋魚缶（極洋）&lt;a href=&quot;#12-キョクヨー_味付いわし生姜煮_極洋魚缶極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/12.DMgAIcSD_21Dwsk.webp&quot; srcset=&quot;/_astro/12.DMgAIcSD_245Q5w.webp 640w, /_astro/12.DMgAIcSD_2avdHL.webp 750w, /_astro/12.DMgAIcSD_ZjsHz6.webp 828w, /_astro/12.DMgAIcSD_Z169Blj.webp 1080w, /_astro/12.DMgAIcSD_1wK2n4.webp 1280w, /_astro/12.DMgAIcSD_Z2wjEbF.webp 1668w, /_astro/12.DMgAIcSD_Z10BrV0.webp 2048w, /_astro/12.DMgAIcSD_Z1asdro.webp 2560w, /_astro/12.DMgAIcSD_21Dwsk.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-06に食べた極洋製の「キョクヨー_味付いわし生姜煮_極洋魚缶」です。
魚は鰯で、煮付な風味と赤、白の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが784mgで、EPAが854mgでした。
感想：これも美味くなかった。つまり、生姜と魚の缶詰の相性が悪いという仮説が立てられそうな気がしてきたな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. キョクヨー_いわしのトマトパッツァ_いわしトマト味付（極洋）&lt;a href=&quot;#13-キョクヨー_いわしのトマトパッツァ_いわしトマト味付極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/13.BhgdWCoz_Z27WP2f.webp&quot; srcset=&quot;/_astro/13.BhgdWCoz_rQhjy.webp 640w, /_astro/13.BhgdWCoz_ygDVN.webp 750w, /_astro/13.BhgdWCoz_Z1UHhl4.webp 828w, /_astro/13.BhgdWCoz_ZayP1W.webp 1080w, /_astro/13.BhgdWCoz_2skNGq.webp 1280w, /_astro/13.BhgdWCoz_Z1AIRRj.webp 1668w, /_astro/13.BhgdWCoz_Z51FBD.webp 2048w, /_astro/13.BhgdWCoz_ZeRr82.webp 2560w, /_astro/13.BhgdWCoz_Z27WP2f.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-10に食べた極洋製の「キョクヨー_いわしのトマトパッツァ_いわしトマト味付」です。
魚は鰯で、トマトな風味と赤、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1313mgで、EPAが2076mgでした。
感想：普通。そこまで酸味が強くないから食べやすいとは思う。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14. Cava？_ブラックペッパー味（岩手県産）&lt;a href=&quot;#14-cava_ブラックペッパー味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/14.CwZZDkbK_ZS8xV2.webp&quot; srcset=&quot;/_astro/14.CwZZDkbK_2imMxx.webp 640w, /_astro/14.CwZZDkbK_2oMaaM.webp 750w, /_astro/14.CwZZDkbK_Z5bL75.webp 828w, /_astro/14.CwZZDkbK_14fr4g.webp 1080w, /_astro/14.CwZZDkbK_Z1n231i.webp 1280w, /_astro/14.CwZZDkbK_ZlTAL6.webp 1668w, /_astro/14.CwZZDkbK_19MAtz.webp 2048w, /_astro/14.CwZZDkbK_YVOXb.webp 2560w, /_astro/14.CwZZDkbK_ZS8xV2.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-12に食べた岩手県産製の「Cava？_ブラックペッパー味」です。
魚は鯖で、辛いな風味と黒の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1870mgで、EPAが670mgでした。
感想：ブラックペッパーのパンチが程よく効いている。途中に米を挟みたくなる。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;15. 木の屋石巻水産_秋冬さば_水煮_宮城県・石巻港女川港水揚げ（木の屋石巻水産）&lt;a href=&quot;#15-木の屋石巻水産_秋冬さば_水煮_宮城県石巻港女川港水揚げ木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/15.CaVkWz6j_1Hi4T6.webp&quot; srcset=&quot;/_astro/15.CaVkWz6j_Z1xEPt3.webp 640w, /_astro/15.CaVkWz6j_Z1rfsPN.webp 750w, /_astro/15.CaVkWz6j_18WIFg.webp 828w, /_astro/15.CaVkWz6j_Z1pv3Tx.webp 1080w, /_astro/15.CaVkWz6j_1dozNP.webp 1280w, /_astro/15.CaVkWz6j_2ew242.webp 1668w, /_astro/15.CaVkWz6j_Z1jWTue.webp 2048w, /_astro/15.CaVkWz6j_Z1tNF0C.webp 2560w, /_astro/15.CaVkWz6j_1Hi4T6.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-14に食べた木の屋石巻水産製の「木の屋石巻水産_秋冬さば_水煮_宮城県・石巻港女川港水揚げ」です。
魚は鯖で、水煮な風味と青、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが840mgで、EPAが270mgでした。
感想：キレイな味がしました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;16. HOKO_日本のいわし味噌煮（宝幸）&lt;a href=&quot;#16-hoko_日本のいわし味噌煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/16.CiGH1c9l_xinQO.webp&quot; srcset=&quot;/_astro/16.CiGH1c9l_1havs4.webp 640w, /_astro/16.CiGH1c9l_Z1m1SBn.webp 750w, /_astro/16.CiGH1c9l_1nS7nk.webp 828w, /_astro/16.CiGH1c9l_Z2w2jmk.webp 1080w, /_astro/16.CiGH1c9l_2oPs7D.webp 1280w, /_astro/16.CiGH1c9l_Z1NNYmk.webp 1668w, /_astro/16.CiGH1c9l_1Ary5g.webp 2048w, /_astro/16.CiGH1c9l_Z1P8eI6.webp 2560w, /_astro/16.CiGH1c9l_xinQO.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-16に食べた宝幸製の「HOKO_日本のいわし味噌煮」です。
魚は鰯で、味噌煮な風味と茶色、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1330mgで、EPAが2800mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;17. キョクヨー_さば照焼（極洋）&lt;a href=&quot;#17-キョクヨー_さば照焼極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/17.D2cb2c2P_1oaDru.webp&quot; srcset=&quot;/_astro/17.D2cb2c2P_1oaDru.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-18に食べた極洋製の「キョクヨー_さば照焼」です。
魚は鯖で、蒲焼な風味と黄緑の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1071mgで、EPAが396mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;18. 黄金の村_国産寒さば_木頭ゆず水煮（黄金の村）&lt;a href=&quot;#18-黄金の村_国産寒さば_木頭ゆず水煮黄金の村&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/18.DFkjhhwX_1CccPq.webp&quot; srcset=&quot;/_astro/18.DFkjhhwX_Tg0gD.webp 640w, /_astro/18.DFkjhhwX_10FmSS.webp 750w, /_astro/18.DFkjhhwX_Z1tiynY.webp 828w, /_astro/18.DFkjhhwX_Z1uAUXd.webp 1080w, /_astro/18.DFkjhhwX_18iHKa.webp 1280w, /_astro/18.DFkjhhwX_29qa0m.webp 1668w, /_astro/18.DFkjhhwX_Z1p3LxT.webp 2048w, /_astro/18.DFkjhhwX_Z1yTx4i.webp 2560w, /_astro/18.DFkjhhwX_1CccPq.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-21に食べた黄金の村製の「黄金の村_国産寒さば_木頭ゆず水煮」です。
魚は鯖で、水煮な風味と黄色、青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：ほのかなゆずのおかげで、普通の水煮とはまた違った味わいとなっている。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;19. Cava？_アクアパッツァ風（岩手県産）&lt;a href=&quot;#19-cava_アクアパッツァ風岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/19.BVA0TvR5_Z1up56s.webp&quot; srcset=&quot;/_astro/19.BVA0TvR5_1i86rt.webp 640w, /_astro/19.BVA0TvR5_1oxt4I.webp 750w, /_astro/19.BVA0TvR5_Z15qsd9.webp 828w, /_astro/19.BVA0TvR5_rXTSP.webp 1080w, /_astro/19.BVA0TvR5_Z1YizbI.webp 1280w, /_astro/19.BVA0TvR5_ZXb7Vw.webp 1668w, /_astro/19.BVA0TvR5_xw4j9.webp 2048w, /_astro/19.BVA0TvR5_nFiMK.webp 2560w, /_astro/19.BVA0TvR5_Z1up56s.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-23に食べた岩手県産製の「Cava？_アクアパッツァ風」です。
魚は鯖で、オイルな風味と水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1840mgで、EPAが1190mgでした。
感想：なるほど、こういう感じか。アクアパッツァの景色が少し浮かび上がってきたなぁ。でも少し酸味が気になった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;20. 黄金の村_国産寒さば_木頭ゆず味噌煮（黄金の村）&lt;a href=&quot;#20-黄金の村_国産寒さば_木頭ゆず味噌煮黄金の村&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/20.D65MF6WF_ZM9RMG.webp&quot; srcset=&quot;/_astro/20.D65MF6WF_2iyy8e.webp 640w, /_astro/20.D65MF6WF_2oXUKt.webp 750w, /_astro/20.D65MF6WF_Z500wo.webp 828w, /_astro/20.D65MF6WF_1ae7cB.webp 1080w, /_astro/20.D65MF6WF_Z1h3mRW.webp 1280w, /_astro/20.D65MF6WF_ZfUUCK.webp 1668w, /_astro/20.D65MF6WF_1fLgBU.webp 2048w, /_astro/20.D65MF6WF_15Uv6w.webp 2560w, /_astro/20.D65MF6WF_ZM9RMG.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-25に食べた黄金の村製の「黄金の村_国産寒さば_木頭ゆず味噌煮」です。
魚は鯖で、味噌煮な風味と黒、黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：ゆずと味噌は合いますねェ！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;21. HOKO_日本のいわし_港町八戸の工場で製造_オリーブオイル（宝幸）&lt;a href=&quot;#21-hoko_日本のいわし_港町八戸の工場で製造_オリーブオイル宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/21.DdC4uPVo_ZmU3VX.webp&quot; srcset=&quot;/_astro/21.DdC4uPVo_Z17JYJz.webp 640w, /_astro/21.DdC4uPVo_Z11kC7k.webp 750w, /_astro/21.DdC4uPVo_1yRzoJ.webp 828w, /_astro/21.DdC4uPVo_1zsV3k.webp 1080w, /_astro/21.DdC4uPVo_ZQNy2e.webp 1280w, /_astro/21.DdC4uPVo_9iScX.webp 1668w, /_astro/21.DdC4uPVo_1F15sD.webp 2048w, /_astro/21.DdC4uPVo_1vajWf.webp 2560w, /_astro/21.DdC4uPVo_ZmU3VX.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-02-27に食べた宝幸製の「HOKO_日本のいわし_港町八戸の工場で製造_オリーブオイル」です。
魚は鰯で、オイルな風味と黄緑の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3126mgで、EPAが4154mgでした。
感想：良かったです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;22. Cava？_国産サバのパプリカチリソース味（岩手県産）&lt;a href=&quot;#22-cava_国産サバのパプリカチリソース味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/22.BJs24zzS_2cNTUh.webp&quot; srcset=&quot;/_astro/22.BJs24zzS_2cNTUh.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-01に食べた岩手県産製の「Cava？_国産サバのパプリカチリソース味」です。
魚は鯖で、辛いな風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが780mgで、EPAが10mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;23. キョクヨー_いわし蒲焼き（極洋）&lt;a href=&quot;#23-キョクヨー_いわし蒲焼き極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/23.CDRqdmPs_Z1RWbD6.webp&quot; srcset=&quot;/_astro/23.CDRqdmPs_Z1RWbD6.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-04に食べた極洋製の「キョクヨー_いわし蒲焼き」です。
魚は鰯で、蒲焼な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;24. Cava？_国産サバのレモンバジル味（岩手県産）&lt;a href=&quot;#24-cava_国産サバのレモンバジル味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/24.C7pN5p8K_13UxTf.webp&quot; srcset=&quot;/_astro/24.C7pN5p8K_13UxTf.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-06に食べた岩手県産製の「Cava？_国産サバのレモンバジル味」です。
魚は鯖で、レモンな風味と緑の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1180mgで、EPAが640mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;25. キョクヨー_さば生姜焼（極洋）&lt;a href=&quot;#25-キョクヨー_さば生姜焼極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/25.vVZRtGyn_Z1LMIPP.webp&quot; srcset=&quot;/_astro/25.vVZRtGyn_swURn.webp 640w, /_astro/25.vVZRtGyn_yWiuC.webp 750w, /_astro/25.vVZRtGyn_Z1U1CMf.webp 828w, /_astro/25.vVZRtGyn_aAg9s.webp 1080w, /_astro/25.vVZRtGyn_Z2gGdV6.webp 1280w, /_astro/25.vVZRtGyn_Z1fyLFT.webp 1668w, /_astro/25.vVZRtGyn_g8pyL.webp 2048w, /_astro/25.vVZRtGyn_6hE3n.webp 2560w, /_astro/25.vVZRtGyn_Z1LMIPP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-09に食べた極洋製の「キョクヨー_さば生姜焼」です。
魚は鯖で、その他な風味と紫の缶の色が特徴です。かなり美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが648mgで、EPAが548mgでした。
感想：モンハンワイルズのリタマラ中に食べた。これ美味いぞこれ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;26. HOTEi_千切り生姜_かつお生姜煮（ホテイフーズコーポレーション）&lt;a href=&quot;#26-hotei_千切り生姜_かつお生姜煮ホテイフーズコーポレーション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/26.BWPGdtwh_1fQoff.webp&quot; srcset=&quot;/_astro/26.BWPGdtwh_Zzvtsx.webp 640w, /_astro/26.BWPGdtwh_Zt66Pi.webp 750w, /_astro/26.BWPGdtwh_2775FL.webp 828w, /_astro/26.BWPGdtwh_Z1QVJyo.webp 1080w, /_astro/26.BWPGdtwh_KWT9Y.webp 1280w, /_astro/26.BWPGdtwh_1M5lpb.webp 1668w, /_astro/26.BWPGdtwh_Z1LoA95.webp 2048w, /_astro/26.BWPGdtwh_Z1VflEt.webp 2560w, /_astro/26.BWPGdtwh_1fQoff.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-11に食べたホテイフーズコーポレーション製の「HOTEi_千切り生姜_かつお生姜煮」です。
魚は鰹で、煮付な風味と赤、黒の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：ひたすらに缶が開けづらい。ウザいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;27. ふくや_明太王鯖_さばの明太子仕立て_オリーブ油漬け（福井缶詰）&lt;a href=&quot;#27-ふくや_明太王鯖_さばの明太子仕立て_オリーブ油漬け福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/27.G5DuBvjl_waeU9.webp&quot; srcset=&quot;/_astro/27.G5DuBvjl_x5jrl.webp 640w, /_astro/27.G5DuBvjl_DuG4A.webp 750w, /_astro/27.G5DuBvjl_Z1Ptfdh.webp 828w, /_astro/27.G5DuBvjl_2tyeUr.webp 1080w, /_astro/27.G5DuBvjl_2gJOS.webp 1280w, /_astro/27.G5DuBvjl_13oc55.webp 1668w, /_astro/27.G5DuBvjl_Z2v5Jtb.webp 2048w, /_astro/27.G5DuBvjl_2pfCOm.webp 2560w, /_astro/27.G5DuBvjl_waeU9.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-15に食べた福井缶詰製の「ふくや_明太王鯖_さばの明太子仕立て_オリーブ油漬け」です。
魚は鯖で、辛いな風味と白、赤、紺の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2100mgで、EPAが1400mgでした。
感想：ピリ辛な明太子が良い感じです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;28. Cava？_国産サバのオリーブオイル漬け（岩手県産）&lt;a href=&quot;#28-cava_国産サバのオリーブオイル漬け岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/28.aPulKzxn_KeADf.webp&quot; srcset=&quot;/_astro/28.aPulKzxn_KeADf.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-19に食べた岩手県産製の「Cava？_国産サバのオリーブオイル漬け」です。
魚は鯖で、オイルな風味と黄の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが940mgで、EPAが520mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;29. Cava？_国産サバのパプリカチリソース味（岩手県産）&lt;a href=&quot;#29-cava_国産サバのパプリカチリソース味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/22.BJs24zzS_2cNTUh.webp&quot; srcset=&quot;/_astro/22.BJs24zzS_2cNTUh.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-22に食べた岩手県産製の「Cava？_国産サバのパプリカチリソース味」です。
魚は鯖で、辛いな風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが780mgで、EPAが10mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;30. 高木商店_みんなの食プロジェクト_IWASHI_いわし_木桶仕込み_醤油＆酢（高木商店）&lt;a href=&quot;#30-高木商店_みんなの食プロジェクト_iwashi_いわし_木桶仕込み_醤油酢高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/30.sAsMmoBB_V8WRi.webp&quot; srcset=&quot;/_astro/30.sAsMmoBB_Z1zbBUE.webp 640w, /_astro/30.sAsMmoBB_Z1sLfip.webp 750w, /_astro/30.sAsMmoBB_17qWdE.webp 828w, /_astro/30.sAsMmoBB_Z2bEaVl.webp 1080w, /_astro/30.sAsMmoBB_rfsM2.webp 1280w, /_astro/30.sAsMmoBB_1smU2e.webp 1668w, /_astro/30.sAsMmoBB_Z2671w2.webp 2048w, /_astro/30.sAsMmoBB_Z2fWM2q.webp 2560w, /_astro/30.sAsMmoBB_V8WRi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-26に食べた高木商店製の「高木商店_みんなの食プロジェクト_IWASHI_いわし_木桶仕込み_醤油＆酢」です。
魚は鰯で、醤油煮な風味と白、茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：シンプルに美味くてすんなり食えてしまった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;31. SIK_油林さば_揚げ鯖の香味ソース仕立_国産さば使用（信田缶詰）&lt;a href=&quot;#31-sik_油林さば_揚げ鯖の香味ソース仕立_国産さば使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/31.DxKrWo0i_w2qsL.webp&quot; srcset=&quot;/_astro/31.DxKrWo0i_ZqWhiC.webp 640w, /_astro/31.DxKrWo0i_ZkwTFn.webp 750w, /_astro/31.DxKrWo0i_2fFhPG.webp 828w, /_astro/31.DxKrWo0i_2tqqt4.webp 1080w, /_astro/31.DxKrWo0i_28Vnv.webp 1280w, /_astro/31.DxKrWo0i_13gnCH.webp 1668w, /_astro/31.DxKrWo0i_Z2vdxUy.webp 2048w, /_astro/31.DxKrWo0i_2p7OmY.webp 2560w, /_astro/31.DxKrWo0i_w2qsL.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-27に食べた信田缶詰製の「SIK_油林さば_揚げ鯖の香味ソース仕立_国産さば使用」です。
魚は鯖で、煮付な風味と黄色の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：サバ缶のくせに味の彩りがスゴい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;32. Cava？_ブラックペッパー味（岩手県産）&lt;a href=&quot;#32-cava_ブラックペッパー味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/14.CwZZDkbK_ZS8xV2.webp&quot; srcset=&quot;/_astro/14.CwZZDkbK_2imMxx.webp 640w, /_astro/14.CwZZDkbK_2oMaaM.webp 750w, /_astro/14.CwZZDkbK_Z5bL75.webp 828w, /_astro/14.CwZZDkbK_14fr4g.webp 1080w, /_astro/14.CwZZDkbK_Z1n231i.webp 1280w, /_astro/14.CwZZDkbK_ZlTAL6.webp 1668w, /_astro/14.CwZZDkbK_19MAtz.webp 2048w, /_astro/14.CwZZDkbK_YVOXb.webp 2560w, /_astro/14.CwZZDkbK_ZS8xV2.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-03-30に食べた岩手県産製の「Cava？_ブラックペッパー味」です。
魚は鯖で、辛いな風味と黒の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1870mgで、EPAが670mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;33. Cava？_国産サバのレモンバジル味（岩手県産）&lt;a href=&quot;#33-cava_国産サバのレモンバジル味岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/24.C7pN5p8K_13UxTf.webp&quot; srcset=&quot;/_astro/24.C7pN5p8K_13UxTf.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-02に食べた岩手県産製の「Cava？_国産サバのレモンバジル味」です。
魚は鯖で、レモンな風味と緑の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1180mgで、EPAが640mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;34. Cava？_国産サバのオリーブオイル漬け（岩手県産）&lt;a href=&quot;#34-cava_国産サバのオリーブオイル漬け岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/28.aPulKzxn_KeADf.webp&quot; srcset=&quot;/_astro/28.aPulKzxn_KeADf.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-05に食べた岩手県産製の「Cava？_国産サバのオリーブオイル漬け」です。
魚は鯖で、オイルな風味と黄の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが940mgで、EPAが520mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;35. 高木商店_スペーススパイスxみんなの食プロジェクト_CURRY_IWASHI_いわしカレー_木桶仕込み_八丁味噌＆八丁味噌＆醤油（高木商店）&lt;a href=&quot;#35-高木商店_スペーススパイスxみんなの食プロジェクト_curry_iwashi_いわしカレー_木桶仕込み_八丁味噌八丁味噌醤油高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/35.CBkPOJND_Ze3oW5.webp&quot; srcset=&quot;/_astro/35.CBkPOJND_Z1Vuvm9.webp 640w, /_astro/35.CBkPOJND_Z1P58IT.webp 750w, /_astro/35.CBkPOJND_K83Ma.webp 828w, /_astro/35.CBkPOJND_1IkA3d.webp 1080w, /_astro/35.CBkPOJND_ZHVT2l.webp 1280w, /_astro/35.CBkPOJND_iaxcQ.webp 1668w, /_astro/35.CBkPOJND_1NRJsw.webp 2048w, /_astro/35.CBkPOJND_1E1XW8.webp 2560w, /_astro/35.CBkPOJND_Ze3oW5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-08に食べた高木商店製の「高木商店_スペーススパイスxみんなの食プロジェクト_CURRY_IWASHI_いわしカレー_木桶仕込み_八丁味噌＆八丁味噌＆醤油」です。
魚は鰯で、辛いな風味と黄色、茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：サバが意外と小ぶり。少し曲のある風味だった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;36. STI_燻肴_ひとくちスモークサーモン_桜チップ使用（STIフードホールディングス）&lt;a href=&quot;#36-sti_燻肴_ひとくちスモークサーモン_桜チップ使用stiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/36.L6nmTj8e_rG6Sp.webp&quot; srcset=&quot;/_astro/36.L6nmTj8e_mV760.webp 640w, /_astro/36.L6nmTj8e_tltIf.webp 750w, /_astro/36.L6nmTj8e_Z20CryC.webp 828w, /_astro/36.L6nmTj8e_2p56SH.webp 1080w, /_astro/36.L6nmTj8e_Z2cnbQ.webp 1280w, /_astro/36.L6nmTj8e_XU43l.webp 1668w, /_astro/36.L6nmTj8e_2uCgj1.webp 2048w, /_astro/36.L6nmTj8e_2kLuMC.webp 2560w, /_astro/36.L6nmTj8e_rG6Sp.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-12に食べたSTIフードホールディングス製の「STI_燻肴_ひとくちスモークサーモン_桜チップ使用」です。
魚は鮭で、オイルな風味と臙脂、橙の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：キャンプに行った時に忍ばせたい味がする缶詰だ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;37. STI_燻肴_ひとくちスモーク金華さば_ホワイトオークチップ使用（STIフードホールディングス）&lt;a href=&quot;#37-sti_燻肴_ひとくちスモーク金華さば_ホワイトオークチップ使用stiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/37.BrTXroJ4_1c81fX.webp&quot; srcset=&quot;/_astro/37.BrTXroJ4_ZzCNS6.webp 640w, /_astro/37.BrTXroJ4_ZtdrfQ.webp 750w, /_astro/37.BrTXroJ4_26YKgd.webp 828w, /_astro/37.BrTXroJ4_Z1UF7xF.webp 1080w, /_astro/37.BrTXroJ4_HewaH.webp 1280w, /_astro/37.BrTXroJ4_1IlXpT.webp 1668w, /_astro/37.BrTXroJ4_Z1P7X8m.webp 2048w, /_astro/37.BrTXroJ4_Z1YXIDK.webp 2560w, /_astro/37.BrTXroJ4_1c81fX.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-14に食べたSTIフードホールディングス製の「STI_燻肴_ひとくちスモーク金華さば_ホワイトオークチップ使用」です。
魚は鯖で、オイルな風味と紺、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：これはキャンプにわざわざ持っていかなくてもいいかもしれない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;38. シーマルシェ_KYOKUYO_SMOKE-OIL_SARDINES_いわしオイル漬_燻製風味（極洋）&lt;a href=&quot;#38-シーマルシェ_kyokuyo_smoke-oil_sardines_いわしオイル漬_燻製風味極洋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/38.BAKZBWQ6_1Irlsr.webp&quot; srcset=&quot;/_astro/38.BAKZBWQ6_Z4z37x.webp 640w, /_astro/38.BAKZBWQ6_1PjuH.webp 750w, /_astro/38.BAKZBWQ6_Z2s8BMa.webp 828w, /_astro/38.BAKZBWQ6_Z1olMlc.webp 1080w, /_astro/38.BAKZBWQ6_1exQnb.webp 1280w, /_astro/38.BAKZBWQ6_2fFiCn.webp 1668w, /_astro/38.BAKZBWQ6_Z1iNCUS.webp 2048w, /_astro/38.BAKZBWQ6_Z1sEorh.webp 2560w, /_astro/38.BAKZBWQ6_1Irlsr.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-17に食べた極洋製の「シーマルシェ_KYOKUYO_SMOKE-OIL_SARDINES_いわしオイル漬_燻製風味」です。
魚は鰯で、オイルな風味と茶色、焦げ茶の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：味がしっかりと付いています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;39. SSK_国内水揚げ_さば味噌煮_素材をそのまま_ヤマカノ醸造仙台みそ使用（清水食品）&lt;a href=&quot;#39-ssk_国内水揚げ_さば味噌煮_素材をそのまま_ヤマカノ醸造仙台みそ使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/39.Dvqpr27H_Z2uvprw.webp&quot; srcset=&quot;/_astro/39.Dvqpr27H_169t7t.webp 640w, /_astro/39.Dvqpr27H_1cyPJI.webp 750w, /_astro/39.Dvqpr27H_Z1hp5x9.webp 828w, /_astro/39.Dvqpr27H_Zx7pre.webp 1080w, /_astro/39.Dvqpr27H_25Meh9.webp 1280w, /_astro/39.Dvqpr27H_Z1XhshA.webp 1668w, /_astro/39.Dvqpr27H_Zrzg1U.webp 2048w, /_astro/39.Dvqpr27H_ZBq1xj.webp 2560w, /_astro/39.Dvqpr27H_Z2uvprw.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-20に食べた清水食品製の「SSK_国内水揚げ_さば味噌煮_素材をそのまま_ヤマカノ醸造仙台みそ使用」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが730mgで、EPAが520mgでした。
感想：なんかいつもの味噌煮より順当に美味く感じるな。いつもより腹が減ってるだからだろうか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;40. SSK_国内水揚げ_さば水煮_素材をそのまま_瀬戸内の花藻塩使用（清水食品）&lt;a href=&quot;#40-ssk_国内水揚げ_さば水煮_素材をそのまま_瀬戸内の花藻塩使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/40.DPMRkFJj_Z1xoGNO.webp&quot; srcset=&quot;/_astro/40.DPMRkFJj_274aA6.webp 640w, /_astro/40.DPMRkFJj_2dtxdl.webp 750w, /_astro/40.DPMRkFJj_Zguo4w.webp 828w, /_astro/40.DPMRkFJj_oYibt.webp 1080w, /_astro/40.DPMRkFJj_Z22ibT5.webp 1280w, /_astro/40.DPMRkFJj_Z11aJDS.webp 1668w, /_astro/40.DPMRkFJj_uwrAM.webp 2048w, /_astro/40.DPMRkFJj_kFG5o.webp 2560w, /_astro/40.DPMRkFJj_Z1xoGNO.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-22に食べた清水食品製の「SSK_国内水揚げ_さば水煮_素材をそのまま_瀬戸内の花藻塩使用」です。
魚は鯖で、水煮な風味と白、水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが760mgで、EPAが540mgでした。
感想：食べやすいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;41. 高木商店_みんなの食プロジェクト_IWASHI_いわし_木桶仕込み_八丁味噌＆八丁味噌（高木商店）&lt;a href=&quot;#41-高木商店_みんなの食プロジェクト_iwashi_いわし_木桶仕込み_八丁味噌八丁味噌高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/41.BtwUN22P_Z1cke1i.webp&quot; srcset=&quot;/_astro/41.BtwUN22P_ZklenS.webp 640w, /_astro/41.BtwUN22P_ZdUQKD.webp 750w, /_astro/41.BtwUN22P_2mhkKq.webp 828w, /_astro/41.BtwUN22P_K3KY0.webp 1080w, /_astro/41.BtwUN22P_Z1GdI6y.webp 1280w, /_astro/41.BtwUN22P_ZF6gQm.webp 1668w, /_astro/41.BtwUN22P_PAUoj.webp 2048w, /_astro/41.BtwUN22P_FK9RU.webp 2560w, /_astro/41.BtwUN22P_Z1cke1i.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-24に食べた高木商店製の「高木商店_みんなの食プロジェクト_IWASHI_いわし_木桶仕込み_八丁味噌＆八丁味噌」です。
魚は鰯で、味噌煮な風味と黒、茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：味噌としてのコクが強く脂も強い。味噌汁にしたらとてもコクの強いものになりそうだ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;42. SSK_国内水揚げ_うまい！いわし醤油煮_ヤマカノ醸造オリジナル醤油使用（清水食品）&lt;a href=&quot;#42-ssk_国内水揚げ_うまいいわし醤油煮_ヤマカノ醸造オリジナル醤油使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/42.DfonTKs5_Z2jTmjC.webp&quot; srcset=&quot;/_astro/42.DfonTKs5_7rYX4.webp 640w, /_astro/42.DfonTKs5_dRmAj.webp 750w, /_astro/42.DfonTKs5_Z2g6yGy.webp 828w, /_astro/42.DfonTKs5_Zmvmjk.webp 1080w, /_astro/42.DfonTKs5_2gohp3.webp 1280w, /_astro/42.DfonTKs5_Z1MFp9G.webp 1668w, /_astro/42.DfonTKs5_ZgXcT1.webp 2048w, /_astro/42.DfonTKs5_ZqNXpp.webp 2560w, /_astro/42.DfonTKs5_Z2jTmjC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-26に食べた清水食品製の「SSK_国内水揚げ_うまい！いわし醤油煮_ヤマカノ醸造オリジナル醤油使用」です。
魚は鰯で、醤油煮な風味と白、青の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが680mgで、EPAが610mgでした。
感想：控えめな醤油がしっかり効いていて美味い。他には類を見ないような美味さだ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;43. SUNYO_国産オイルサーディン_いわし油漬_缶切不要（サンヨー堂）&lt;a href=&quot;#43-sunyo_国産オイルサーディン_いわし油漬_缶切不要サンヨー堂&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/43.Dt9pf36I_1uMLG5.webp&quot; srcset=&quot;/_astro/43.Dt9pf36I_Z235BaG.webp 640w, /_astro/43.Dt9pf36I_Z1VFexr.webp 750w, /_astro/43.Dt9pf36I_DwWXC.webp 828w, /_astro/43.Dt9pf36I_Z1C0m7y.webp 1080w, /_astro/43.Dt9pf36I_10ThAO.webp 1280w, /_astro/43.Dt9pf36I_221IQ1.webp 1668w, /_astro/43.Dt9pf36I_Z1wscHf.webp 2048w, /_astro/43.Dt9pf36I_Z1GiXdD.webp 2560w, /_astro/43.Dt9pf36I_1uMLG5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-04-28に食べたサンヨー堂製の「SUNYO_国産オイルサーディン_いわし油漬_缶切不要」です。
魚は鰯で、オイルな風味と緑の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが520mgで、EPAが1160mgでした。
感想：こんなに第一印象が不味そうなパッケージは見たことがない。そんな心境の中で食べてみたら、想像していたよりは不味くなかった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;44. SSK_国内水揚げ_うまい！いわし味噌煮_ヤマカノ醸造仙台みそ使用（清水食品）&lt;a href=&quot;#44-ssk_国内水揚げ_うまいいわし味噌煮_ヤマカノ醸造仙台みそ使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/44.DT7-q8da_Z14GdOj.webp&quot; srcset=&quot;/_astro/44.DT7-q8da_Z2iaTbl.webp 640w, /_astro/44.DT7-q8da_Z2bKwy6.webp 750w, /_astro/44.DT7-q8da_orEWX.webp 828w, /_astro/44.DT7-q8da_RGLaY.webp 1080w, /_astro/44.DT7-q8da_Z1yzHTz.webp 1280w, /_astro/44.DT7-q8da_ZxsgEn.webp 1668w, /_astro/44.DT7-q8da_XeUAi.webp 2048w, /_astro/44.DT7-q8da_Noa4T.webp 2560w, /_astro/44.DT7-q8da_Z14GdOj.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-01に食べた清水食品製の「SSK_国内水揚げ_うまい！いわし味噌煮_ヤマカノ醸造仙台みそ使用」です。
魚は鰯で、味噌煮な風味と白、茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが680mgで、EPAが610mgでした。
感想：醤油煮と比べたら、普通に美味いっていうレベルだった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;45. Cava？_アクアパッツァ風（岩手県産）&lt;a href=&quot;#45-cava_アクアパッツァ風岩手県産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/19.BVA0TvR5_Z1up56s.webp&quot; srcset=&quot;/_astro/19.BVA0TvR5_1i86rt.webp 640w, /_astro/19.BVA0TvR5_1oxt4I.webp 750w, /_astro/19.BVA0TvR5_Z15qsd9.webp 828w, /_astro/19.BVA0TvR5_rXTSP.webp 1080w, /_astro/19.BVA0TvR5_Z1YizbI.webp 1280w, /_astro/19.BVA0TvR5_ZXb7Vw.webp 1668w, /_astro/19.BVA0TvR5_xw4j9.webp 2048w, /_astro/19.BVA0TvR5_nFiMK.webp 2560w, /_astro/19.BVA0TvR5_Z1up56s.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-04に食べた岩手県産製の「Cava？_アクアパッツァ風」です。
魚は鯖で、オイルな風味と水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1840mgで、EPAが1190mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;46. 三星_八戸つや鯖缶_水煮_八戸港水揚げ_国産さば使用（三星）&lt;a href=&quot;#46-三星_八戸つや鯖缶_水煮_八戸港水揚げ_国産さば使用三星&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/46.CtF1nejP_2kNpPJ.webp&quot; srcset=&quot;/_astro/46.CtF1nejP_1THagt.webp 640w, /_astro/46.CtF1nejP_217wSI.webp 750w, /_astro/46.CtF1nejP_ZsQoo9.webp 828w, /_astro/46.CtF1nejP_ZLYHWT.webp 1080w, /_astro/46.CtF1nejP_1PTUKt.webp 1280w, /_astro/46.CtF1nejP_Z2d9KNg.webp 1668w, /_astro/46.CtF1nejP_ZGryxA.webp 2048w, /_astro/46.CtF1nejP_ZQik3Y.webp 2560w, /_astro/46.CtF1nejP_2kNpPJ.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-06に食べた三星製の「三星_八戸つや鯖缶_水煮_八戸港水揚げ_国産さば使用」です。
魚は鯖で、水煮な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：GolangでMermaid、PlnatUML、Dot形式で依存関係の図を出力するツールを実装したぞ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;47. 三星_八戸つや鯖缶_味噌煮_八戸港水揚げ_国産さば使用（三星）&lt;a href=&quot;#47-三星_八戸つや鯖缶_味噌煮_八戸港水揚げ_国産さば使用三星&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/47.DhWZ4Qk__jpJsl.webp&quot; srcset=&quot;/_astro/47.DhWZ4Qk__2E3P8.webp 640w, /_astro/47.DhWZ4Qk__94qsn.webp 750w, /_astro/47.DhWZ4Qk__Z2kTuOu.webp 828w, /_astro/47.DhWZ4Qk__2gNJsD.webp 1080w, /_astro/47.DhWZ4Qk__ZasJBU.webp 1280w, /_astro/47.DhWZ4Qk__PDGCh.webp 1668w, /_astro/47.DhWZ4Qk__2mlSRW.webp 2048w, /_astro/47.DhWZ4Qk__2cv8my.webp 2560w, /_astro/47.DhWZ4Qk__jpJsl.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-08に食べた三星製の「三星_八戸つや鯖缶_味噌煮_八戸港水揚げ_国産さば使用」です。
魚は鯖で、味噌煮な風味と白、橙の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：久しぶりの原神は楽しいな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;48. K&amp;amp;K_缶つま_日本近海獲り和風サーディン_いわし味付（国分グループ）&lt;a href=&quot;#48-kk_缶つま_日本近海獲り和風サーディン_いわし味付国分グループ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/48.CkWseSUI_2sfYfP.webp&quot; srcset=&quot;/_astro/48.CkWseSUI_Z1GbM0r.webp 640w, /_astro/48.CkWseSUI_Z1zLpnc.webp 750w, /_astro/48.CkWseSUI_10qM8R.webp 828w, /_astro/48.CkWseSUI_ZEx9xN.webp 1080w, /_astro/48.CkWseSUI_1Xmuaz.webp 1280w, /_astro/48.CkWseSUI_Z25Hcoa.webp 1668w, /_astro/48.CkWseSUI_Zz008u.webp 2048w, /_astro/48.CkWseSUI_ZIPKDS.webp 2560w, /_astro/48.CkWseSUI_2sfYfP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-10に食べた国分グループ製の「K&amp;amp;K_缶つま_日本近海獲り和風サーディン_いわし味付」です。
魚は鰯で、煮付な風味と白、茶色、黒の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが495mgで、EPAが1350mgでした。
感想：ノエルのデートイベントをコンプしたぞお。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;49. SSK_北欧さば_水煮_フランス産ロレーヌ岩塩使用（清水食品）&lt;a href=&quot;#49-ssk_北欧さば_水煮_フランス産ロレーヌ岩塩使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/49.D74MlwRb_vCaEQ.webp&quot; srcset=&quot;/_astro/49.D74MlwRb_217Lrz.webp 640w, /_astro/49.D74MlwRb_27x94O.webp 750w, /_astro/49.D74MlwRb_ZmqMd3.webp 828w, /_astro/49.D74MlwRb_2t1aF9.webp 1080w, /_astro/49.D74MlwRb_1IFzA.webp 1280w, /_astro/49.D74MlwRb_12Q7OM.webp 1668w, /_astro/49.D74MlwRb_Z2vCNIt.webp 2048w, /_astro/49.D74MlwRb_2oHyz4.webp 2560w, /_astro/49.D74MlwRb_vCaEQ.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-12に食べた清水食品製の「SSK_北欧さば_水煮_フランス産ロレーヌ岩塩使用」です。
魚は鯖で、水煮な風味と紺、銀色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1250mgで、EPAが630mgでした。
感想：マロウ材が沢山手に入ったぞお。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;50. K&amp;amp;K_缶つま_日本近海獲りハバネロサーディン_いわし味付（国分グループ）&lt;a href=&quot;#50-kk_缶つま_日本近海獲りハバネロサーディン_いわし味付国分グループ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/50.DHF7fJro_Zx5vcD.webp&quot; srcset=&quot;/_astro/50.DHF7fJro_2j3ddk.webp 640w, /_astro/50.DHF7fJro_2pszPz.webp 750w, /_astro/50.DHF7fJro_Z4vlri.webp 828w, /_astro/50.DHF7fJro_1pitME.webp 1080w, /_astro/50.DHF7fJro_Z11Y0hT.webp 1280w, /_astro/50.DHF7fJro_ZQy2H.webp 1668w, /_astro/50.DHF7fJro_1uPDcX.webp 2048w, /_astro/50.DHF7fJro_1kYRGz.webp 2560w, /_astro/50.DHF7fJro_Zx5vcD.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-14に食べた国分グループ製の「K&amp;amp;K_缶つま_日本近海獲りハバネロサーディン_いわし味付」です。
魚は鰯で、辛いな風味と白、赤色、黒の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが555mgで、EPAが1508mgでした。
感想：シュヴァルマラン映影ランドも大詰めだ。あ、缶詰の味としては思ってたよりは辛くなかった。ハバネロの風味もそこまで強くはなかった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;51. SSK_北欧さば_味噌煮_ヤマカノ醸造仙台味噌使用（清水食品）&lt;a href=&quot;#51-ssk_北欧さば_味噌煮_ヤマカノ醸造仙台味噌使用清水食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/51.C3qy-Ps8_GCL1V.webp&quot; srcset=&quot;/_astro/51.C3qy-Ps8_Z1JEyEf.webp 640w, /_astro/51.C3qy-Ps8_Z1Dfc20.webp 750w, /_astro/51.C3qy-Ps8_VX0u4.webp 828w, /_astro/51.C3qy-Ps8_Z2qamLH.webp 1080w, /_astro/51.C3qy-Ps8_cJgVF.webp 1280w, /_astro/51.C3qy-Ps8_1dQIbR.webp 1668w, /_astro/51.C3qy-Ps8_Z2kCdmo.webp 2048w, /_astro/51.C3qy-Ps8_Z2usXRM.webp 2560w, /_astro/51.C3qy-Ps8_GCL1V.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-17に食べた清水食品製の「SSK_北欧さば_味噌煮_ヤマカノ醸造仙台味噌使用」です。
魚は鯖で、味噌煮な風味と白、金色の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1380mgで、EPAが810mgでした。
感想：宵宮の伝説任務が終わったぞお。このサバ缶は米と一緒に食う事を推奨。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;52. ファミマル_国産いわしの煮付（津田商店）&lt;a href=&quot;#52-ファミマル_国産いわしの煮付津田商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/52.Bqj-6kIv_1Y8K4l.webp&quot; srcset=&quot;/_astro/52.Bqj-6kIv_ZI5IMd.webp 640w, /_astro/52.Bqj-6kIv_ZBFm9X.webp 750w, /_astro/52.Bqj-6kIv_1XwPm6.webp 828w, /_astro/52.Bqj-6kIv_Z18EnJi.webp 1080w, /_astro/52.Bqj-6kIv_1uffY5.webp 1280w, /_astro/52.Bqj-6kIv_2vmHeh.webp 1668w, /_astro/52.Bqj-6kIv_Z137ejY.webp 2048w, /_astro/52.Bqj-6kIv_Z1cWYPn.webp 2560w, /_astro/52.Bqj-6kIv_1Y8K4l.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-20に食べた津田商店製の「ファミマル_国産いわしの煮付」です。
魚は鰯で、煮付な風味と黄色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1049mgで、EPAが2410mgでした。
感想：みりん多くね？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;53. ファミマル_国産さばの味噌煮（高木商店）&lt;a href=&quot;#53-ファミマル_国産さばの味噌煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/53.CkeTwh6T_1u0XnM.webp&quot; srcset=&quot;/_astro/53.CkeTwh6T_yY76C.webp 640w, /_astro/53.CkeTwh6T_FotIR.webp 750w, /_astro/53.CkeTwh6T_Z1Nzry0.webp 828w, /_astro/53.CkeTwh6T_Z1CMapQ.webp 1080w, /_astro/53.CkeTwh6T_107tiw.webp 1280w, /_astro/53.CkeTwh6T_21eUxI.webp 1668w, /_astro/53.CkeTwh6T_Z1xf10x.webp 2048w, /_astro/53.CkeTwh6T_Z1H5LvV.webp 2560w, /_astro/53.CkeTwh6T_1u0XnM.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-22に食べた高木商店製の「ファミマル_国産さばの味噌煮」です。
魚は鯖で、味噌煮な風味と茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3534mgで、EPAが2299mgでした。
感想：なんてことはないただの鯖の味噌煮。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;54. ファミマル_国産さばの水煮（高木商店）&lt;a href=&quot;#54-ファミマル_国産さばの水煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/54._W8aqOFu_1ErD5A.webp&quot; srcset=&quot;/_astro/54._W8aqOFu_zjDTe.webp 640w, /_astro/54._W8aqOFu_FJ1wt.webp 750w, /_astro/54._W8aqOFu_Z1NeTKo.webp 828w, /_astro/54._W8aqOFu_Z1sluI3.webp 1080w, /_astro/54._W8aqOFu_1ay90k.webp 1280w, /_astro/54._W8aqOFu_2bFAfw.webp 1668w, /_astro/54._W8aqOFu_Z1mNliJ.webp 2048w, /_astro/54._W8aqOFu_Z1wE6O8.webp 2560w, /_astro/54._W8aqOFu_1ErD5A.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-24に食べた高木商店製の「ファミマル_国産さばの水煮」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが4199mgで、EPAが1729mgでした。
感想：ありふれたサバ缶。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;55. レモ缶ひろしま小鰯_広島小いわしのアヒージョ_藻塩レモン風味（丸兼食品）&lt;a href=&quot;#55-レモ缶ひろしま小鰯_広島小いわしのアヒージョ_藻塩レモン風味丸兼食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/55.C6im_yRl_254Wxy.webp&quot; srcset=&quot;/_astro/55.C6im_yRl_1zbqun.webp 640w, /_astro/55.C6im_yRl_1FAN7C.webp 750w, /_astro/55.C6im_yRl_ZNn8af.webp 828w, /_astro/55.C6im_yRl_Z12Ibg5.webp 1080w, /_astro/55.C6im_yRl_1Abssi.webp 1280w, /_astro/55.C6im_yRl_Z2sSe6r.webp 1668w, /_astro/55.C6im_yRl_ZWb1PL.webp 2048w, /_astro/55.C6im_yRl_Z171Mma.webp 2560w, /_astro/55.C6im_yRl_254Wxy.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-26に食べた丸兼食品製の「レモ缶ひろしま小鰯_広島小いわしのアヒージョ_藻塩レモン風味」です。
魚は鰯で、オイルな風味と水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが325mgで、EPAが270mgでした。
感想：酒のつまみに良さそう。白ワインとかに合わせたらいいんじゃないですかね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;56. ファミマル_国産いわしの味噌煮（津田商店）&lt;a href=&quot;#56-ファミマル_国産いわしの味噌煮津田商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/56.B7mNAa4A_Zk2yvG.webp&quot; srcset=&quot;/_astro/56.B7mNAa4A_Z2qHszX.webp 640w, /_astro/56.B7mNAa4A_Z2ki5WI.webp 750w, /_astro/56.B7mNAa4A_fU6yl.webp 828w, /_astro/56.B7mNAa4A_1ClqtB.webp 1080w, /_astro/56.B7mNAa4A_ZNV3AW.webp 1280w, /_astro/56.B7mNAa4A_cbnDf.webp 1668w, /_astro/56.B7mNAa4A_1HSzSU.webp 2048w, /_astro/56.B7mNAa4A_1y2Onw.webp 2560w, /_astro/56.B7mNAa4A_Zk2yvG.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-28に食べた津田商店製の「ファミマル_国産いわしの味噌煮」です。
魚は鰯で、味噌煮な風味と茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが952mgで、EPAが2346mgでした。
感想：なんてことはないただの鰯の味噌煮。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;57. ファミマル_国産さばの煮付（高木商店）&lt;a href=&quot;#57-ファミマル_国産さばの煮付高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/57.D25XjvDH_ZsT3xV.webp&quot; srcset=&quot;/_astro/57.D25XjvDH_1k96uw.webp 640w, /_astro/57.D25XjvDH_1qyt7L.webp 750w, /_astro/57.D25XjvDH_Z13psa6.webp 828w, /_astro/57.D25XjvDH_1ttVrm.webp 1080w, /_astro/57.D25XjvDH_ZWMxDc.webp 1280w, /_astro/57.D25XjvDH_3jSB0.webp 1668w, /_astro/57.D25XjvDH_1z25QF.webp 2048w, /_astro/57.D25XjvDH_1pbklh.webp 2560w, /_astro/57.D25XjvDH_ZsT3xV.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-05-31に食べた高木商店製の「ファミマル_国産さばの煮付」です。
魚は鯖で、煮付な風味と黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2375mgで、EPAが1577mgでした。
感想：なるほどなるほど、こんな感じですか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;58. AIKOCHAN_伊藤食品_美味しい鯖_水煮_2025_沖縄の塩シママース使用（伊藤食品）&lt;a href=&quot;#58-aikochan_伊藤食品_美味しい鯖_水煮_2025_沖縄の塩シママース使用伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/58.C2qKEBJT_ZDsYVu.webp&quot; srcset=&quot;/_astro/58.C2qKEBJT_Z1WjwvX.webp 640w, /_astro/58.C2qKEBJT_Z1PT9SI.webp 750w, /_astro/58.C2qKEBJT_Jj2Cl.webp 828w, /_astro/58.C2qKEBJT_1iU03N.webp 1080w, /_astro/58.C2qKEBJT_Z18mu1K.webp 1280w, /_astro/58.C2qKEBJT_Z7f2Ly.webp 1668w, /_astro/58.C2qKEBJT_1os9t7.webp 2048w, /_astro/58.C2qKEBJT_1eBnWI.webp 2560w, /_astro/58.C2qKEBJT_ZDsYVu.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-06-02に食べた伊藤食品製の「AIKOCHAN_伊藤食品_美味しい鯖_水煮_2025_沖縄の塩シママース使用」です。
魚は鯖で、水煮な風味と銀色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1500mgで、EPAが1160mgでした。
感想：コイツの脂がスゴイ。水煮のくせに缶の蓋にスゴイ脂が付着している。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;59. AIKOCHAN_伊藤食品_美味しい鯖_味噌煮_PREMIUM_2025_八戸工場製造_津軽味噌使用（伊藤食品）&lt;a href=&quot;#59-aikochan_伊藤食品_美味しい鯖_味噌煮_premium_2025_八戸工場製造_津軽味噌使用伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/59.dA83AUjY_ubmYh.webp&quot; srcset=&quot;/_astro/59.dA83AUjY_Z162um5.webp 640w, /_astro/59.dA83AUjY_ZYC7IP.webp 750w, /_astro/59.dA83AUjY_1AA4Me.webp 828w, /_astro/59.dA83AUjY_2rzmYz.webp 1080w, /_astro/59.dA83AUjY_hRT1.webp 1280w, /_astro/59.dA83AUjY_11pk9d.webp 1668w, /_astro/59.dA83AUjY_Z2x4Bp3.webp 2048w, /_astro/59.dA83AUjY_2ngKSu.webp 2560w, /_astro/59.dA83AUjY_ubmYh.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-06-07に食べた伊藤食品製の「AIKOCHAN_伊藤食品_美味しい鯖_味噌煮_PREMIUM_2025_八戸工場製造_津軽味噌使用」です。
魚は鯖で、味噌煮な風味と金色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2000mgで、EPAが1160mgでした。
感想：一般的なサバ缶です&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;60. ファミマル_国産いわしの水煮（津田商店）&lt;a href=&quot;#60-ファミマル_国産いわしの水煮津田商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/60.BVULNJ4r_Z3vxMJ.webp&quot; srcset=&quot;/_astro/60.BVULNJ4r_Z177NT7.webp 640w, /_astro/60.BVULNJ4r_Z10HrgR.webp 750w, /_astro/60.BVULNJ4r_1zuKfc.webp 828w, /_astro/60.BVULNJ4r_1SRrcy.webp 1080w, /_astro/60.BVULNJ4r_Zxp2S0.webp 1280w, /_astro/60.BVULNJ4r_sHomc.webp 1668w, /_astro/60.BVULNJ4r_1YpABR.webp 2048w, /_astro/60.BVULNJ4r_1OyP6t.webp 2560w, /_astro/60.BVULNJ4r_Z3vxMJ.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-06-14に食べた津田商店製の「ファミマル_国産いわしの水煮」です。
魚は鰯で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1166mgで、EPAが2572mgでした。
感想：食べた直後に歯を磨くと鰯臭いな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;61. さば味噌煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用（信田缶詰）&lt;a href=&quot;#61-さば味噌煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/61.D3xz2cQ5_2tduys.webp&quot; srcset=&quot;/_astro/61.D3xz2cQ5_2oYSyw.webp 640w, /_astro/61.D3xz2cQ5_2vpgbL.webp 750w, /_astro/61.D3xz2cQ5_1qjST.webp 828w, /_astro/61.D3xz2cQ5_ZDzDfb.webp 1080w, /_astro/61.D3xz2cQ5_1Yk0tc.webp 1280w, /_astro/61.D3xz2cQ5_Z24JG5x.webp 1668w, /_astro/61.D3xz2cQ5_Zy2tOR.webp 2048w, /_astro/61.D3xz2cQ5_ZHSflg.webp 2560w, /_astro/61.D3xz2cQ5_2tduys.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-06-23に食べた信田缶詰製の「さば味噌煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用」です。
魚は鯖で、味噌煮な風味と茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：なんか今日ふとした時から頭が痛い・・・。暑さの所為か、もしくは最近サバ缶を食べていなかった所為か・・・？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;62. はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（葉っぱが添えられている）（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#62-はごろもking-oscar_オイルサーディン_丁寧に手詰め仕上げ葉っぱが添えられているはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/62.CmCjWHVW_ZQaiJT.webp&quot; srcset=&quot;/_astro/62.CmCjWHVW_1Dp6zk.webp 640w, /_astro/62.CmCjWHVW_1JOtcz.webp 750w, /_astro/62.CmCjWHVW_ZJ9s5i.webp 828w, /_astro/62.CmCjWHVW_16dGfo.webp 1080w, /_astro/62.CmCjWHVW_Z1l3MPa.webp 1280w, /_astro/62.CmCjWHVW_ZjVlzX.webp 1668w, /_astro/62.CmCjWHVW_1bKPEH.webp 2048w, /_astro/62.CmCjWHVW_11U59j.webp 2560w, /_astro/62.CmCjWHVW_ZQaiJT.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-06-27に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_オイルサーディン_丁寧に手詰め仕上げ（葉っぱが添えられている）」です。
魚は鰯で、オイルな風味と赤の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：こういうオイル系はあまり好みではないのだが、この鰯は各々の個体として身がしっかり詰まっていて、とても良い部類だなと感じた。鍋の中の鱈みたいな食感でした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;63. はごろもフーズ_さんまで健康_蒲焼（はごろもフーズ）&lt;a href=&quot;#63-はごろもフーズ_さんまで健康_蒲焼はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/63.NYoufhMb_1HGUAC.webp&quot; srcset=&quot;/_astro/63.NYoufhMb_1ysosv.webp 640w, /_astro/63.NYoufhMb_1ERL5K.webp 750w, /_astro/63.NYoufhMb_ZO6ac7.webp 828w, /_astro/63.NYoufhMb_Z1p6dd1.webp 1080w, /_astro/63.NYoufhMb_1dNqvm.webp 1280w, /_astro/63.NYoufhMb_2eURKy.webp 1668w, /_astro/63.NYoufhMb_Z1jy3MH.webp 2048w, /_astro/63.NYoufhMb_Z1toOj6.webp 2560w, /_astro/63.NYoufhMb_1HGUAC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-01に食べたはごろもフーズ製の「はごろもフーズ_さんまで健康_蒲焼」です。
魚は秋刀魚で、蒲焼な風味と黄色、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1460mgで、EPAが630mgでした。
感想：沖縄でまた新たな缶詰が沢山見つかってしまったな・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;64. タイランドフィッシャリージャパン_さんま蒲焼_遠赤外線で香ばしく焙焼（タイランドフィッシャリージャパン）&lt;a href=&quot;#64-タイランドフィッシャリージャパン_さんま蒲焼_遠赤外線で香ばしく焙焼タイランドフィッシャリージャパン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/64.COvefhi8_1WmK5b.webp&quot; srcset=&quot;/_astro/64.COvefhi8_ZS9Bcp.webp 640w, /_astro/64.COvefhi8_ZLJeza.webp 750w, /_astro/64.COvefhi8_1NsWVT.webp 828w, /_astro/64.COvefhi8_Z1aqnIs.webp 1080w, /_astro/64.COvefhi8_1stfYU.webp 1280w, /_astro/64.COvefhi8_2tAHf7.webp 1668w, /_astro/64.COvefhi8_Z14Sej9.webp 2048w, /_astro/64.COvefhi8_Z1eIYOx.webp 2560w, /_astro/64.COvefhi8_1WmK5b.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-02に食べたタイランドフィッシャリージャパン製の「タイランドフィッシャリージャパン_さんま蒲焼_遠赤外線で香ばしく焙焼」です。
魚は秋刀魚で、蒲焼な風味と赤の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが810mgで、EPAが504mgでした。
感想：暑いな・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;65. ファミマル_国産いわしの蒲焼（高木商店）&lt;a href=&quot;#65-ファミマル_国産いわしの蒲焼高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/02.mqWO39jH_Z14Nmvi.webp&quot; srcset=&quot;/_astro/02.mqWO39jH_Z1t9aJX.webp 640w, /_astro/02.mqWO39jH_Z1mIN7I.webp 750w, /_astro/02.mqWO39jH_1dtool.webp 828w, /_astro/02.mqWO39jH_RzCu0.webp 1080w, /_astro/02.mqWO39jH_Z1yGQAy.webp 1280w, /_astro/02.mqWO39jH_Zxzplm.webp 1668w, /_astro/02.mqWO39jH_X7LTj.webp 2048w, /_astro/02.mqWO39jH_Nh1nU.webp 2560w, /_astro/02.mqWO39jH_Z14Nmvi.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-03に食べた高木商店製の「ファミマル_国産いわしの蒲焼」です。
魚は鰯で、蒲焼な風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2490mgで、EPAが2300mgでした。
感想：魚の缶詰を食べた。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;66. タイランドフィッシャリージャパン_いわし味付_日本産原料使用（タイランドフィッシャリージャパン）&lt;a href=&quot;#66-タイランドフィッシャリージャパン_いわし味付_日本産原料使用タイランドフィッシャリージャパン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/66.BQpkUFtq_17q8gr.webp&quot; srcset=&quot;/_astro/66.BQpkUFtq_Z2nQngH.webp 640w, /_astro/66.BQpkUFtq_Z2hr0Ds.webp 750w, /_astro/66.BQpkUFtq_iLbRB.webp 828w, /_astro/66.BQpkUFtq_Z20n0xc.webp 1080w, /_astro/66.BQpkUFtq_CwDbb.webp 1280w, /_astro/66.BQpkUFtq_1DE5qn.webp 1668w, /_astro/66.BQpkUFtq_Z1TOQ7S.webp 2048w, /_astro/66.BQpkUFtq_Z24FBDh.webp 2560w, /_astro/66.BQpkUFtq_17q8gr.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-06に食べたタイランドフィッシャリージャパン製の「タイランドフィッシャリージャパン_いわし味付_日本産原料使用」です。
魚は鰯で、煮付な風味と赤、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2270mgで、EPAが1510mgでした。
感想：本当に暑いな・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;67. タイランドフィッシャリージャパン_いわしみそ煮_日本産原料使用（タイランドフィッシャリージャパン）&lt;a href=&quot;#67-タイランドフィッシャリージャパン_いわしみそ煮_日本産原料使用タイランドフィッシャリージャパン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/67.DTphvPFo_Z5vLI2.webp&quot; srcset=&quot;/_astro/67.DTphvPFo_ZMaXBX.webp 640w, /_astro/67.DTphvPFo_ZFKAYI.webp 750w, /_astro/67.DTphvPFo_1TrAwl.webp 828w, /_astro/67.DTphvPFo_1QRdhg.webp 1080w, /_astro/67.DTphvPFo_ZzpgNi.webp 1280w, /_astro/67.DTphvPFo_qHaqT.webp 1668w, /_astro/67.DTphvPFo_1WpmGz.webp 2048w, /_astro/67.DTphvPFo_1MyBbb.webp 2560w, /_astro/67.DTphvPFo_Z5vLI2.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-08に食べたタイランドフィッシャリージャパン製の「タイランドフィッシャリージャパン_いわしみそ煮_日本産原料使用」です。
魚は鰯で、味噌煮な風味と黄色、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1490mgで、EPAが2300mgでした。
感想：今日は最近の陽気と比べて暑くないな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;68. はごろもフーズ_いわしで健康_梅じそ風味（はごろもフーズ）&lt;a href=&quot;#68-はごろもフーズ_いわしで健康_梅じそ風味はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/68.BAWECMM__Z1y1GE2.webp&quot; srcset=&quot;/_astro/68.BAWECMM__Z2j7CoM.webp 640w, /_astro/68.BAWECMM__Z2cHfLx.webp 750w, /_astro/68.BAWECMM__nuVJw.webp 828w, /_astro/68.BAWECMM__omilg.webp 1080w, /_astro/68.BAWECMM__Z22UbJi.webp 1280w, /_astro/68.BAWECMM__Z11MJu6.webp 1668w, /_astro/68.BAWECMM__tTrKz.webp 2048w, /_astro/68.BAWECMM__k3Gfb.webp 2560w, /_astro/68.BAWECMM__Z1y1GE2.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-09に食べたはごろもフーズ製の「はごろもフーズ_いわしで健康_梅じそ風味」です。
魚は鰯で、梅な風味と白、紫色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2440mgで、EPAが2360mgでした。
感想：よっしゃ、Gitコミットメッセージ生成MCPサーバが出来たぞぉ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;69. ネクストレード_さば醤油煮（ネクストレード）&lt;a href=&quot;#69-ネクストレード_さば醤油煮ネクストレード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/69.DPykAdKl_Z1N8vNC.webp&quot; srcset=&quot;/_astro/69.DPykAdKl_Z1kz0UK.webp 640w, /_astro/69.DPykAdKl_Z1e9Div.webp 750w, /_astro/69.DPykAdKl_1m3ydy.webp 828w, /_astro/69.DPykAdKl_9ftbF.webp 1080w, /_astro/69.DPykAdKl_Z2i20SS.webp 1280w, /_astro/69.DPykAdKl_Z1gTyDG.webp 1668w, /_astro/69.DPykAdKl_eMCAY.webp 2048w, /_astro/69.DPykAdKl_4VR5A.webp 2560w, /_astro/69.DPykAdKl_Z1N8vNC.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-11に食べたネクストレード製の「ネクストレード_さば醤油煮」です。
魚は鯖で、醤油煮な風味と赤の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：開かない。場合によっては缶切りが無いと食べられないのかもしれない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;70. ネクストレード_さば味噌煮（ネクストレード）&lt;a href=&quot;#70-ネクストレード_さば味噌煮ネクストレード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/70.i2VSbPW-_Z2sfIsR.webp&quot; srcset=&quot;/_astro/70.i2VSbPW-_ZwOYTT.webp 640w, /_astro/70.i2VSbPW-_ZqpChE.webp 750w, /_astro/70.i2VSbPW-_29Mzep.webp 828w, /_astro/70.i2VSbPW-_ZuQIsz.webp 1080w, /_astro/70.i2VSbPW-_282UfN.webp 1280w, /_astro/70.i2VSbPW-_Z1V1LiV.webp 1668w, /_astro/70.i2VSbPW-_Zpjz3g.webp 2048w, /_astro/70.i2VSbPW-_ZzakyE.webp 2560w, /_astro/70.i2VSbPW-_Z2sfIsR.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-13に食べたネクストレード製の「ネクストレード_さば味噌煮」です。
魚は鯖で、味噌煮な風味と橙色の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：相変わらず開けづらいよこの缶詰。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;71. はごろもフーズ_いわしで健康_しょうゆ味（はごろもフーズ）&lt;a href=&quot;#71-はごろもフーズ_いわしで健康_しょうゆ味はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/71.BdHAAvu-_1Q6vW7.webp&quot; srcset=&quot;/_astro/71.BdHAAvu-_ZSlVkx.webp 640w, /_astro/71.BdHAAvu-_ZLVyHi.webp 750w, /_astro/71.BdHAAvu-_1NgCNL.webp 828w, /_astro/71.BdHAAvu-_Z1gGBQw.webp 1080w, /_astro/71.BdHAAvu-_1md1QQ.webp 1280w, /_astro/71.BdHAAvu-_2nkt73.webp 1668w, /_astro/71.BdHAAvu-_Z1b9srd.webp 2048w, /_astro/71.BdHAAvu-_Z1l0dWB.webp 2560w, /_astro/71.BdHAAvu-_1Q6vW7.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-14に食べたはごろもフーズ製の「はごろもフーズ_いわしで健康_しょうゆ味」です。
魚は鰯で、醤油煮な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2070mgで、EPAが1140mgでした。
感想：今日は台風が来るか、それとも来ないのか・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;72. マルハニチロ_オイルサーディン_いわしオイル漬け_天日塩使用（マルハニチロ）&lt;a href=&quot;#72-マルハニチロ_オイルサーディン_いわしオイル漬け_天日塩使用マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/72.DrFRH5ZX_Z1ck1dm.webp&quot; srcset=&quot;/_astro/72.DrFRH5ZX_Z2sqjDj.webp 640w, /_astro/72.DrFRH5ZX_Z2m0W14.webp 750w, /_astro/72.DrFRH5ZX_ecfv0.webp 828w, /_astro/72.DrFRH5ZX_K3XLV.webp 1080w, /_astro/72.DrFRH5ZX_Z1GdviC.webp 1280w, /_astro/72.DrFRH5ZX_ZF643q.webp 1668w, /_astro/72.DrFRH5ZX_PB8cf.webp 2048w, /_astro/72.DrFRH5ZX_FKmFQ.webp 2560w, /_astro/72.DrFRH5ZX_Z1ck1dm.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-16に食べたマルハニチロ製の「マルハニチロ_オイルサーディン_いわしオイル漬け_天日塩使用」です。
魚は鰯で、オイルな風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1331mgで、EPAが1425mgでした。
感想：最近涼しくて良いな。過ごしやすい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;73. マルハニチロ_さばのカレー煮（マルハニチロ）&lt;a href=&quot;#73-マルハニチロ_さばのカレー煮マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/73.TQ_vyIMr_qhLvR.webp&quot; srcset=&quot;/_astro/73.TQ_vyIMr_GT8XE.webp 640w, /_astro/73.TQ_vyIMr_NjvAT.webp 750w, /_astro/73.TQ_vyIMr_Z1FEpFX.webp 828w, /_astro/73.TQ_vyIMr_2nFLwa.webp 1080w, /_astro/73.TQ_vyIMr_Z3AHyo.webp 1280w, /_astro/73.TQ_vyIMr_WvIFN.webp 1668w, /_astro/73.TQ_vyIMr_2tdUVt.webp 2048w, /_astro/73.TQ_vyIMr_2jnaq5.webp 2560w, /_astro/73.TQ_vyIMr_qhLvR.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-17に食べたマルハニチロ製の「マルハニチロ_さばのカレー煮」です。
魚は鯖で、辛いな風味と黄色、赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが643mgで、EPAが203mgでした。
感想：サバ缶のオメガ3脂肪酸は目にも良いんだな。今日知った。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;74. さば水煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用（信田缶詰）&lt;a href=&quot;#74-さば水煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/74.DpjcthYk_2rjGwN.webp&quot; srcset=&quot;/_astro/74.DpjcthYk_Z2vfAdQ.webp 640w, /_astro/74.DpjcthYk_Z2oPdAB.webp 750w, /_astro/74.DpjcthYk_bmXUs.webp 828w, /_astro/74.DpjcthYk_ZFtrgP.webp 1080w, /_astro/74.DpjcthYk_1Wqcrx.webp 1280w, /_astro/74.DpjcthYk_Z26Du7c.webp 1668w, /_astro/74.DpjcthYk_ZzVhQw.webp 2048w, /_astro/74.DpjcthYk_ZJM3mU.webp 2560w, /_astro/74.DpjcthYk_2rjGwN.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-18に食べた信田缶詰製の「さば水煮_生_国産生原料使用_国内で水揚げされ一度も凍結していないさばを使用」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：これまた普通のサバ缶だ。開けるとボリューミーな様相だが、そこまで肉厚なわけではない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;75. はごろもフーズ_いわしで健康_水煮（はごろもフーズ）&lt;a href=&quot;#75-はごろもフーズ_いわしで健康_水煮はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/75.CJSGKaDu_niu8e.webp&quot; srcset=&quot;/_astro/75.CJSGKaDu_Z1AhdgM.webp 640w, /_astro/75.CJSGKaDu_Z1tQPDx.webp 750w, /_astro/75.CJSGKaDu_16llRw.webp 828w, /_astro/75.CJSGKaDu_2kGu8w.webp 1080w, /_astro/75.CJSGKaDu_Z6zYW2.webp 1280w, /_astro/75.CJSGKaDu_Twria.webp 1668w, /_astro/75.CJSGKaDu_2qeDxP.webp 2048w, /_astro/75.CJSGKaDu_2gnS2r.webp 2560w, /_astro/75.CJSGKaDu_niu8e.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-20に食べたはごろもフーズ製の「はごろもフーズ_いわしで健康_水煮」です。
魚は鰯で、水煮な風味と白、緑の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが870mgで、EPAが2950mgでした。
感想：まあ、普通の水煮ですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;76. ネクストレード_さば水煮（ネクストレード）&lt;a href=&quot;#76-ネクストレード_さば水煮ネクストレード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/76.R4zQ3Yb4_1dIzbj.webp&quot; srcset=&quot;/_astro/76.R4zQ3Yb4_2cvYkm.webp 640w, /_astro/76.R4zQ3Yb4_2iVlWB.webp 750w, /_astro/76.R4zQ3Yb4_Zb2zkg.webp 828w, /_astro/76.R4zQ3Yb4_Z1T4yCk.webp 1080w, /_astro/76.R4zQ3Yb4_IP563.webp 1280w, /_astro/76.R4zQ3Yb4_1JWwlf.webp 1668w, /_astro/76.R4zQ3Yb4_Z1Nwpd1.webp 2048w, /_astro/76.R4zQ3Yb4_Z1XnaIp.webp 2560w, /_astro/76.R4zQ3Yb4_1dIzbj.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-21に食べたネクストレード製の「ネクストレード_さば水煮」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。あまり美味くないで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：これは比較的すんなりと開いた。まあでも微妙です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;77. はごろもフーズ_さばで健康_味付（はごろもフーズ）&lt;a href=&quot;#77-はごろもフーズ_さばで健康_味付はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/77.wI_z5FTU_2nOk1k.webp&quot; srcset=&quot;/_astro/77.wI_z5FTU_Z1wk7GA.webp 640w, /_astro/77.wI_z5FTU_Z1pTK4l.webp 750w, /_astro/77.wI_z5FTU_1airrI.webp 828w, /_astro/77.wI_z5FTU_ZIXNMj.webp 1080w, /_astro/77.wI_z5FTU_1SUOV4.webp 1280w, /_astro/77.wI_z5FTU_Z2a8QCF.webp 1668w, /_astro/77.wI_z5FTU_ZDqEn0.webp 2048w, /_astro/77.wI_z5FTU_ZNhpSo.webp 2560w, /_astro/77.wI_z5FTU_2nOk1k.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-23に食べたはごろもフーズ製の「はごろもフーズ_さばで健康_味付」です。
魚は鯖で、煮付な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1881mgで、EPAが663mgでした。
感想：最近妙に暑いな・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;78. HOKO_日本のさば_カレー（宝幸）&lt;a href=&quot;#78-hoko_日本のさば_カレー宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/78.CmZpVZm9_ZAf4vW.webp&quot; srcset=&quot;/_astro/78.CmZpVZm9_Z1Ccoe9.webp 640w, /_astro/78.CmZpVZm9_Z1vM1AT.webp 750w, /_astro/78.CmZpVZm9_14qaUa.webp 828w, /_astro/78.CmZpVZm9_1m8Utl.webp 1080w, /_astro/78.CmZpVZm9_Z158yBd.webp 1280w, /_astro/78.CmZpVZm9_Z417m1.webp 1668w, /_astro/78.CmZpVZm9_1rG4SE.webp 2048w, /_astro/78.CmZpVZm9_1hPjng.webp 2560w, /_astro/78.CmZpVZm9_ZAf4vW.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-24に食べた宝幸製の「HOKO_日本のさば_カレー」です。
魚は鯖で、辛いな風味と黄色、白の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3217mgで、EPAが1163mgでした。
感想：冷房を久しぶりに付けたら快適過ぎてビビった。そんな状況下で食べるカレーは良いものだな。しかし、以前に冷房が効きすぎたカレー屋で凍えながら食べた時は遺憾だったが。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;79. はごろも&amp;amp;KING-OSCAR_Mackerel_Fillet_ノルウェーさばトマトソース（はごろもフーズ、KING-OSCAR）&lt;a href=&quot;#79-はごろもking-oscar_mackerel_fillet_ノルウェーさばトマトソースはごろもフーズking-oscar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/79.DjxB-oLA_p8kby.webp&quot; srcset=&quot;/_astro/79.DjxB-oLA_Z16cqvw.webp 640w, /_astro/79.DjxB-oLA_ZYM3Sh.webp 750w, /_astro/79.DjxB-oLA_1Aq8CM.webp 828w, /_astro/79.DjxB-oLA_2mwkbQ.webp 1080w, /_astro/79.DjxB-oLA_Z4K9SH.webp 1280w, /_astro/79.DjxB-oLA_Vmhlu.webp 1668w, /_astro/79.DjxB-oLA_2s4tBa.webp 2048w, /_astro/79.DjxB-oLA_2idI5L.webp 2560w, /_astro/79.DjxB-oLA_p8kby.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-25に食べたはごろもフーズ、KING-OSCAR製の「はごろも&amp;amp;KING-OSCAR_Mackerel_Fillet_ノルウェーさばトマトソース」です。
魚は鯖で、トマトな風味と赤の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：トマトが濃いめです。まあ、流石にミートソースのペンネの方が美味いわな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;80. はごろもフーズ_さばで健康_オリーブオイル_エキストラバージンオリーブオイル使用（はごろもフーズ）&lt;a href=&quot;#80-はごろもフーズ_さばで健康_オリーブオイル_エキストラバージンオリーブオイル使用はごろもフーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/80.wdhX_kx3_Z20NBmV.webp&quot; srcset=&quot;/_astro/80.wdhX_kx3_Z1EYIX7.webp 640w, /_astro/80.wdhX_kx3_Z1yzmkR.webp 750w, /_astro/80.wdhX_kx3_11CPbc.webp 828w, /_astro/80.wdhX_kx3_Z3pBmD.webp 1080w, /_astro/80.wdhX_kx3_Z2uH6sc.webp 1280w, /_astro/80.wdhX_kx3_Z1tzEd0.webp 1668w, /_astro/80.wdhX_kx3_27x2F.webp 2048w, /_astro/80.wdhX_kx3_Z7IdsI.webp 2560w, /_astro/80.wdhX_kx3_Z20NBmV.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-07-27に食べたはごろもフーズ製の「はごろもフーズ_さばで健康_オリーブオイル_エキストラバージンオリーブオイル使用」です。
魚は鯖で、オイルな風味と緑、金色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3165mgで、EPAが1065mgでした。
感想：オイルサーディンの食感よりもオイルサバの方が好みなんだよな。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;後編に続く・・・&lt;a href=&quot;#後編に続く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;依然として数が多過ぎる・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶でした。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【原神】シュヴァルマラン映影ランド雑記</title><link>https://endorphinbath.com/posts/genshin-chevalmarin-film-notes-land/</link><guid isPermaLink="true">https://endorphinbath.com/posts/genshin-chevalmarin-film-notes-land/</guid><description>原神でシュヴァルマラン映影ランドをプレイした時の状況をまとめた記事です。何かしらの参考にしてみて下さい。</description><pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このゲームってアクションゲームじゃなかったの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;経営シミュレーションが始まった&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シュヴァルマラン映影ランドの設営が楽しい。&lt;a href=&quot;#シュヴァルマラン映影ランドの設営が楽しい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この前、原神で進めたイベント「シュヴァルマラン映影ランド」を遊んだ際のプレイングレポート的な感じの記事になります。
そのシュヴァルマラン映影ランドは、アクションと言うよりはシミュレーション寄りのレクリエーションになっていました。一応最後までプレイして、全ての施設を最高レベルにして、全てのマイルストーンは達成しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.0kJjI2E5_ANChr.webp&quot; srcset=&quot;/_astro/11.0kJjI2E5_1vGCNQ.webp 640w, /_astro/11.0kJjI2E5_ZPNuci.webp 750w, /_astro/11.0kJjI2E5_Z1QvPR.webp 828w, /_astro/11.0kJjI2E5_hqs8a.webp 1080w, /_astro/11.0kJjI2E5_1gAW4J.webp 1280w, /_astro/11.0kJjI2E5_Z27fJ73.webp 1668w, /_astro/11.0kJjI2E5_ANChr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シーズン1：創業期&lt;a href=&quot;#シーズン1創業期&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;映影ランドを興し始める。&lt;a href=&quot;#映影ランドを興し始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ナヴィアが誘ってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.BOgSbARQ_1FVCvt.webp&quot; srcset=&quot;/_astro/12.BOgSbARQ_2cQkho.webp 640w, /_astro/12.BOgSbARQ_Z9DMIK.webp 750w, /_astro/12.BOgSbARQ_EiaBF.webp 828w, /_astro/12.BOgSbARQ_1mysmc.webp 1080w, /_astro/12.BOgSbARQ_2lIWiL.webp 1280w, /_astro/12.BOgSbARQ_Z127IS1.webp 1668w, /_astro/12.BOgSbARQ_1FVCvt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;準備できてるので映影ランドを興していきます。まだ何の施設も設営されていない映影ランドは砂糖の入っていないマカロンのようです。（らしいです。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13.eU_YYV9h_xlFAo.webp&quot; srcset=&quot;/_astro/13.eU_YYV9h_Z1gvOw1.webp 640w, /_astro/13.eU_YYV9h_1rabgL.webp 750w, /_astro/13.eU_YYV9h_2g79Cc.webp 828w, /_astro/13.eU_YYV9h_dXvr7.webp 1080w, /_astro/13.eU_YYV9h_1d90nG.webp 1280w, /_astro/13.eU_YYV9h_Z2aHFN6.webp 1668w, /_astro/13.eU_YYV9h_xlFAo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/14.B817lWTw_1v92Ny.webp&quot; srcset=&quot;/_astro/14.B817lWTw_1nt7Rd.webp 640w, /_astro/14.B817lWTw_ZY208V.webp 750w, /_astro/14.B817lWTw_Za51Mv.webp 828w, /_astro/14.B817lWTw_1bKREh.webp 1080w, /_astro/14.B817lWTw_2aVmAQ.webp 1280w, /_astro/14.B817lWTw_Z1cUjzV.webp 1668w, /_astro/14.B817lWTw_1v92Ny.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラフル・アドベンチャーを始める。&lt;a href=&quot;#カラフルアドベンチャーを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、手始めに「カラフル・アドベンチャー」という施設を建てました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15.JVK15DND_4B6Ve.webp&quot; srcset=&quot;/_astro/15.JVK15DND_1YFqQ2.webp 640w, /_astro/15.JVK15DND_ZmOGa7.webp 750w, /_astro/15.JVK15DND_r7hbj.webp 828w, /_astro/15.JVK15DND_ZeL3d3.webp 1080w, /_astro/15.JVK15DND_JoqIw.webp 1280w, /_astro/15.JVK15DND_2qISlF.webp 1668w, /_astro/15.JVK15DND_4B6Ve.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「カラフル・アドベンチャー」を建てると、ちょっとしたミニゲームが始まりました。ここらへんはシミュレーションではなくアクション要素になっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16.w0A-vRYb_ZttLr4.webp&quot; srcset=&quot;/_astro/16.w0A-vRYb_Z2rAe41.webp 640w, /_astro/16.w0A-vRYb_g5LIL.webp 750w, /_astro/16.w0A-vRYb_152K5c.webp 828w, /_astro/16.w0A-vRYb_ZMQVAl.webp 1080w, /_astro/16.w0A-vRYb_bixle.webp 1280w, /_astro/16.w0A-vRYb_1RCYXn.webp 1668w, /_astro/16.w0A-vRYb_ZttLr4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、カラフルアドベンチャーのスタッフさんを雇います。最初は強めの人から雇っていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/17.DdV-Lf0K_Z2rDfuy.webp&quot; srcset=&quot;/_astro/17.DdV-Lf0K_Z21rtSo.webp 640w, /_astro/17.DdV-Lf0K_GevTo.webp 750w, /_astro/17.DdV-Lf0K_1vbufO.webp 828w, /_astro/17.DdV-Lf0K_2jaIa6.webp 1080w, /_astro/17.DdV-Lf0K_Z1LPUHg.webp 1280w, /_astro/17.DdV-Lf0K_Z5vt57.webp 1668w, /_astro/17.DdV-Lf0K_Z2rDfuy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;1周期目の最初の営業利益は2400モラでした。ここからどれぐらい増えていくんでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/18.BcDntfHE_Z1BL6Cp.webp&quot; srcset=&quot;/_astro/18.BcDntfHE_Z1EMATm.webp 640w, /_astro/18.BcDntfHE_12SoSq.webp 750w, /_astro/18.BcDntfHE_1QPneQ.webp 828w, /_astro/18.BcDntfHE_Z1V9gLG.webp 1080w, /_astro/18.BcDntfHE_ZVXLP7.webp 1280w, /_astro/18.BcDntfHE_JlEM2.webp 1668w, /_astro/18.BcDntfHE_Z1BL6Cp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;名演！映影ベストシーンを始める。&lt;a href=&quot;#名演映影ベストシーンを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この映影ランドには、キッチンのキャストとしてエスコフィエがいます。フォンテーヌで引っ張りだこの料理人です。「力」の料理が見れるそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/19.B9wiQ3yf_Z5vwun.webp&quot; srcset=&quot;/_astro/19.B9wiQ3yf_lhAv8.webp 640w, /_astro/19.B9wiQ3yf_Z21dwv1.webp 750w, /_astro/19.B9wiQ3yf_Z1cgy9A.webp 828w, /_astro/19.B9wiQ3yf_ZoSGDE.webp 1080w, /_astro/19.B9wiQ3yf_zgMhU.webp 1280w, /_astro/19.B9wiQ3yf_2gBeU4.webp 1668w, /_astro/19.B9wiQ3yf_Z5vwun.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;エスコフィエは手始めに「力もりもりスペアリブロースト」を作りました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/20.DZSUd44l_Z1nWf8S.webp&quot; srcset=&quot;/_astro/20.DZSUd44l_Z1akeFH.webp 640w, /_astro/20.DZSUd44l_1xlL75.webp 750w, /_astro/20.DZSUd44l_2miJsv.webp 828w, /_astro/20.DZSUd44l_Z1Hkpia.webp 1080w, /_astro/20.DZSUd44l_ZI9UlA.webp 1280w, /_astro/20.DZSUd44l_Xawgy.webp 1668w, /_astro/20.DZSUd44l_Z1nWf8S.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな狭いキッチンでよく作れるな。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21.tww8be6r_171j8H.webp&quot; srcset=&quot;/_astro/21.tww8be6r_xEGoa.webp 640w, /_astro/21.tww8be6r_Z1NPqBY.webp 750w, /_astro/21.tww8be6r_ZYSsgy.webp 828w, /_astro/21.tww8be6r_MD8Yq.webp 1080w, /_astro/21.tww8be6r_1LNCV0.webp 1280w, /_astro/21.tww8be6r_Z1B33fM.webp 1668w, /_astro/21.tww8be6r_171j8H.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは次のアトラクションを建てていきます。「名演！映影ベストシーン」という施設を建てます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/23.CT1tsWSd_XGb5W.webp&quot; srcset=&quot;/_astro/23.CT1tsWSd_2bsdul.webp 640w, /_astro/23.CT1tsWSd_Zb2TvN.webp 750w, /_astro/23.CT1tsWSd_CT3OC.webp 828w, /_astro/23.CT1tsWSd_Ej0VF.webp 1080w, /_astro/23.CT1tsWSd_1DtuSf.webp 1280w, /_astro/23.CT1tsWSd_Z1Jnbix.webp 1668w, /_astro/23.CT1tsWSd_XGb5W.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;建てたら、モジモジくん始まった。このアトラクションにもアクション要素がありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/24.CkLNKptj_ZwXNUy.webp&quot; srcset=&quot;/_astro/24.CkLNKptj_1DrG9I.webp 640w, /_astro/24.CkLNKptj_ZI3qQq.webp 750w, /_astro/24.CkLNKptj_5Swu0.webp 828w, /_astro/24.CkLNKptj_ZQlY4P.webp 1080w, /_astro/24.CkLNKptj_7NuQJ.webp 1280w, /_astro/24.CkLNKptj_1O8WtS.webp 1668w, /_astro/24.CkLNKptj_ZwXNUy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「名演！映影ベストシーン」のスタッフに、シャムシール使いのおっさんを雇います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/25.yu7MoaVb_NvnWj.webp&quot; srcset=&quot;/_astro/25.yu7MoaVb_ZUYf6r.webp 640w, /_astro/25.yu7MoaVb_1LGKGl.webp 750w, /_astro/25.yu7MoaVb_Z2txoLa.webp 828w, /_astro/25.yu7MoaVb_u8dN2.webp 1080w, /_astro/25.yu7MoaVb_1tiHJB.webp 1280w, /_astro/25.yu7MoaVb_Z1TxXrb.webp 1668w, /_astro/25.yu7MoaVb_NvnWj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;のんびりガーデンを始める。&lt;a href=&quot;#のんびりガーデンを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3周期目に入ります。次のアトラクションを建てていきます。ここに見えている方は、この映影ランドを支えて下さっている、レポーヌ・ポーリーンさんです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/26.BnaNpS1I_wRD1e.webp&quot; srcset=&quot;/_astro/26.BnaNpS1I_1Fzhti.webp 640w, /_astro/26.BnaNpS1I_ZFUPwQ.webp 750w, /_astro/26.BnaNpS1I_817Nz.webp 828w, /_astro/26.BnaNpS1I_dusQW.webp 1080w, /_astro/26.BnaNpS1I_1cEWNw.webp 1280w, /_astro/26.BnaNpS1I_Z2bbIng.webp 1668w, /_astro/26.BnaNpS1I_wRD1e.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「のんびりガーデン」というアトラクションが建ちました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/27.BGMOvLJz_ZyTHsN.webp&quot; srcset=&quot;/_astro/27.BGMOvLJz_28p3QP.webp 640w, /_astro/27.BGMOvLJz_Ze649j.webp 750w, /_astro/27.BGMOvLJz_zPTc7.webp 828w, /_astro/27.BGMOvLJz_ZShRC5.webp 1080w, /_astro/27.BGMOvLJz_5RBju.webp 1280w, /_astro/27.BGMOvLJz_1Md3VD.webp 1668w, /_astro/27.BGMOvLJz_ZyTHsN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「のんびりガーデン」は先の2つのアトラクションとは違って、パズルゲームが始まります。なるべく沢山の動物を種類豊富に並べていく必要があります。個人的に一番好きなミニゲームでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/28.olL_DgJB_zNp8T.webp&quot; srcset=&quot;/_astro/28.olL_DgJB_1PFr9v.webp 640w, /_astro/28.olL_DgJB_ZvOFQD.webp 750w, /_astro/28.olL_DgJB_i7htM.webp 828w, /_astro/28.olL_DgJB_gqeYC.webp 1080w, /_astro/28.olL_DgJB_1fAIVc.webp 1280w, /_astro/28.olL_DgJB_Z28fWfA.webp 1668w, /_astro/28.olL_DgJB_zNp8T.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「のんびりガーデン」のスライムは斬れませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/29.Dg8dsrwz_1YULOr.webp&quot; srcset=&quot;/_astro/29.Dg8dsrwz_1SrTqA.webp 640w, /_astro/29.Dg8dsrwz_Zt3dzy.webp 750w, /_astro/29.Dg8dsrwz_kSJKR.webp 828w, /_astro/29.Dg8dsrwz_1FxBFa.webp 1080w, /_astro/29.Dg8dsrwz_Z2pt2cc.webp 1280w, /_astro/29.Dg8dsrwz_ZI8zz3.webp 1668w, /_astro/29.Dg8dsrwz_1YULOr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;シャムシール使いのおっさんと話します。コイツ、外見とは裏腹にネガティブです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/30._4dwceZj_1lqBDk.webp&quot; srcset=&quot;/_astro/30._4dwceZj_1d9CdS.webp 640w, /_astro/30._4dwceZj_Z19luMg.webp 750w, /_astro/30._4dwceZj_ZkowqP.webp 828w, /_astro/30._4dwceZj_123ru3.webp 1080w, /_astro/30._4dwceZj_21dVqC.webp 1280w, /_astro/30._4dwceZj_Z1mCJKa.webp 1668w, /_astro/30._4dwceZj_1lqBDk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;3周期目の売上は営業利益は79,260モラでした。たった2周期間で結構増えましたね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31.BDcGQQ8__6mFOz.webp&quot; srcset=&quot;/_astro/31.BDcGQQ8__Z1hnUpE.webp 640w, /_astro/31.BDcGQQ8__1qi5n8.webp 750w, /_astro/31.BDcGQQ8__2ff3Iy.webp 828w, /_astro/31.BDcGQQ8__Zd0tjH.webp 1080w, /_astro/31.BDcGQQ8__La0BR.webp 1280w, /_astro/31.BDcGQQ8__2susf1.webp 1668w, /_astro/31.BDcGQQ8__6mFOz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;創業期が終わる。&lt;a href=&quot;#創業期が終わる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;主要な3アトラクションが建ちました。それらをこれから育てていきます。
とか何とか言っている間に、周期は7期目に入りました。運営レベルは5です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.nAQOn8qf_Z10kMwb.webp&quot; srcset=&quot;/_astro/32.nAQOn8qf_ZExAxG.webp 640w, /_astro/32.nAQOn8qf_238pf6.webp 750w, /_astro/32.nAQOn8qf_Z2d6Kdp.webp 828w, /_astro/32.nAQOn8qf_Z1jHWFs.webp 1080w, /_astro/32.nAQOn8qf_ZkxsIS.webp 1280w, /_astro/32.nAQOn8qf_1lLXSg.webp 1668w, /_astro/32.nAQOn8qf_Z10kMwb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;各アトラクションにスタッフを増やしています。カラフル・アドベンチャーには現金なメリュジーヌがいます。コイツはすぐに変えようと思います。金ではなく夢を語って下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33.BcRD3L1s_1x1Kxj.webp&quot; srcset=&quot;/_astro/33.BcRD3L1s_outdv.webp 640w, /_astro/33.BcRD3L1s_Z1X0DMD.webp 750w, /_astro/33.BcRD3L1s_Z193Frd.webp 828w, /_astro/33.BcRD3L1s_1dDAo2.webp 1080w, /_astro/33.BcRD3L1s_2cO5kB.webp 1280w, /_astro/33.BcRD3L1s_Z1b2AQb.webp 1668w, /_astro/33.BcRD3L1s_1x1Kxj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;10周期目が終わる頃には、全てのアトラクションがレベル5になりました。これ以上は運営レベルが上がらないと施設のレベルを上げることが出来ません。運営レベルは周期で最大値が決まっているのでこれ以上は上がりません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/34.DWrLYQNP_Z2mTf0d.webp&quot; srcset=&quot;/_astro/34.DWrLYQNP_Z2vjkSj.webp 640w, /_astro/34.DWrLYQNP_cmETt.webp 750w, /_astro/34.DWrLYQNP_11jDfT.webp 828w, /_astro/34.DWrLYQNP_2nTIEr.webp 1080w, /_astro/34.DWrLYQNP_Z1H6UcU.webp 1280w, /_astro/34.DWrLYQNP_ZLszL.webp 1668w, /_astro/34.DWrLYQNP_Z2mTf0d.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ランド全体を育てる上で気を付けたことは、行動ポイントを使い切ることでした。行動ポイントを使い切るために、キャストも多く雇う必要もあります。そのために、施設をなるべく速くレベルアップさせることも重要でした。施設がレベルアップすると雇用枠を増やすことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/35.CAc_vCQs_Zx8TFF.webp&quot; srcset=&quot;/_astro/35.CAc_vCQs_Z9BVz4.webp 640w, /_astro/35.CAc_vCQs_Z2w84Ad.webp 750w, /_astro/35.CAc_vCQs_Z1Hb6eM.webp 828w, /_astro/35.CAc_vCQs_ZQw4OW.webp 1080w, /_astro/35.CAc_vCQs_7Dp6C.webp 1280w, /_astro/35.CAc_vCQs_1NXQIL.webp 1668w, /_astro/35.CAc_vCQs_Zx8TFF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;10周期目が終わって、営業利益は244,308モラでした。これで創業期は終わりです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/36.PFTBeV6X_Z2iz5iT.webp&quot; srcset=&quot;/_astro/36.PFTBeV6X_1fXbxi.webp 640w, /_astro/36.PFTBeV6X_Z16wVsQ.webp 750w, /_astro/36.PFTBeV6X_ZhzX7q.webp 828w, /_astro/36.PFTBeV6X_2seSlK.webp 1080w, /_astro/36.PFTBeV6X_Z1CLKvB.webp 1280w, /_astro/36.PFTBeV6X_3xG6x.webp 1668w, /_astro/36.PFTBeV6X_Z2iz5iT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;営業一時休止になりました。成長期が開放されるまで待ちました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37.wNRAbTuS_ZzHjN9.webp&quot; srcset=&quot;/_astro/37.wNRAbTuS_ZNIxVu.webp 640w, /_astro/37.wNRAbTuS_1SWrQi.webp 750w, /_astro/37.wNRAbTuS_Z2mhHBd.webp 828w, /_astro/37.wNRAbTuS_ZT5tWq.webp 1080w, /_astro/37.wNRAbTuS_54YY9.webp 1280w, /_astro/37.wNRAbTuS_1LprBi.webp 1668w, /_astro/37.wNRAbTuS_ZzHjN9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シーズン2：成長期&lt;a href=&quot;#シーズン2成長期&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;仲間を増やす。&lt;a href=&quot;#仲間を増やす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;映影ランドが成長期に入ると、おなじみのキャラを映影ランドに迎え入れることで成長スピードを促進することが出来ます。ここいらで行動ポイントをどれだけ早い内から沢山使えるかどうかが肝になってきそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41.CmQs3Csx_Z1f1cjR.webp&quot; srcset=&quot;/_astro/41.CmQs3Csx_Z2j5orK.webp 640w, /_astro/41.CmQs3Csx_oABl2.webp 750w, /_astro/41.CmQs3Csx_1dxzGs.webp 828w, /_astro/41.CmQs3Csx_Z1yomt9.webp 1080w, /_astro/41.CmQs3Csx_ZzdRwz.webp 1280w, /_astro/41.CmQs3Csx_176z5z.webp 1668w, /_astro/41.CmQs3Csx_Z1f1cjR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;最初に迎え入れられるのはヴァレサでした。この仲間とのやり取りを3周期分行うことで、大きなメリットを獲得出来るので、各周期で行動ポイントはその仲間とのやり取りの分は確保しておきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/42.Dv-rLCAN_2qKVOX.webp&quot; srcset=&quot;/_astro/42.Dv-rLCAN_Z3JXNM.webp 640w, /_astro/42.Dv-rLCAN_Z2qg6OV.webp 750w, /_astro/42.Dv-rLCAN_Z1Bj8tv.webp 828w, /_astro/42.Dv-rLCAN_27nLFG.webp 1080w, /_astro/42.Dv-rLCAN_Z1XCRbF.webp 1280w, /_astro/42.Dv-rLCAN_Zhipyw.webp 1668w, /_astro/42.Dv-rLCAN_2qKVOX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、ヴァレサとの1回目のやり取りを終わらせると、スタッフセンターの履歴書を更新するスキルを発動することが出来るようになります。（まあ、このスキルはあまり使いませんでしたけども。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/42_2.DhFlSxCV_ZVFW71.webp&quot; srcset=&quot;/_astro/42_2.DhFlSxCV_16xBw3.webp 640w, /_astro/42_2.DhFlSxCV_Z1g47Le.webp 750w, /_astro/42_2.DhFlSxCV_Z1ENTBX.webp 828w, /_astro/42_2.DhFlSxCV_Z1lH6JW.webp 1080w, /_astro/42_2.DhFlSxCV_22BH27.webp 1280w, /_astro/42_2.DhFlSxCV_XD2BJ.webp 1668w, /_astro/42_2.DhFlSxCV_ZVFW71.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;シグウィンとかもいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43.FLUjilao_y6fGD.webp&quot; srcset=&quot;/_astro/43.FLUjilao_2xLkq.webp 640w, /_astro/43.FLUjilao_Z2jWlFI.webp 750w, /_astro/43.FLUjilao_Z1v0nki.webp 828w, /_astro/43.FLUjilao_eI5xm.webp 1080w, /_astro/43.FLUjilao_1dSztV.webp 1280w, /_astro/43.FLUjilao_Z29X6GQ.webp 1668w, /_astro/43.FLUjilao_y6fGD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;金色スタッフを逃さない。&lt;a href=&quot;#金色スタッフを逃さない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;成長期を進めていくと、1アトラクションに配置出来るスタッフは3人に増えていきます。3人までが限界なので、この先はキャストを解雇する必要性も出てきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44.C46G3Uj-_gb7sU.webp&quot; srcset=&quot;/_astro/44.C46G3Uj-_1XvjY.webp 640w, /_astro/44.C46G3Uj-_Z2kwBGa.webp 750w, /_astro/44.C46G3Uj-_Z1vzDkJ.webp 828w, /_astro/44.C46G3Uj-_Z3c2Fm.webp 1080w, /_astro/44.C46G3Uj-_UXrgd.webp 1280w, /_astro/44.C46G3Uj-_Z2rSeUz.webp 1668w, /_astro/44.C46G3Uj-_gb7sU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先ほど、ヴァレサのスタッフセンターの履歴書を更新するスキルは使わないと述べました。なぜかと言うと、そのスキルを使用することで消費されてしまう行動ポイントが勿体ないからです。その代わりに、強力なスタッフがスタッフセンターに出現した場合は、すかさず獲得しておくことを心掛けました。（この金色スタッフが強力なキャストです。終盤まで使います。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/45.DBsHrtjX_98dlK.webp&quot; srcset=&quot;/_astro/45.DBsHrtjX_1kMLyB.webp 640w, /_astro/45.DBsHrtjX_Z11Hlrx.webp 750w, /_astro/45.DBsHrtjX_ZcKn67.webp 828w, /_astro/45.DBsHrtjX_ZaeVMw.webp 1080w, /_astro/45.DBsHrtjX_NUx93.webp 1280w, /_astro/45.DBsHrtjX_2vfYLc.webp 1668w, /_astro/45.DBsHrtjX_98dlK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その金色スタッフの中でも、レベルが1から始まるこの「魚のミントソースグリル王」はすぐに獲得しておくべきです。スタッフは、レベルを上げなければ給与は殆ど発生しないも同然です。モラが貯まって、実際にアトラクションに配置するまでタダ飯食らいでも問題有りません。（只のプクプク獣ではありませんでした。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46.C2j67D3D_Z1F9SV.webp&quot; srcset=&quot;/_astro/46.C2j67D3D_vpxzS.webp 640w, /_astro/46.C2j67D3D_Z1Q5zqg.webp 750w, /_astro/46.C2j67D3D_Z128B4P.webp 828w, /_astro/46.C2j67D3D_Zl3k3d.webp 1080w, /_astro/46.C2j67D3D_D79Sm.webp 1280w, /_astro/46.C2j67D3D_2krBvv.webp 1668w, /_astro/46.C2j67D3D_Z1F9SV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とても元気に働いてくれそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/47.CHn-F5i7_2mvmxj.webp&quot; srcset=&quot;/_astro/47.CHn-F5i7_A8cYn.webp 640w, /_astro/47.CHn-F5i7_Z1LmU1L.webp 750w, /_astro/47.CHn-F5i7_ZWpVFl.webp 828w, /_astro/47.CHn-F5i7_238co2.webp 1080w, /_astro/47.CHn-F5i7_Z22Srtk.webp 1280w, /_astro/47.CHn-F5i7_ZlxYQb.webp 1668w, /_astro/47.CHn-F5i7_2mvmxj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;料理を選ぶ。&lt;a href=&quot;#料理を選ぶ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;エスコフィエの料理は、映影ランドの行く末を左右する重要な要素でした。この料理の選択が行動ポイントとモラの収支に大きく影響します。
特に、行動ポイントが少ない時点におけるこの「集中力千倍ババロア」は強力です。仲間との交流イベントを進めるために行動ポイントを確保しておく必要がありますが、アトラクションを拡張する際にはさらに大量の行動ポイントが必要になってきます。「集中力千倍ババロア」は、そのアトラクションを拡張する際の行動ポイントの消費をゼロにすることが可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/48.Cw9EIu_6_seuCA.webp&quot; srcset=&quot;/_astro/48.Cw9EIu_6_2us6Om.webp 640w, /_astro/48.Cw9EIu_6_7VXNd.webp 750w, /_astro/48.Cw9EIu_6_VSW9D.webp 828w, /_astro/48.Cw9EIu_6_8Qktj.webp 1080w, /_astro/48.Cw9EIu_6_181OpS.webp 1280w, /_astro/48.Cw9EIu_6_Z2fOQKT.webp 1668w, /_astro/48.Cw9EIu_6_seuCA.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この「ベスト・メモリー・ブラック・プディング」のようなスタッフの研修費用をゼロにしてくれる料理も重要です。金色スタッフは沢山レベルを上げることが出来て伸び代がありますが、レベルが上ってくると研修費用がどんどん嵩んできます。そのレベルが上ってきた状態で、「ベスト・メモリー・ブラック・プディング」を発動することで研修費用を浮かせて、研修の所為でアップグレード出来なかったアトラクションをアップグレードさせることが可能になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/49.DLzoZPqT_1Fue9R.webp&quot; srcset=&quot;/_astro/49.DLzoZPqT_Z14hnzc.webp 640w, /_astro/49.DLzoZPqT_1DoCdA.webp 750w, /_astro/49.DLzoZPqT_2slAz1.webp 828w, /_astro/49.DLzoZPqT_1m740A.webp 1080w, /_astro/49.DLzoZPqT_2lhxWa.webp 1280w, /_astro/49.DLzoZPqT_Z12z8eC.webp 1668w, /_astro/49.DLzoZPqT_1Fue9R.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あと、料理を選ぶ際に気を付けたいのが、この中にある「余韻ながながコンソメスープ」です。
なんか知りませんが、この料理はバグっています。せっかく選んでも、その料理の説明文に書いてある効果が発動してくれないのです。（おま環だったのかも分かりません。）僕は本イベントで2回選びましたが、どちらも料理の効果が発動せず、2回分の料理を無駄にしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/50.eNM-r1fV_pqaqF.webp&quot; srcset=&quot;/_astro/50.eNM-r1fV_GigNX.webp 640w, /_astro/50.eNM-r1fV_Z1FcQcb.webp 750w, /_astro/50.eNM-r1fV_ZQfRPK.webp 828w, /_astro/50.eNM-r1fV_630ho.webp 1080w, /_astro/50.eNM-r1fV_15dudX.webp 1280w, /_astro/50.eNM-r1fV_Z2iDbWO.webp 1668w, /_astro/50.eNM-r1fV_pqaqF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;成長期が終わる。&lt;a href=&quot;#成長期が終わる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;20周期目が終わると、成長期が終了しました。ここからまた、営業一時休止です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51.HhxrTl0P_ZD9hCs.webp&quot; srcset=&quot;/_astro/51.HhxrTl0P_ZDOVcf.webp 640w, /_astro/51.HhxrTl0P_23Q4Ax.webp 750w, /_astro/51.HhxrTl0P_Z2co5QX.webp 828w, /_astro/51.HhxrTl0P_ZWwrLJ.webp 1080w, /_astro/51.HhxrTl0P_1D29P.webp 1280w, /_astro/51.HhxrTl0P_1HXtLY.webp 1668w, /_astro/51.HhxrTl0P_ZD9hCs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;20周期目を終えたカラフル・アドベンチャーの状態はこんな感じでした。リネットを迎え入れたことでサービスポイントが限界突破しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/52.yM9Rzet7_Z1irH9N.webp&quot; srcset=&quot;/_astro/52.yM9Rzet7_MUhkS.webp 640w, /_astro/52.yM9Rzet7_Z1yzPFg.webp 750w, /_astro/52.yM9Rzet7_ZJCRjP.webp 828w, /_astro/52.yM9Rzet7_Z1BORj5.webp 1080w, /_astro/52.yM9Rzet7_ZCEnmv.webp 1280w, /_astro/52.yM9Rzet7_13F4fD.webp 1668w, /_astro/52.yM9Rzet7_Z1irH9N.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;20周期目を終えた名演！映影ベストシーンの状態はこんな感じでした。迎え入れた仲間がいなかったので少し寂しいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/53.CnX-8StI_Zn89v8.webp&quot; srcset=&quot;/_astro/53.CnX-8StI_Z27mVwp.webp 640w, /_astro/53.CnX-8StI_Aj4gn.webp 750w, /_astro/53.CnX-8StI_1pg2BN.webp 828w, /_astro/53.CnX-8StI_ZGvjEp.webp 1080w, /_astro/53.CnX-8StI_hEaha.webp 1280w, /_astro/53.CnX-8StI_1XYBTj.webp 1668w, /_astro/53.CnX-8StI_Zn89v8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;20周期目を終えたのんびりガーデンの状態はこんな感じでした。シグウィンを迎え入れたことでサービスポイントが爆上がりしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/54.Dn1OGeNf_ZbPYpP.webp&quot; srcset=&quot;/_astro/54.Dn1OGeNf_106GDG.webp 640w, /_astro/54.Dn1OGeNf_Z1moqms.webp 750w, /_astro/54.Dn1OGeNf_Zxrs12.webp 828w, /_astro/54.Dn1OGeNf_Zve9z7.webp 1080w, /_astro/54.Dn1OGeNf_sVkms.webp 1280w, /_astro/54.Dn1OGeNf_2agLYB.webp 1668w, /_astro/54.Dn1OGeNf_ZbPYpP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;20周期目の営業利益は2,672,665モラでした。上がり方は上がっていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/55.DGdI4K-t_1iwKSe.webp&quot; srcset=&quot;/_astro/55.DGdI4K-t_Z1J37TW.webp 640w, /_astro/55.DGdI4K-t_XCRRP.webp 750w, /_astro/55.DGdI4K-t_1MzQeg.webp 828w, /_astro/55.DGdI4K-t_Y9AIW.webp 1080w, /_astro/55.DGdI4K-t_1Xk5Fw.webp 1280w, /_astro/55.DGdI4K-t_Z1pwAvg.webp 1668w, /_astro/55.DGdI4K-t_1iwKSe.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしながら今回は、全てのアトラクションがレベル10に届きませんでした・・・。バグ料理の所為だと思っておく・・・。（それ以外の選択ミスもちょくちょくありました。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/56.BG23gUg__1pbQu7.webp&quot; srcset=&quot;/_astro/56.BG23gUg__2wk9up.webp 640w, /_astro/56.BG23gUg__9O1tg.webp 750w, /_astro/56.BG23gUg__XKYOG.webp 828w, /_astro/56.BG23gUg__15NGkP.webp 1080w, /_astro/56.BG23gUg__24Ybhp.webp 1280w, /_astro/56.BG23gUg__Z1iRuTn.webp 1668w, /_astro/56.BG23gUg__1pbQu7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シーズン3：隆盛期&lt;a href=&quot;#シーズン3隆盛期&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;フリーナを早く迎える。&lt;a href=&quot;#フリーナを早く迎える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;映影ランドは21周期目に突入していよいよ大詰めです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/61.vP3cj6LD_hjJ27.webp&quot; srcset=&quot;/_astro/61.vP3cj6LD_Zi01tm.webp 640w, /_astro/61.vP3cj6LD_2pFYjq.webp 750w, /_astro/61.vP3cj6LD_Z1Pyb95.webp 828w, /_astro/61.vP3cj6LD_Z23q7a.webp 1080w, /_astro/61.vP3cj6LD_W73Op.webp 1280w, /_astro/61.vP3cj6LD_Z2qJCmn.webp 1668w, /_astro/61.vP3cj6LD_hjJ27.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;のんびりガーデンはここまで大きくなりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/62.DoEdfrTo_Z19JHnz.webp&quot; srcset=&quot;/_astro/62.DoEdfrTo_ZaOVaR.webp 640w, /_astro/62.DoEdfrTo_2wQ4BU.webp 750w, /_astro/62.DoEdfrTo_Z1Io5PA.webp 828w, /_astro/62.DoEdfrTo_Z1t7RwQ.webp 1080w, /_astro/62.DoEdfrTo_ZtWnAh.webp 1280w, /_astro/62.DoEdfrTo_1cn41R.webp 1668w, /_astro/62.DoEdfrTo_Z19JHnz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;のんびりガーデンはこのレベルまで動物を配置することが出来るようになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/63.DNpduVcK_27SadX.webp&quot; srcset=&quot;/_astro/63.DNpduVcK_Z2mrBLW.webp 640w, /_astro/63.DNpduVcK_leo0P.webp 750w, /_astro/63.DNpduVcK_1abmmg.webp 828w, /_astro/63.DNpduVcK_1Nv04G.webp 1080w, /_astro/63.DNpduVcK_Z2hvDMF.webp 1280w, /_astro/63.DNpduVcK_ZAbcaw.webp 1668w, /_astro/63.DNpduVcK_27SadX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、21周期目のランドの状態はこんな感じでした。ここから今まで上げてきた営業利益の3倍以上の利益を上げて行かなければなりません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/64.DNkEulYs_ZER5F3.webp&quot; srcset=&quot;/_astro/64.DNkEulYs_2idIId.webp 640w, /_astro/64.DNkEulYs_Z4hohV.webp 750w, /_astro/64.DNkEulYs_JEz3u.webp 828w, /_astro/64.DNkEulYs_ZYffOk.webp 1080w, /_astro/64.DNkEulYs_Z4KRK.webp 1280w, /_astro/64.DNkEulYs_1GfFJo.webp 1668w, /_astro/64.DNkEulYs_ZER5F3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのためにも、最後に開放されたフリーナとのやり取りをすぐに終わらせて、名演！映影ベストシーンの顧問として迎え入れる必要がありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/65.DtNCUIQf_Z1yWz2E.webp&quot; srcset=&quot;/_astro/65.DtNCUIQf_Z1uGFsY.webp 640w, /_astro/65.DtNCUIQf_1cYkjN.webp 750w, /_astro/65.DtNCUIQf_21ViFe.webp 828w, /_astro/65.DtNCUIQf_Z1SkJbV.webp 1080w, /_astro/65.DtNCUIQf_ZTaffm.webp 1280w, /_astro/65.DtNCUIQf_MacmM.webp 1668w, /_astro/65.DtNCUIQf_Z1yWz2E.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;フリーナと交流するためにはアトラクションのレベルを上げる必要があったので、とりあえず売上を増やしました。そのためにも、フリーナ無しでもサービスポイントが限界突破するぐらいにスタッフのレベルを上げました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/66.Bb52mY2S_ZidQeS.webp&quot; srcset=&quot;/_astro/66.Bb52mY2S_1NV6VV.webp 640w, /_astro/66.Bb52mY2S_Zxz14d.webp 750w, /_astro/66.Bb52mY2S_gmWhd.webp 828w, /_astro/66.Bb52mY2S_ZBB1oa.webp 1080w, /_astro/66.Bb52mY2S_mysxp.webp 1280w, /_astro/66.Bb52mY2S_23SUay.webp 1668w, /_astro/66.Bb52mY2S_ZidQeS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;フリーナと交流している時のようす。エスコフィエの伝説任務をこなしたら分かるのだが、フリーナと話している時のエスコフィエの声色が明らかに黄色いです。ピンクよりの黄色かもしれない。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/67.BpRtWzKy_1bYl77.webp&quot; srcset=&quot;/_astro/67.BpRtWzKy_ZUe3nP.webp 640w, /_astro/67.BpRtWzKy_1MrWoW.webp 750w, /_astro/67.BpRtWzKy_Z2sMd3y.webp 828w, /_astro/67.BpRtWzKy_RBaWP.webp 1080w, /_astro/67.BpRtWzKy_1QLETp.webp 1280w, /_astro/67.BpRtWzKy_Z1w51hn.webp 1668w, /_astro/67.BpRtWzKy_1bYl77.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;24周期目でフリーナを顧問に迎え入れました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/68.B3RYoTOb_1oYSaU.webp&quot; srcset=&quot;/_astro/68.B3RYoTOb_oeFgI.webp 640w, /_astro/68.B3RYoTOb_Z1XgrJq.webp 750w, /_astro/68.B3RYoTOb_Z19jto0.webp 828w, /_astro/68.B3RYoTOb_15BI1D.webp 1080w, /_astro/68.B3RYoTOb_24McXd.webp 1280w, /_astro/68.B3RYoTOb_Z1j4tdz.webp 1668w, /_astro/68.B3RYoTOb_1oYSaU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;大詰め。&lt;a href=&quot;#大詰め&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;のんびりガーデンは最終的にこのレベルまで動物を配置することが出来るようになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/69.B42phieb_1XAVS3.webp&quot; srcset=&quot;/_astro/69.B42phieb_zmabQ.webp 640w, /_astro/69.B42phieb_Z1M8WOi.webp 750w, /_astro/69.B42phieb_ZXbYsR.webp 828w, /_astro/69.B42phieb_1EdLIL.webp 1080w, /_astro/69.B42phieb_Z2qMR8A.webp 1280w, /_astro/69.B42phieb_ZJspvr.webp 1668w, /_astro/69.B42phieb_1XAVS3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;26周期目に、全ての段階目標（マイルストーン）を達成しました。ここから怒涛のアトラクションのアップグレード祭りです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/70.CORzI6eb_Z1oRMU2.webp&quot; srcset=&quot;/_astro/70.CORzI6eb_8G4cW.webp 640w, /_astro/70.CORzI6eb_Z2dO3Nc.webp 750w, /_astro/70.CORzI6eb_Z1oR5rL.webp 828w, /_astro/70.CORzI6eb_Z1IfX4j.webp 1080w, /_astro/70.CORzI6eb_ZJ5t7J.webp 1280w, /_astro/70.CORzI6eb_WeXup.webp 1668w, /_astro/70.CORzI6eb_Z1oRMU2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カラフル・アドベンチャーのレベルを13から14に上げます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/71.DyyUtSO5_ZGakoV.webp&quot; srcset=&quot;/_astro/71.DyyUtSO5_1j8Ope.webp 640w, /_astro/71.DyyUtSO5_Z13miAU.webp 750w, /_astro/71.DyyUtSO5_Zepkfu.webp 828w, /_astro/71.DyyUtSO5_Z10xuyd.webp 1080w, /_astro/71.DyyUtSO5_Z1n0BD.webp 1280w, /_astro/71.DyyUtSO5_1EWr0v.webp 1668w, /_astro/71.DyyUtSO5_ZGakoV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここで、力もりもりスペアリブローストをエスコフィエに作ってもらいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/72.CQVYD2-A_ZT0Wia.webp&quot; srcset=&quot;/_astro/72.CQVYD2-A_27KuV7.webp 640w, /_astro/72.CQVYD2-A_ZeJC52.webp 750w, /_astro/72.CQVYD2-A_zclgo.webp 828w, /_astro/72.CQVYD2-A_Z1do7rr.webp 1080w, /_astro/72.CQVYD2-A_ZedCuR.webp 1280w, /_astro/72.CQVYD2-A_1s6O7h.webp 1668w, /_astro/72.CQVYD2-A_ZT0Wia.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カラフル・アドベンチャーのレベルを14から15に上げます。料理のお陰でアップグレード費用は10%です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/73.1TGrkPiu_Z1kP8HP.webp&quot; srcset=&quot;/_astro/73.1TGrkPiu_WPY3G.webp 640w, /_astro/73.1TGrkPiu_Z1oE8Ws.webp 750w, /_astro/73.1TGrkPiu_ZzHaB2.webp 828w, /_astro/73.1TGrkPiu_Z1EdiR7.webp 1080w, /_astro/73.1TGrkPiu_ZF2NUx.webp 1280w, /_astro/73.1TGrkPiu_11hCGB.webp 1668w, /_astro/73.1TGrkPiu_Z1kP8HP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;名演！映影ベストシーンのレベルを14から15に上げます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/74.B4dXvVVU_1GYs0.webp&quot; srcset=&quot;/_astro/74.B4dXvVVU_Z1Lyhjp.webp 640w, /_astro/74.B4dXvVVU_V7Itn.webp 750w, /_astro/74.B4dXvVVU_1K4GON.webp 828w, /_astro/74.B4dXvVVU_ZhFaGh.webp 1080w, /_astro/74.B4dXvVVU_Gujfi.webp 1280w, /_astro/74.B4dXvVVU_2nOKRr.webp 1668w, /_astro/74.B4dXvVVU_1GYs0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;のんびりガーデンのレベルも14から15に上げます。あぁあ、これは脳が震えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/75.p-xsd2iY_ZmzULR.webp&quot; srcset=&quot;/_astro/75.p-xsd2iY_Z9hans.webp 640w, /_astro/75.p-xsd2iY_Z2vMioB.webp 750w, /_astro/75.p-xsd2iY_Z1GPk3b.webp 828w, /_astro/75.p-xsd2iY_ZFX5V9.webp 1080w, /_astro/75.p-xsd2iY_ico0q.webp 1280w, /_astro/75.p-xsd2iY_1YwPCz.webp 1668w, /_astro/75.p-xsd2iY_ZmzULR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;エンドルフィンが出ました。気持ちよかったです。
ということで、26周期目に全てのアトラクションのアップグレードが完了しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/76.rxqkphaR_eEV8K.webp&quot; srcset=&quot;/_astro/76.rxqkphaR_Z2qakwn.webp 640w, /_astro/76.rxqkphaR_hvFgp.webp 750w, /_astro/76.rxqkphaR_16sDBP.webp 828w, /_astro/76.rxqkphaR_Z4He0w.webp 1080w, /_astro/76.rxqkphaR_TsfV3.webp 1280w, /_astro/76.rxqkphaR_Z2toqfJ.webp 1668w, /_astro/76.rxqkphaR_eEV8K.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここでさらに、エスコフィエにベスト・メモリー・ブラック・プディングを作ってもらいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/77.-EBjRasC_ZauoPv.webp&quot; srcset=&quot;/_astro/77.-EBjRasC_109m9l.webp 640w, /_astro/77.-EBjRasC_Z1mlKQN.webp 750w, /_astro/77.-EBjRasC_ZxoMvn.webp 828w, /_astro/77.-EBjRasC_ZtRyYM.webp 1080w, /_astro/77.-EBjRasC_uhTVM.webp 1280w, /_astro/77.-EBjRasC_2bCmyV.webp 1668w, /_astro/77.-EBjRasC_ZauoPv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;研修費がゼロになりました。金色スタッフ全員のレベルを最大にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/78.CzptiDh5_ZIDdmV.webp&quot; srcset=&quot;/_astro/78.CzptiDh5_Okh.webp 640w, /_astro/78.CzptiDh5_Z2muiFR.webp 750w, /_astro/78.CzptiDh5_Z1xxkkr.webp 828w, /_astro/78.CzptiDh5_Z131nwd.webp 1080w, /_astro/78.CzptiDh5_Z3PSzD.webp 1280w, /_astro/78.CzptiDh5_1Cty2v.webp 1668w, /_astro/78.CzptiDh5_ZIDdmV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カラフル・アドベンチャーのスタッフは最終的にこんな感じになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/79.6zR8EXnZ_P9zBe.webp&quot; srcset=&quot;/_astro/79.6zR8EXnZ_21b2c2.webp 640w, /_astro/79.6zR8EXnZ_Zlk5O7.webp 750w, /_astro/79.6zR8EXnZ_sBRwj.webp 828w, /_astro/79.6zR8EXnZ_vLprW.webp 1080w, /_astro/79.6zR8EXnZ_1uVTow.webp 1280w, /_astro/79.6zR8EXnZ_Z1RTLMg.webp 1668w, /_astro/79.6zR8EXnZ_P9zBe.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;名演！映影ベストシーンのスタッフは最終的にこんな感じになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/80.4m0pTq08_ZRrm6n.webp&quot; srcset=&quot;/_astro/80.4m0pTq08_tJF40.webp 640w, /_astro/80.4m0pTq08_Z1RKrW9.webp 750w, /_astro/80.4m0pTq08_Z13NtAI.webp 828w, /_astro/80.4m0pTq08_Z1bOwfE.webp 1080w, /_astro/80.4m0pTq08_ZcE2j5.webp 1280w, /_astro/80.4m0pTq08_1tFpj4.webp 1668w, /_astro/80.4m0pTq08_ZRrm6n.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;のんびりガーデンのスタッフは最終的にこんな感じになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/81.BH1ZIqE1_O14NB.webp&quot; srcset=&quot;/_astro/81.BH1ZIqE1_Z1fY2vA.webp 640w, /_astro/81.BH1ZIqE1_1rGXhc.webp 750w, /_astro/81.BH1ZIqE1_2gDVCC.webp 828w, /_astro/81.BH1ZIqE1_uCTEk.webp 1080w, /_astro/81.BH1ZIqE1_1tNoAT.webp 1280w, /_astro/81.BH1ZIqE1_Z1T3hzS.webp 1668w, /_astro/81.BH1ZIqE1_O14NB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ということで、26周期目で全ての段階目標、アトラクション、スタッフのレベルが最大に到達しました！
一応これで終わりだと思います。あとはエンディングを見るだけでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/82.DmJfNqRB_Z18b44X.webp&quot; srcset=&quot;/_astro/82.DmJfNqRB_Z2sRkwO.webp 640w, /_astro/82.DmJfNqRB_eNFfX.webp 750w, /_astro/82.DmJfNqRB_13KDBo.webp 828w, /_astro/82.DmJfNqRB_Z1ryeef.webp 1080w, /_astro/82.DmJfNqRB_ZsnJhF.webp 1280w, /_astro/82.DmJfNqRB_1dVHkt.webp 1668w, /_astro/82.DmJfNqRB_Z18b44X.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本来はもっと早い周期で終わらせられただろうなあ・・・。
まあ、初見だし、やり直し出来ないし、仕方ないことにしておく。&lt;/p&gt;&lt;p&gt;原神は普段の元素反応を使ったアクションが爽快だが、こういったシミュレーションゲームの最初のやり繰りの苦しさから終盤の怒涛のスパートによる爽快感も提供してくれるとは思わなかった。最近、シミュレーションゲームをやっていなかったので、久しぶりにもっとコテコテなものも触りたい気もしました。「シュヴァルマラン映影ランド」ありがとうございました。&lt;/p&gt;&lt;p&gt;ちなみに、シュヴァルマラン映影ランドはたぶん無限？に設営していくことが出来るので、時間を掛ければ全ての段階目標を達成することは可能だと思われます。（50周期目までやったけど終わらなかった。エンディングもあるけど、それを見終わった後も設営を続行することは可能だった。貯金出来るモラは1億でカンストした。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/83.FoNIQuMg_ZQ3svk.webp&quot; srcset=&quot;/_astro/83.FoNIQuMg_1MPxi3.webp 640w, /_astro/83.FoNIQuMg_ZyEzI6.webp 750w, /_astro/83.FoNIQuMg_fhnCk.webp 828w, /_astro/83.FoNIQuMg_Z1aqCEB.webp 1080w, /_astro/83.FoNIQuMg_Zbg8I2.webp 1280w, /_astro/83.FoNIQuMg_1v4iT7.webp 1668w, /_astro/83.FoNIQuMg_ZQ3svk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;営業利益の最高は、たぶん69,700,530モラが限界。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/84.CUSHE7b5_yCCjS.webp&quot; srcset=&quot;/_astro/84.CUSHE7b5_Z2pw3q7.webp 640w, /_astro/84.CUSHE7b5_i9WmF.webp 750w, /_astro/84.CUSHE7b5_176UI6.webp 828w, /_astro/84.CUSHE7b5_ffsaB.webp 1080w, /_astro/84.CUSHE7b5_1epW7b.webp 1280w, /_astro/84.CUSHE7b5_Z29qJ4B.webp 1668w, /_astro/84.CUSHE7b5_yCCjS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/85.DES_NWu7_ZU4oRt.webp&quot; srcset=&quot;/_astro/85.DES_NWu7_Z1joMIK.webp 640w, /_astro/85.DES_NWu7_1ohd42.webp 750w, /_astro/85.DES_NWu7_2debps.webp 828w, /_astro/85.DES_NWu7_Z1erz1K.webp 1080w, /_astro/85.DES_NWu7_Zfh55b.webp 1280w, /_astro/85.DES_NWu7_1r3mwX.webp 1668w, /_astro/85.DES_NWu7_ZU4oRt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原神を快適に&lt;a href=&quot;#原神を快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4jerIor&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 SE+ White 軽量55グラム Pixart PAW3395 SE搭載 最大70時間 無線有線両対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4jerIor&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3YOkakR&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形, 長さ270 x 幅 320 mm&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3YOkakR&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4dovDOa&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO ゲーミングキーボード G-PKB-002LNd テンキーレス リニア 赤軸 静かなタイピング GXスイッチ 有線 ゲーミング メカニカルキーボード 日本語配列 LIGHTSYNC RGB 充電 着脱式ケーブル 国内正規品 ※Amazon限定の壁紙ダウンロード付き&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4dovDOa&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;終盤ほど爽快だね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;キモチイイ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud Scheduler】コンテナを動かすために必要なgcloudコマンドをシェル関数化する</title><link>https://endorphinbath.com/posts/cloud-scheduler-gcloud-commands-shell-functions/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cloud-scheduler-gcloud-commands-shell-functions/</guid><description>Google Cloud上でデプロイされたコンテナを操作するためにシェル関数を構築します。その関数には処理が完了した時やエラー発生時に通知を行ったりヘルプ機能も実装します。</description><pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、また強制実行しなければ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;シェル関数にしてしまおう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Schedulerでコンテナを操作する&lt;a href=&quot;#cloud-schedulerでコンテナを操作する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloud Schedulerは、スケジュールに基づいてジョブを実行するサービスです。特にコンテナと組み合わせると、定期的なバッチ処理やメンテナンス作業を自動化するのに最適です。&lt;/p&gt;&lt;p&gt;例えば以下のようなユースケースがあります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;毎日深夜にデータベースのバックアップを取る&lt;/li&gt;
&lt;li&gt;1時間ごとにデータを集計する&lt;/li&gt;
&lt;li&gt;週次でレポートを生成する&lt;/li&gt;
&lt;li&gt;特定のタイミングでコンテナを起動し、処理が終わったら停止する&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Cloud Schedulerでコンテナを操作する際には、主に以下のgcloudコマンドを使用します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gcloud scheduler jobs resume&lt;/code&gt; - 一時停止中のジョブを再開する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gcloud scheduler jobs run&lt;/code&gt; - ジョブを即時実行する&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gcloud scheduler jobs pause&lt;/code&gt; - 実行中のジョブを一時停止する&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらのコマンドを毎回手動で入力するのは面倒ですし、ミスも発生しやすいです。そこで、これらのコマンドをシェル関数化して、より簡単かつ安全に使えるようにしましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シェル関数化する利点&lt;a href=&quot;#シェル関数化する利点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;gcloudコマンドをシェル関数化することで、以下のような利点があります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;コマンドの簡略化&lt;/strong&gt; - 長いコマンドを短い関数名で呼び出せる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パラメータのバリデーション&lt;/strong&gt; - 必須パラメータの有無をチェックできる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エラーハンドリング&lt;/strong&gt; - コマンド実行時のエラーを適切に処理できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ヘルプ機能の追加&lt;/strong&gt; - &lt;code&gt;help&lt;/code&gt;オプションでコマンドの使い方を表示できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通知機能の統合&lt;/strong&gt; - Discordなどに実行結果を通知できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;複数コマンドの連携&lt;/strong&gt; - 複数のコマンドを組み合わせた処理を1つの関数にまとめられる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;スニペットとしての利用&lt;/strong&gt; - 今後似たような処理を作る時の見本になる&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それでは、実際にシェル関数を実装していきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本的なgcloudコマンドの紹介&lt;a href=&quot;#基本的なgcloudコマンドの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Cloud Schedulerを操作する基本的なgcloudコマンドを見てみましょう。 それぞれのコマンドは以下の公式ページでも確認できます。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/scheduler/jobs/resume&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud scheduler jobs resume | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;ジョブの再開（resume）&lt;a href=&quot;#ジョブの再開resume&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resume&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOB_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=LOCATION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジョブの即時実行（run）&lt;a href=&quot;#ジョブの即時実行run&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOB_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=LOCATION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジョブの一時停止（pause）&lt;a href=&quot;#ジョブの一時停止pause&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOB_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=LOCATION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これらのコマンドは単純ですが、毎回ジョブ名やロケーションを指定する必要があります。また、エラーが発生した場合の処理も自分で書く必要があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シェル関数の実装&lt;a href=&quot;#シェル関数の実装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、これらのコマンドをシェル関数化していきましょう。まずは、ジョブを再開する関数から実装します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ジョブを再開する関数&lt;a href=&quot;#ジョブを再開する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resume_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名をローカル変数に格納&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 初期値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータ解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: パラメータが指定されなかったため、デフォルト設定で実行します。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;usage&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name &amp;lt;JOB_NAME&amp;gt; --location &amp;lt;LOCATION&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--job-name      対象のジョブ名を指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--location      対象のロケーションを指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name my-job --location us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/scheduler/jobs/resume&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$usage&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なパラメータ &apos;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&apos; です。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必須パラメータのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド組み立て&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;gcloud scheduler jobs resume &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行とエラーハンドリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;eval&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: コマンド実行中にエラーが発生しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;再開したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Scheduler job &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; updated successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数では、以下のような工夫をしています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;関数名の取得&lt;/strong&gt; - &lt;code&gt;${FUNCNAME[0]}&lt;/code&gt;で現在の関数名を取得し、エラーメッセージなどに使用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discord通知&lt;/strong&gt; - 処理の開始と結果をDiscordに通知&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パラメータ解析&lt;/strong&gt; - &lt;code&gt;job-name&lt;/code&gt;や&lt;code&gt;location&lt;/code&gt;などのパラメータを解析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ヘルプ機能&lt;/strong&gt; - &lt;code&gt;help&lt;/code&gt;オプションで使い方を表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パラメータのバリデーション&lt;/strong&gt; - 必須パラメータが指定されているかチェック&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コマンドの組み立て&lt;/strong&gt; - パラメータを使ってgcloudコマンドを組み立て&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エラーハンドリング&lt;/strong&gt; - コマンド実行結果をチェックし、実行完了時もしくはエラー発生時に通知&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジョブを即時実行する関数&lt;a href=&quot;#ジョブを即時実行する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、ジョブを即時実行する関数を実装します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名をローカル変数に格納&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを強制実行するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 初期値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータ解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: パラメータが指定されなかったため、デフォルト設定で実行します。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;usage&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name &amp;lt;JOB_NAME&amp;gt; --location &amp;lt;LOCATION&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--job-name      実行対象のジョブ名を指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--location      対象のロケーションを指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name my-job --location us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/scheduler/jobs/run&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$usage&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なパラメータ &apos;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&apos; です。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必須パラメータのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド組み立て&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;gcloud scheduler jobs run &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行とエラーハンドリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;eval&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを強制実行できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: コマンド実行中にエラーが発生しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;強制実行したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを強制実行したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Scheduler job &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; executed successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジョブを一時停止する関数&lt;a href=&quot;#ジョブを一時停止する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最後に、ジョブを一時停止する関数を実装します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pause_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名をローカル変数に格納&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを一時停止するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 初期値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータ解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: パラメータが指定されなかったため、デフォルト設定で実行します。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;usage&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name &amp;lt;JOB_NAME&amp;gt; --location &amp;lt;LOCATION&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--job-name      対象のジョブ名を指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--location      対象のロケーションを指定します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --job-name my-job --location us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/scheduler/jobs/pause&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$usage&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なパラメータ &apos;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&apos; です。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必須パラメータのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド組み立て&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;gcloud scheduler jobs pause &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行とエラーハンドリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;eval&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを一時停止できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: コマンド実行中にエラーが発生しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;一時停止したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを一時停止したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Scheduler job &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; paused successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際の使用例&lt;a href=&quot;#実際の使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数を組み合わせて、実際のユースケースに応用してみましょう。以下は、テスト用コンテナを順番に起動するための関数です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test_container_container_image&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;resume_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_boot_db&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;run_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_boot_db&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pause_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_boot_db&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;run_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_job_1&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;run_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_job_2&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;run_gcloud_scheduler_job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;setup_test_container_container_image_job_3&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;us-central1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この関数では、以下のような処理を行っています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;データベースコンテナを起動するジョブを再開&lt;/li&gt;
&lt;li&gt;データベースコンテナを即時実行&lt;/li&gt;
&lt;li&gt;データベースコンテナのジョブを一時停止（次回のスケジュール実行を防止）&lt;/li&gt;
&lt;li&gt;ジョブ1を実行&lt;/li&gt;
&lt;li&gt;ジョブ2を実行&lt;/li&gt;
&lt;li&gt;ジョブ3を実行&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;このように、複数のジョブを順番に実行することで、コンテナ間の依存関係を考慮した起動シーケンスを実現できます。例えば、データベースコンテナが起動してから他のジョブを実行するといった順序制御が可能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シェル関数のエラーハンドリングとDiscord通知&lt;a href=&quot;#シェル関数のエラーハンドリングとdiscord通知&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数には、エラーハンドリングとDiscord通知の機能が組み込まれています。これにより、ジョブの実行状況をリアルタイムで監視できます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Discord通知の例&lt;a href=&quot;#discord通知の例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;エラー発生時の通知&lt;a href=&quot;#エラー発生時の通知&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: コマンド実行中にエラーが発生しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;成功時の通知&lt;a href=&quot;#成功時の通知&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification_about_gcscheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;再開したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ジョブを再開したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これらの通知機能により、ジョブの実行状況を常に把握できるため、問題が発生した場合にも迅速に対応できます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シェル関数のパラメータ解析&lt;a href=&quot;#シェル関数のパラメータ解析&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数では、パラメータ解析に&lt;code&gt;while&lt;/code&gt;ループと&lt;code&gt;case&lt;/code&gt;文を使用しています。これにより、&lt;code&gt;--job-name&lt;/code&gt;や&lt;code&gt;--location&lt;/code&gt;などのパラメータを柔軟に処理できます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$usage&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--job-name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--location&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location の引数が指定されていません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なパラメータ &apos;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&apos; です。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;また、必須パラメータのチェックも行っています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;job_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --job-name は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --location は必須パラメータです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これにより、パラメータの不足や誤りを早期に検出し、エラーメッセージを表示できます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Cloud Schedulerのジョブを操作するgcloudコマンドをシェル関数化する方法を紹介しました。シェル関数化することで、以下のようなメリットがあります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;コマンドの簡略化&lt;/strong&gt; - 長いコマンドを短い関数名で呼び出せる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パラメータのバリデーション&lt;/strong&gt; - 必須パラメータの有無をチェックできる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エラーハンドリング&lt;/strong&gt; - コマンド実行時のエラーを適切に処理できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ヘルプ機能の追加&lt;/strong&gt; - &lt;code&gt;help&lt;/code&gt;オプションでコマンドの使い方を表示できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通知機能の統合&lt;/strong&gt; - Discordなどに実行結果を通知できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;複数コマンドの連携&lt;/strong&gt; - 複数のコマンドを組み合わせた処理を1つの関数にまとめられる&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの関数を使うことで、Cloud Schedulerを使ったコンテナの操作がより簡単かつ安全になります。特に、複数のコンテナを順番に起動するような複雑なシナリオでも、シンプルな関数呼び出しで実現できます。&lt;/p&gt;&lt;p&gt;また、これらの関数はテンプレートとして利用できるため、他のgcloudコマンドをシェル関数化する際にも参考になるでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;通知も出来て楽だなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他のgcloudコマンドもまとめたいですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ffmpeg、PowerShell】MEGAでWebm動画を再生出来るようにする</title><link>https://endorphinbath.com/posts/ffmpeg-webm-for-mega-with-powershell/</link><guid isPermaLink="true">https://endorphinbath.com/posts/ffmpeg-webm-for-mega-with-powershell/</guid><description>クラウドストレージサービスであるMEGAでWebm拡張子の動画を再生する時に音声コーデックによっては再生できない場合があります。有効な音声コーデックとPowerShellで行うその変換方法を紹介します。</description><pubDate>Sat, 26 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おっ、ffmpegだな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これ便利ですよね。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;MEGAでwebm形式の動画が再生できない問題の解決法&lt;a href=&quot;#megaでwebm形式の動画が再生できない問題の解決法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;MEGAは便利なクラウドストレージサービスですが、webm形式の動画ファイルを再生しようとすると、以下のようなエラーメッセージが表示されることがあります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CHUNK_DEMUXER_ERROR_APPEND_FAILED: Got a block with a timecode before the previous block.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このエラーは、webm形式の動画ファイルのタイムコードに関する問題が原因で発生します。特に、オーディオコーデックに「Opus」を使用している場合に発生しやすいことが分かりました。
そして、簡潔にこの事象の解決法を書くと、それは動画を変換する際に、オーディオコーデックを「Vorbis」として変換することです。まあ、それ以外にも有効なコーデックはあるのかもしれません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;様々なツールでのwebm形式の再生確認&lt;a href=&quot;#様々なツールでのwebm形式の再生確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、webm形式の動画が他のツールで正常に再生できるかどうかを確認しました。以下のツールでテストを行いました。（2025-04-26時点の結果です。）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Photo ✅&lt;/li&gt;
&lt;li&gt;Google Drive ✅&lt;/li&gt;
&lt;li&gt;Android ✅&lt;/li&gt;
&lt;li&gt;ゆっくりムービーメーカー4 ❌（一部再生できない）&lt;/li&gt;
&lt;li&gt;Nextcloud ❓（未確認）&lt;/li&gt;
&lt;li&gt;MEGA ❌（一部再生できない）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;また、Luma Dream Machineで生成した動画を変換したwebm形式の動画はMEGAでも問題なく再生できました。しかし、Androidで録画した動画やゆっくりムービーメーカーで出力した動画を変換したwebm形式の動画は再生できませんでした。これは、Luma Dream Machineで生成した動画には音声データが存在せず、音声コーデックもまた存在しないためです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;MEGAで再生できるwebm形式に変換する方法&lt;a href=&quot;#megaで再生できるwebm形式に変換する方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;テストの結果、MEGAでwebm形式の動画を再生できない主な原因は、オーディオコーデックにあることが判明しました。具体的には、Opusコーデックを使用している場合に問題が発生し、Vorbisコーデックに変更することで解決できました。
以下に、MEGAで再生可能なwebm形式に変換するためのffmpegコマンドを紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;VP9ビデオコーデック + Vorbisオーディオコーデック（推奨）&lt;a href=&quot;#vp9ビデオコーデック--vorbisオーディオコーデック推奨&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このコマンドでは、ビデオコーデックにVP9、オーディオコーデックにVorbisを使用しています。ビデオビットレートは7Mbps、オーディオビットレートは128kbpsに設定しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;7M&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v libvpx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;vp9 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;output.webm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AV1ビデオコーデック + Vorbisオーディオコーデック&lt;a href=&quot;#av1ビデオコーデック--vorbisオーディオコーデック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;AV1コーデックはVP9よりも高い圧縮効率を持ちますが、エンコード時間が長くなる傾向があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;7M&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v libaom&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;av1 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;output.webm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GPUハードウェアエンコーディングを使用する場合（NVIDIA GPUの場合）&lt;a href=&quot;#gpuハードウェアエンコーディングを使用する場合nvidia-gpuの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NVIDIA GPUを使用している場合は、ハードウェアエンコーディングを利用することでエンコード時間を大幅に短縮できます。
ただし、ハードウェアエンコーディングは品質の低下とのトレードオフになる場合があります。また、VP9コーデックのハードウェアエンコーディングは現時点では十分にサポートされていないようです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;7M&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v av1_nvenc &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;output.webm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動画のビットレートを確認する方法&lt;a href=&quot;#動画のビットレートを確認する方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;VLC media playerでビットレートを確認する方法&lt;a href=&quot;#vlc-media-playerでビットレートを確認する方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;動画を変換する前に、動画のビットレートを確認することが重要です。確認すれば、動画をどれぐらいの品質へと圧縮するかどうかを決めるための判断材料になります。例えば、VLC media playerを使えば簡単に確認できます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;メニューバーから「ツール」→「メディア情報」を選択するか、キーボードショートカットの Ctrl+I を押します&lt;/li&gt;
&lt;li&gt;表示されたウィンドウの上部にある「統計情報」タブをクリックします&lt;/li&gt;
&lt;li&gt;動画を少しだけ再生します&lt;/li&gt;
&lt;li&gt;「入力/出力ビットレート」や「データレート」といった項目からビットレートを確認できます&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ffprobeでビットレートを確認する方法&lt;a href=&quot;#ffprobeでビットレートを確認する方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ffmpegに付属している&lt;code&gt;ffprobe&lt;/code&gt;コマンドを使用すると、より詳細な情報を取得できます。このコマンドを実行すると、動画ストリームのビットレートが表示されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffprobe &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;v error &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;select_streams v:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;show_entries stream&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bit_rate &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;of &lt;/span&gt;&lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;noprint_wrappers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;:nokey&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; input.webm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;圧縮率を上げる方法&lt;a href=&quot;#圧縮率を上げる方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;動画ファイルのサイズを小さくするために、圧縮率を上げる方法を検討しました。FFmpegでは、主に以下の2つの方法があります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 定数品質モード（CRF: Constant Rate Factor）&lt;a href=&quot;#1-定数品質モードcrf-constant-rate-factor&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;定数品質モードでは、ビットレートを直接指定するのではなく、品質レベルを指定します。これにより、シーンの複雑さに応じて適切なビットレートが自動的に選択されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i input.mp4 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v libvpx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;vp9 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;crf &lt;/span&gt;&lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k output.webm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;CRFの値は0〜63の範囲で指定でき、値が小さいほど高品質（低圧縮）、値が大きいほど低品質（高圧縮）になります。一般的には、20〜35の範囲が適切です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 固定ビットレートモード（CBR: Constant Bit Rate）&lt;a href=&quot;#2-固定ビットレートモードcbr-constant-bit-rate&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;固定ビットレートモードでは、ビットレートを直接指定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i input.mp4 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v libvpx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;vp9 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2M&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k output.webm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;テストの結果、定数品質モードの方が効率的に圧縮でき、かつ品質を維持しやすいことが分かりました。ただし、固定ビットレートモードでは、変換処理後にファイルサイズが増えることもあるため、用途に応じて適切な方法を選択する必要があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゆっくりムービーメーカー4との互換性に関する注意点&lt;a href=&quot;#ゆっくりムービーメーカー4との互換性に関する注意点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ゆっくりムービーメーカー4で音声を出力する際に問題が発生することがあります。Vorbisコーデックで圧縮された音声ファイルを使用すると、ゆっくりムービーメーカー4で音声を出力できなくなる場合があります。
そして、ゆっくりムービーメーカーの制作者によると、リニアPCM（LPCM）で音声データを扱うことが推奨されています。Vorbisのような非可逆圧縮コーデックを映像制作の音源として利用するのは避けた方が良いでしょう。&lt;/p&gt;&lt;p&gt;したがって、以下のような使い分けが推奨されます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;映像制作に使用する予定の動画ファイル → Opusコーデックを使用（ただしMEGAでは再生できない可能性あり）&lt;/li&gt;
&lt;li&gt;単純に視聴するための動画ファイル → Vorbisコーデックを使用（MEGAでは再生可能だが、ゆっくりムービーメーカーでは音声が再生されない）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;MEGAでwebm形式の動画を再生できない問題は、主にオーディオコーデックが原因であることが分かりました。Opusコーデックを使用している場合に問題が発生し、Vorbisコーデックに変更することで解決できます。&lt;/p&gt;&lt;p&gt;ffmpegを使用して、以下のコマンドでMEGAで再生可能なwebm形式に変換できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:v &lt;/span&gt;&lt;/span&gt;&lt;span&gt;7M&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:a libvorbis &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;b:a 128k &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;c:v libvpx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;vp9 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;output.webm&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ただし、Vorbisコーデックを使用した動画ファイルは、ゆっくりムービーメーカー4などの映像制作ソフトとの互換性に問題がある場合があるため、用途に応じて適切なコーデックを選択することが重要です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;色んなmp4があるんだなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;奥が深いです。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Cloud】GitHub Actionsで認証するためのシェル関数を作る</title><link>https://endorphinbath.com/posts/gcp-shell-functions-for-github-actions-authentication/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gcp-shell-functions-for-github-actions-authentication/</guid><description>Google Cloud上のリソースを使ってGitHub ActionsでCI/CDするためにシェル関数を構築します。その関数ではサービスアカウントにWorkload Identity連携をして処理の途中に通知を行ったりもします。</description><pubDate>Fri, 25 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この認証手順、長すぎじゃね！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;関数にしてしまおう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Cloudを使ったCI/CD認証方法の選択肢&lt;a href=&quot;#google-cloudを使ったcicd認証方法の選択肢&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloudのリソースに対してCI/CDパイプラインから操作を行う場合、認証方法として主に2つの選択肢があります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;サービスアカウントのJSON秘密鍵を使用する方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;簡単に設定できる&lt;/li&gt;
&lt;li&gt;キーをダウンロードしてGitHub Secretsに保存&lt;/li&gt;
&lt;li&gt;セキュリティリスクが高い（キーが漏洩する可能性）&lt;/li&gt;
&lt;li&gt;定期的なキーのローテーションが必要&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workload Identity連携を使用する方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;JSONキーを使用しない&lt;/li&gt;
&lt;li&gt;一時的な認証情報を使用するため安全&lt;/li&gt;
&lt;li&gt;キーのローテーションが不要&lt;/li&gt;
&lt;li&gt;設定が少し複雑&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;今回は2つ目の「Workload Identity連携」を使って、GitHub Actionsから安全にGoogle Cloudリソースにアクセスするための設定方法を解説します。さらに、この設定を簡単に行えるようにシェル関数化します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Workload Identity連携とは？&lt;a href=&quot;#workload-identity連携とは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Workload Identity連携は、外部IDプロバイダ（GitHub Actionsなど）からの一時的な認証情報を使用して、Google Cloudリソースにアクセスする仕組みです。これにより、長期間有効なサービスアカウントキーを使用せずに、安全に認証を行うことができます。&lt;/p&gt;&lt;p&gt;主なメリットは以下の通りです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;サービスアカウントキーを作成・管理する必要がない&lt;/li&gt;
&lt;li&gt;短期間だけ有効な認証情報を使用するため、セキュリティリスクが低減&lt;/li&gt;
&lt;li&gt;キーのローテーションが不要&lt;/li&gt;
&lt;li&gt;きめ細かいアクセス制御が可能&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Workload Identity連携の仕組み&lt;a href=&quot;#workload-identity連携の仕組み&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Workload Identity連携の基本的な仕組みは以下の通りです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;GitHub Actionsのワークフローが実行されると、GitHubはOIDCトークンを発行&lt;/li&gt;
&lt;li&gt;このOIDCトークンをGoogle Cloudに送信&lt;/li&gt;
&lt;li&gt;Google CloudはOIDCトークンを検証し、一時的な認証情報を発行&lt;/li&gt;
&lt;li&gt;この一時的な認証情報を使用してGoogle Cloudリソースにアクセス&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;この仕組みを実現するために、Google Cloud側で「Workload Identityプール」と「プロバイダ」を設定し、GitHub側でワークフローを設定する必要があります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Workload Identity連携を設定するためのシェル関数&lt;a href=&quot;#workload-identity連携を設定するためのシェル関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Workload Identity連携の設定は複数のステップがあり、少し複雑です。そこで、これらの設定を簡単に行えるようにシェル関数化しました。&lt;/p&gt;&lt;p&gt;以下の4つの主要な関数を作成しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;create_workload_identity_pool&lt;/code&gt; - Workload Identityプールを作成する関数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_oidc_workload_identity_pool_provider&lt;/code&gt; - OIDCプロバイダを作成する関数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_oidc_workload_identity_pool_provider_for_github_actions&lt;/code&gt; - GitHub Actions専用のOIDCプロバイダを作成する関数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add_workload_identity_binding_to_service_account_on_gcloud&lt;/code&gt; - サービスアカウントにWorkload Identityバインディングを追加する関数&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それぞれの関数について詳しく見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Workload Identityプールを作成する関数&lt;a href=&quot;#workload-identityプールを作成する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、Workload Identityプールを作成する関数です。これはGoogle Cloud上で外部IDプロバイダからの認証情報を受け付けるための「プール」を作成します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_workload_identity_pool&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Workload Identity Poolを作成するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;WORKLOAD_IDENTITY_POOL&amp;gt; &amp;lt;PROJECT_ID&amp;gt; [--location=LOCATION] [--description=DESCRIPTION]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;引数:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  WORKLOAD_IDENTITY_POOL  作成するワークロードアイデンティティプールの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROJECT_ID              Google CloudプロジェクトのプロジェクトID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --location              省略可能: ロケーション (デフォルト: global)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --description           省略可能: プールの説明&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-pool my-project-id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-pool my-project-id --location=global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-pool my-project-id --description=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;My&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pool&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/workload-identity-pools/create&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータのバリデーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: WORKLOAD_IDENTITY_POOL が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROJECT_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# オプションの解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;--description=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なオプション: &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 実行するコマンドを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: gcloud iam workload-identity-pools create &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --project=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= Workload Identity Pools ============================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workload-identity-pools&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ワークロードアイデンティティプールの作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Workload Identity Poolを作成できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ワークロードアイデンティティプール &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; をプロジェクト &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; のロケーション &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; に正常に作成しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Workload Identity Poolを作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は以下のような特徴があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-help&lt;/code&gt;オプションでヘルプを表示&lt;/li&gt;
&lt;li&gt;必須パラメータのバリデーション&lt;/li&gt;
&lt;li&gt;オプションパラメータの解析&lt;/li&gt;
&lt;li&gt;実行コマンドの表示&lt;/li&gt;
&lt;li&gt;エラーハンドリング&lt;/li&gt;
&lt;li&gt;Discord通知機能（オプション）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;使用例としては以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_workload_identity_pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Pool for GitHub Actions&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;OIDCプロバイダを作成する関数&lt;a href=&quot;#oidcプロバイダを作成する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、OIDCプロバイダを作成する関数です。これは、特定のOIDCプロバイダ（例：GitHub）からの認証情報を受け付けるための設定を行います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_oidc_workload_identity_pool_provider&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;OIDC Workload Identity Pool Providerを作成するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;PROVIDER&amp;gt; &amp;lt;PROJECT_ID&amp;gt; &amp;lt;WORKLOAD_IDENTITY_POOL&amp;gt; &amp;lt;ISSUER_URI&amp;gt; &amp;lt;ATTRIBUTE_MAPPING&amp;gt; &amp;lt;ATTRIBUTE_CONDITION&amp;gt; [--location=LOCATION]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;引数:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROVIDER                作成するプロバイダーの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROJECT_ID              Google CloudプロジェクトのプロジェクトID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  WORKLOAD_IDENTITY_POOL  プロバイダーを作成するワークロードアイデンティティプールの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ISSUER_URI              OIDCプロバイダーの発行者URI&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ATTRIBUTE_MAPPING       属性マッピング (形式: KEY=VALUE,...)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ATTRIBUTE_CONDITION     属性条件&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --location              省略可能: ロケーション (デフォルト: global)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-provider my-project-id my-pool &amp;lt;https://accounts.google.com&amp;gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;google.subject=assertion.sub&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;assertion.sub.startsWith&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;abc&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-provider my-project-id my-pool &amp;lt;https://accounts.google.com&amp;gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;google.subject=assertion.sub,google.groups=assertion.groups&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;assertion.aud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;my-audience&apos;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/workload-identity-pools/providers/create-oidc&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータのバリデーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROVIDER が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROJECT_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: WORKLOAD_IDENTITY_POOL が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ISSUER_URI が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ATTRIBUTE_MAPPING が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$6&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ATTRIBUTE_CONDITION が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issuer_uri&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$6&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# オプションの解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なオプション: &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 実行するコマンドを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: gcloud iam workload-identity-pools providers create-oidc &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --project=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --workload-identity-pool=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --issuer-uri=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;issuer_uri&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --attribute-mapping=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot; --attribute-condition=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= Workload Identity Pool Providers ==================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workload-identity-pools&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;providers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create-oidc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--workload-identity-pool=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--issuer-uri=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;issuer_uri&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--attribute-mapping=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--attribute-condition=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: OIDCプロバイダー &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; の作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;OIDC Workload Identity Pool Providerを作成できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: OIDCプロバイダー &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; をワークロードアイデンティティプール &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; に正常に作成しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;OIDC Workload Identity Pool Providerを作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は汎用的なOIDCプロバイダを作成するためのものです。GitHub Actions以外のOIDCプロバイダ（例：GitLab、Azure DevOps）を使用する場合にも利用できます。使用例としては以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_oidc_workload_identity_pool_provider&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gitlab-provider&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;https://gitlab.com&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;google.subject=assertion.sub&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;assertion.namespace_id==&apos;12345&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GitHub Actions専用のOIDCプロバイダを作成する関数&lt;a href=&quot;#github-actions専用のoidcプロバイダを作成する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最後に、GitHub Actions専用のOIDCプロバイダを作成する関数です。これは、前述の汎用関数をラップして、GitHub Actions特有の設定を簡単に行えるようにしたものです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_oidc_workload_identity_pool_provider_for_github_actions&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GitHub Actions用のOIDC Workload Identity Pool Providerを作成するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;PROVIDER_ID&amp;gt; &amp;lt;PROJECT_ID&amp;gt; &amp;lt;POOL_ID&amp;gt; &amp;lt;REPOSITORY_OWNER&amp;gt; [--location=LOCATION]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;引数:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROVIDER_ID       作成するプロバイダーのID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROJECT_ID        Google CloudプロジェクトのプロジェクトID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  POOL_ID           プロバイダーを作成するワークロードアイデンティティプールのID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  REPOSITORY_OWNER  GitHubリポジトリのオーナー名（組織名またはユーザー名）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --location        省略可能: ロケーション (デフォルト: global)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; github-provider my-project-id my-pool my-org&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; github-provider my-project-id my-pool my-org --location=global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/workload-identity-pools/providers/create-oidc&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータのバリデーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROVIDER_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROJECT_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: POOL_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: REPOSITORY_OWNER が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repo_owner&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# オプションの解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なオプション: &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 属性マッピングと条件の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;google.subject=assertion.sub,attribute.repository=assertion.repository&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;assertion.repository_owner==&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;repo_owner&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 実行するコマンドを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: gcloud iam workload-identity-pools providers create-oidc &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --project=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --location=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --workload-identity-pool=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --issuer-uri=https://token.actions.githubusercontent.com/ --attribute-mapping=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot; --attribute-condition=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= Workload Identity Pool Providers ==================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workload-identity-pools&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;providers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create-oidc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--workload-identity-pool=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--issuer-uri=&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;https://token.actions.githubusercontent.com/&amp;gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--attribute-mapping=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_mapping&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--attribute-condition=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;attribute_condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: GitHub Actions用のOIDCプロバイダー &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; の作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GitHub Actions用のOIDC Workload Identity Pool Providerを作成できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# プロバイダー名を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provider_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;projects/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/locations/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/workloadIdentityPools/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/providers/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: GitHub Actions用のOIDCプロバイダー &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; を正常に作成しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GitHub Actions用のOIDC Workload Identity Pool Providerを作成したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# GitHub Actions用のYAML情報を表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 以下はGitHub Actions用のYAMLファイルに記述するための設定例です:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------------------------------------------------------&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;env:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_PROJECT_NUMBER: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROJECT_NUMBER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;} # プロジェクト番号を設定してください&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_POOL_ID: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_PROVIDER_ID: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_SERVICE_ACCOUNT_EMAIL: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_SERVICE_ACCOUNT_EMAIL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;} # サービスアカウントのメールアドレスを設定してください&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;jobs:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  test:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    runs-on: ubuntu-latest&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    steps:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;      - id: &apos;gcloud_auth&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        name: &apos;Authenticate to Google Cloud&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        uses: &apos;google-github-actions/auth@v2&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        with:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          create_credentials_file: true&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          workload_identity_provider: &apos;projects/&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROJECT_NUMBER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}/locations/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/workloadIdentityPools/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/providers/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          service_account: &apos;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_SERVICE_ACCOUNT_EMAIL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------------------------------------------------------&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: GitHub Secretsにプロジェクト番号とサービスアカウントのメールアドレスを設定してください。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 次に、サービスアカウントにリポジトリからのアクセスを許可するためにIAMポリシーバインディングを追加する必要があります。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は、GitHub Actions専用の設定を簡単に行えるようにしたものです。特に以下の点が便利です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;GitHub Actions特有の設定（発行者URI、属性マッピング）が自動的に設定される&lt;/li&gt;
&lt;li&gt;リポジトリオーナー（組織名またはユーザー名）だけを指定すれば、適切な属性条件が設定される&lt;/li&gt;
&lt;li&gt;設定後、GitHub Actionsのワークフロー設定例が表示される&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;使用例としては以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_oidc_workload_identity_pool_provider_for_github_actions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-provider&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-organization&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サービスアカウントにWorkload Identityバインディングを追加する関数&lt;a href=&quot;#サービスアカウントにworkload-identityバインディングを追加する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GitHub Actionsからサービスアカウントにアクセスできるようにするために、サービスアカウントに&lt;code&gt;roles/iam.workloadIdentityUser&lt;/code&gt;ロールを付与する必要があります。以下は、この設定を簡単に行うための関数です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_workload_identity_binding_to_service_account_on_gcloud&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスアカウントにWorkload Identityバインディングを追加するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;SERVICE_ACCOUNT_EMAIL&amp;gt; &amp;lt;PROJECT_NUMBER&amp;gt; &amp;lt;POOL_ID&amp;gt; &amp;lt;REPOSITORY_OWNER&amp;gt; &amp;lt;REPOSITORY_NAME&amp;gt; [--provider-id=PROVIDER_ID] [--condition=KEY=VALUE,...] [--condition-from-file=PATH_TO_FILE]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;引数:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  SERVICE_ACCOUNT_EMAIL  IAMポリシーバインディングを追加するサービスアカウントのメールアドレス&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROJECT_NUMBER         プロジェクト番号&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  POOL_ID                ワークロードアイデンティティプールのID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  REPOSITORY_OWNER       リポジトリのオーナー&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  REPOSITORY_NAME        リポジトリの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --provider-id          省略可能: プロバイダーID (GitHub Actions用YAMLの生成に使用)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --condition            省略可能: IAMの条件 (形式: KEY=VALUE,...)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  --condition-from-file  省略可能: 条件を含むファイルへのパス&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-sa@my-project.iam.gserviceaccount.com 123456789012 my-pool my-org my-repo&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-sa@my-project.iam.gserviceaccount.com 123456789012 my-pool my-org my-repo --provider-id=github&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-sa@my-project.iam.gserviceaccount.com 123456789012 my-pool my-org my-repo --condition=&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;title=test,expression=request.time&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;2023-01-01T00:00:00Z&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: [INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/add-iam-policy-binding&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータのバリデーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: SERVICE_ACCOUNT_EMAIL が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: PROJECT_NUMBER が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: POOL_ID が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: REPOSITORY_OWNER が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: REPOSITORY_NAME が指定されていません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service_account_email&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project_number&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repo_owner&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repo_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condition_from_file&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# principalSet の生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;principal_set&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;principalSet://iam.googleapis.com/projects/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_number&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/locations/global/workloadIdentityPools/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;pool_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/attribute.repository/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;repo_owner&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;repo_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# オプションの解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--provider-id=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--condition=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;--condition=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--condition-from-file=&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;condition_from_file&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;--condition-from-file=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;#*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 不明なオプション: &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法を確認するには --help を使用してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# condition と condition-from-file の両方が指定されていないか確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition_from_file&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: --condition と --condition-from-file は同時に指定できません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 実行するコマンドを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 実行するコマンド: gcloud iam service-accounts add-iam-policy-binding &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account_email&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --member=&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;principal_set&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; --role=roles/iam.workloadIdentityUser &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition_from_file&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# コマンド実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= IAM Policy Binding =================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-iam-policy-binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account_email&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--member=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;principal_set&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;--role=&lt;/span&gt;&lt;span&gt;&quot;roles/iam.workloadIdentityUser&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;condition_from_file&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: サービスアカウント &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account_email&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; へのワークロードアイデンティティバインディング追加に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスアカウントにWorkload Identityバインディングを追加できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: サービスアカウント &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account_email&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; に &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;repo_owner&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;repo_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; リポジトリからのアクセスを正常に設定しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;IAMポリシーバインディングを追加したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスアカウントにWorkload Identityバインディングを追加したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# GitHub Actions用のYAML情報を表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 以下はGitHub Actions用のYAMLファイルに記述するための設定例です:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------------------------------------------------------&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;env:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_PROJECT_NUMBER: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROJECT_NUMBER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_POOL_ID: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_POOL_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;provider_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_PROVIDER_ID: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROVIDER_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_PROVIDER_ID: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROVIDER_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;} # プロバイダーIDを設定してください&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  GCLOUD_SERVICE_ACCOUNT_EMAIL: &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_SERVICE_ACCOUNT_EMAIL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;jobs:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  test:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    runs-on: ubuntu-latest&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    steps:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;      - id: &apos;gcloud_auth&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        name: &apos;Authenticate to Google Cloud&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        uses: &apos;google-github-actions/auth@v2&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        with:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          create_credentials_file: true&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          workload_identity_provider: &apos;projects/&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROJECT_NUMBER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}/locations/global/workloadIdentityPools/&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_POOL_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}/providers/&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_PROVIDER_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;          service_account: &apos;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GCLOUD_SERVICE_ACCOUNT_EMAIL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------------------------------------------------------&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: GitHub SecretsにプロジェクトID、プールID、プロバイダーID、サービスアカウントのメールアドレスを設定してください。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は、サービスアカウントにWorkload Identityバインディングを追加するための関数です。特に以下の点が便利です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;リポジトリオーナーとリポジトリ名を指定するだけで、適切なprincipalSetが自動的に生成される&lt;/li&gt;
&lt;li&gt;条件付きのIAMポリシーバインディングも設定可能&lt;/li&gt;
&lt;li&gt;設定後、GitHub Actionsのワークフロー設定例が表示される&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;使用例としては以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;add_workload_identity_binding_to_service_account_on_gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-actions-sa@my-project-id.iam.gserviceaccount.com&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;123456789012&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-organization&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-repository&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--provider-id=github-provider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サービスアカウントを作成する関数&lt;a href=&quot;#サービスアカウントを作成する関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Workload Identity連携を使用するには、サービスアカウントも必要です。以下は、サービスアカウントを作成し、適切なロールを付与する関数です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_gcloud_service_account&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスアカウントを作成するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Check for help parameter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: create_gcloud_service_account &amp;lt;SERVICE_ACCOUNT_ID&amp;gt; &amp;lt;PROJECT_ID&amp;gt; &amp;lt;ROLE&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Example: create_gcloud_service_account my-service-account my-project-id roles/storage.admin&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: [INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/create&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: [INFO] Detail of gcloud is here: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/iam/service-accounts/add-iam-policy-binding&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Validate number of parameters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Invalid number of arguments. Use --help for usage.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROLE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Create the service account&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Creating service account &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスアカウントを作成できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to create service account &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Bind the IAM policy with the provided role&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Adding IAM policy binding for project &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; with role &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ROLE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-iam-policy-binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--member=&lt;/span&gt;&lt;span&gt;&quot;serviceAccount:&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.iam.gserviceaccount.com&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--role=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ROLE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;IAMポリシーをバインドできなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to add IAM policy binding for project &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gciam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;バインドしたよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;IAMポリシーをバインドしたよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Service account &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; created and policy binding added successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は、サービスアカウントを作成し、指定したロールをプロジェクトに対して付与します。使用例としては以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gcloud_service_account&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-actions-sa&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;roles/storage.admin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際の使用手順&lt;a href=&quot;#実際の使用手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数を使って、GitHub ActionsからGoogle Cloudリソースにアクセスするための設定を行う手順を説明します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. シェル関数を読み込む&lt;a href=&quot;#1-シェル関数を読み込む&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、上記のシェル関数をファイルに保存し、読み込みます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数を保存したファイルを読み込む&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./gcloud_workload_identity.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. Workload Identityプールを作成する&lt;a href=&quot;#2-workload-identityプールを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_workload_identity_pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Pool for GitHub Actions&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. GitHub Actions用のOIDCプロバイダを作成する&lt;a href=&quot;#3-github-actions用のoidcプロバイダを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_oidc_workload_identity_pool_provider_for_github_actions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-provider&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-organization&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. サービスアカウントを作成する&lt;a href=&quot;#4-サービスアカウントを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gcloud_service_account&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github-actions-sa&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;roles/storage.admin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. サービスアカウントにWorkload Identity連携のロールを付与する&lt;a href=&quot;#5-サービスアカウントにworkload-identity連携のロールを付与する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GitHub Actionsからサービスアカウントにアクセスできるようにするために、サービスアカウントに&lt;code&gt;roles/iam.workloadIdentityUser&lt;/code&gt;ロールを付与します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# プロジェクト番号を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PROJECT_NUMBER&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--format=&lt;/span&gt;&lt;span&gt;&quot;value(projectNumber)&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスアカウントにWorkload Identity Userロールを付与&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;add_workload_identity_binding_to_service_account_on_gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;github-actions-sa@my-project-id.iam.gserviceaccount.com&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_NUMBER&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;github-pool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;my-organization&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;my-repository&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--provider-id=github-provider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この関数を使用することで、複雑なprincipalSetの構築を自動化し、エラーを防ぐことができます。また、GitHub Actions用のYAML設定例も自動的に表示されます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. GitHub Actionsのワークフローを設定する&lt;a href=&quot;#6-github-actionsのワークフローを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最後に、GitHub Actionsのワークフローファイル（&lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt;など）に認証設定を追加します。以下がワークフローのサンプルです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;contains(github.event.head_commit.message, &apos;[skip ci]&apos;) == false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Set up Golang&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-go@v5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;go-version-file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;go.mod&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;gcloud_auth&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Authenticate to Google Cloud&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;google-github-actions/auth@v2&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;create_credentials_file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;workload_identity_provider&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;projects/${{ env.GCLOUD_PROJECT_NUMBER }}/locations/global/workloadIdentityPools/${{ env.GCLOUD_POOL_ID }}/providers/${{ env.GCLOUD_PROVIDER_ID }}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;service_account&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;${{ env.GCLOUD_SERVICE_ACCOUNT_EMAIL }}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Set up Cloud SDK&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;google-github-actions/setup-gcloud@v2&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Use gcloud CLI&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;gcloud info&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この設定により、GitHub Actionsのワークフローが実行されると、以下のような流れで認証が行われます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;GitHub Actionsが実行環境のOIDCトークンを取得&lt;/li&gt;
&lt;li&gt;&lt;code&gt;google-github-actions/auth&lt;/code&gt;アクションがOIDCトークンをGoogle Cloudに送信&lt;/li&gt;
&lt;li&gt;Google CloudがOIDCトークンを検証し、一時的な認証情報を発行&lt;/li&gt;
&lt;li&gt;一時的な認証情報を使用してGoogle Cloudリソースにアクセス&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際に認証出来るとログで確認出来る&lt;a href=&quot;#実際に認証出来るとログで確認出来る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際に認証出来ると、GitHub Actionsの実行ログで確認することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1035&quot; height=&quot;258&quot; src=&quot;/_astro/11.BwA_Dxp__ZvJOPc.webp&quot; srcset=&quot;/_astro/11.BwA_Dxp__Z19IVOP.webp 640w, /_astro/11.BwA_Dxp__YjKVJ.webp 750w, /_astro/11.BwA_Dxp__Z2Pxf4.webp 828w, /_astro/11.BwA_Dxp__ZvJOPc.webp 1035w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;セキュリティ上の注意点&lt;a href=&quot;#セキュリティ上の注意点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Workload Identity連携を使用する際には、以下の点に注意します。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;属性条件の設定&lt;/strong&gt;：必ず適切な属性条件を設定して、特定のリポジトリやブランチからのアクセスのみを許可するようにします。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最小権限の原則&lt;/strong&gt;：サービスアカウントには必要最小限の権限のみを付与します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;監査ログの確認&lt;/strong&gt;：定期的に監査ログを確認して、不審なアクセスがないか確認します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定期的な見直し&lt;/strong&gt;：定期的に設定を見直し、不要なアクセス権限を削除します。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、GitHub ActionsからGoogle Cloudリソースにアクセスするための安全な方法として、Workload Identity連携を使用する方法を紹介しました。また、この設定を簡単に行えるようにするためのシェル関数も提供しました。&lt;/p&gt;&lt;p&gt;Workload Identity連携を使用することで、以下のメリットが得られます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;サービスアカウントキーを使用しないため、セキュリティリスクが低減&lt;/li&gt;
&lt;li&gt;キーのローテーションが不要&lt;/li&gt;
&lt;li&gt;きめ細かいアクセス制御が可能&lt;/li&gt;
&lt;li&gt;監査ログによる追跡が容易&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらのシェル関数を使用して、簡単かつ安全にCI/CDパイプラインを構築出来そうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;だいぶ手数が減った気がする&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作るの大変だった・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud Run】コンテナを稼働させるまでに必要なgcloudコマンドをシェル関数化する</title><link>https://endorphinbath.com/posts/cloud-run-gcloud-commands-shell-functions/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cloud-run-gcloud-commands-shell-functions/</guid><description>Google Cloud上でコンテナをデプロイするためにシェル関数を構築します。その関数には処理が完了した時やエラー発生時に通知を行ったりヘルプ機能も実装します。</description><pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、またデプロイし直さなければ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;関数にしてしまおう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Run用のgcloudコマンドをまとめる&lt;a href=&quot;#cloud-run用のgcloudコマンドをまとめる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloudのサービスの一つであるCloud Runは、コンテナをサーバーレスで実行できる便利なサービスです。しかし、コンテナのデプロイや環境変数の設定など、繰り返し行う操作が多く、毎回長いgcloudコマンドを入力するのは面倒です。&lt;/p&gt;&lt;p&gt;そこで今回は、よく使うgcloudコマンドをシェル関数化して、作業を効率化する方法を紹介します。具体的には以下の2つの関数を実装します。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;deploy_cloud_run_container&lt;/strong&gt; - Cloud Runにコンテナをデプロイするための関数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;update_env_for_cloud_run_service&lt;/strong&gt; - Cloud Runサービスの環境変数を更新するための関数&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの関数を一度作ってしまえば、長いgcloudコマンドを作り直す必要がなくなり、引数のバリデーションやエラーハンドリングも自動化できます。さらに、Discordへの通知機能も組み込むことで、長時間掛かるデプロイ作業の完了を通知してくれます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前提条件&lt;a href=&quot;#前提条件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事の内容を実践するには、以下の環境が必要です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Cloud SDKがインストールされていること&lt;/li&gt;
&lt;li&gt;Google Cloudアカウントとプロジェクトが設定済みであること&lt;/li&gt;
&lt;li&gt;bashまたはzshなどのシェル環境&lt;/li&gt;
&lt;li&gt;（オプション）Discordの通知を受け取るための設定&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Runコンテナをデプロイするシェル関数&lt;a href=&quot;#cloud-runコンテナをデプロイするシェル関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Cloud Runにコンテナをデプロイするための関数&lt;code&gt;deploy_cloud_run_container&lt;/code&gt;を見ていきましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy_cloud_run_container&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;コンテナをデプロイするよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; IMAGE_NAME PROJECT_ID [REGION]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  IMAGE_NAME : デプロイする Cloud Run サービスの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  PROJECT_ID : 対象の GCP プロジェクトID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  REGION     : リージョンのサフィックス (例: &apos;central1&apos; → us-central1, デフォルト: central1)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  TIMEOUT    : value for timeout (例: &apos;40m&apos;, &apos;1m32s&apos; and so on. &apos;40m&apos; as a default.)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  SERVICE_ACCOUNT: サービスアカウントのメールアドレス (例: my-service-account@my-project.iam.gserviceaccount.com)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Notice: API reference URL: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/run/deploy&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック: IMAGE_NAME と PROJECT_ID は必須&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; IMAGE_NAME PROJECT_ID [REGION]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック: IMAGE_NAME と PROJECT_ID は必須。最大5個の引数を許容。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; IMAGE_NAME PROJECT_ID [REGION] [TIMEOUT] [SERVICE_ACCOUNT]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータの設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;full_region&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${4&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;40&lt;/span&gt;&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service_account&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${5&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: gcloud コマンドが見つかりません。Google Cloud SDK のインストールを確認してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Dockerfile の存在チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;./Dockerfile&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 現在のディレクトリに Dockerfile が見つかりません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Cloud Run サービスのデプロイ処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;gcloud&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;run&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;deploy&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$image_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;--source&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;--project=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;--region=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;full_region&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;--allow-unauthenticated&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;--timeout=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--service-account=&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service_account&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cmd is here: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Running command: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= Deployments on Google Cloud ========================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cmd&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcloud_run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;コンテナをデプロイできなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Cloud Run サービス &apos;&lt;/span&gt;&lt;span&gt;$image_name&lt;/span&gt;&lt;span&gt;&apos; のデプロイに失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcloud_run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;デプロイしたよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;コンテナをデプロイしたよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は以下のような特徴を持っています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. ヘルプ機能&lt;a href=&quot;#1-ヘルプ機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;--help&lt;/code&gt;オプションを指定すると、関数の使い方が表示されます。これにより、関数の使い方を忘れても簡単に確認できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 引数のバリデーション&lt;a href=&quot;#2-引数のバリデーション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;必須引数（イメージ名とプロジェクトID）が指定されているかチェックし、引数の数が適切な範囲内かも確認します。これにより、誤った使い方を防止できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 環境チェック&lt;a href=&quot;#3-環境チェック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;gcloudコマンドが利用可能かどうか、現在のディレクトリにDockerfileが存在するかどうかをチェックします。これにより、デプロイ前に必要な条件が揃っているか確認できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. 柔軟なパラメータ設定&lt;a href=&quot;#4-柔軟なパラメータ設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リージョン、タイムアウト、サービスアカウントなどのオプションパラメータにデフォルト値を設定しつつ、必要に応じてカスタマイズできるようになっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. Discord通知機能&lt;a href=&quot;#5-discord通知機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デプロイの開始時と完了時（成功/失敗）にDiscordに通知を送信します。これにより、長時間かかるデプロイ作業の状況を離れた場所からでも確認できます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Runサービスの環境変数を更新するシェル関数&lt;a href=&quot;#cloud-runサービスの環境変数を更新するシェル関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、Cloud Runサービスの環境変数を更新するための関数&lt;code&gt;update_env_for_cloud_run_service&lt;/code&gt;を見ていきましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update_env_for_cloud_run_service&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ローカル変数に関数名を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスの環境変数を更新するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションが指定された場合、利用方法を表示して終了&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -n SERVICE_NAME -p PROJECT -r REGION -f FILE_PATH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Example: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -s my-service -p project_id -r us-central1 -f env.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Notice: API reference URL: &amp;lt;https://cloud.google.com/sdk/gcloud/reference/run/services/update&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必要な変数の初期化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;env.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数の解析&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;--service&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;--project&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;--region&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;--file&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shift&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -n SERVICE_NAME -p PROJECT -r REGION -f FILE_PATH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Example: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -s my-service -p project_id -r us-central1 -f env.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Unknown parameter: &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -n SERVICE_NAME -p PROJECT -r REGION -f FILE_PATH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必須パラメータのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$service&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$project&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$region&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Missing required parameter(s).&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; -n SERVICE_NAME -p PROJECT -r REGION -f FILE_PATH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# file_path の存在チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;./&lt;/span&gt;&lt;span&gt;$file_path&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[Error] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Error: 現在のディレクトリに &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; が見つかりません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Updating service &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; with environment variables from file &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;======= Deployments on Google Cloud ========================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$service&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$project&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--region&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$region&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--env-vars-file=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file_path&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;============================================================================================================&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ret_code&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;$ret_code&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcloud_run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;更新したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスの環境変数を更新したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Service &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; updated successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gcloud_run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;失敗…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;サービスの環境変数を更新できなかったよ…&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to update service &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$ret_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は以下のような特徴を持っています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 名前付き引数のサポート&lt;a href=&quot;#1-名前付き引数のサポート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;-n&lt;/code&gt;, &lt;code&gt;-p&lt;/code&gt;, &lt;code&gt;-r&lt;/code&gt;, &lt;code&gt;-f&lt;/code&gt;などの名前付き引数を使用することで、引数の順序を気にせずに使用できます。これにより、関数の使い勝手が向上します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. ヘルプ機能&lt;a href=&quot;#2-ヘルプ機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;--help&lt;/code&gt;オプションを指定すると、関数の使い方と例が表示されます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 引数のバリデーション&lt;a href=&quot;#3-引数のバリデーション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;必須パラメータ（サービス名、プロジェクトID、リージョン）が指定されているかチェックします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. ファイルの存在チェック&lt;a href=&quot;#4-ファイルの存在チェック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;環境変数ファイルが存在するかどうかをチェックします。これにより、ファイルが見つからない場合のエラーを事前に防止できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. Discord通知機能&lt;a href=&quot;#5-discord通知機能-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;環境変数の更新開始時と完了時（成功/失敗）にDiscordに通知を送信します。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;使用例&lt;a href=&quot;#使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数を実際に使用する例を見てみましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;deploy_cloud_run_containerの使用例&lt;a href=&quot;#deploy_cloud_run_containerの使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 基本的な使用方法&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deploy_cloud_run_container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-container&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-project&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# タイムアウトとサービスアカウントを指定する場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deploy_cloud_run_container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-container&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-project&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;60m&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;service-account@test-project.iam.gserviceaccount.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ヘルプを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deploy_cloud_run_container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;update_env_for_cloud_run_serviceの使用例&lt;a href=&quot;#update_env_for_cloud_run_serviceの使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 基本的な使用方法&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;update_env_for_cloud_run_service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-container&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-project&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 環境変数ファイルを指定する場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;update_env_for_cloud_run_service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-container&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test-project&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;custom-env.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ヘルプを表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;update_env_for_cloud_run_service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;環境変数ファイルの形式&lt;a href=&quot;#環境変数ファイルの形式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;update_env_for_cloud_run_service&lt;/code&gt;関数で使用する環境変数ファイルは、YAMLフォーマットで記述します。以下は例です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;API_KEY&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;your-api-key&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DEBUG_MODE&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;true&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DATABASE_URL&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;postgresql://user:password@host:port/dbname&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このファイルをデフォルトでは&lt;code&gt;env.yml&lt;/code&gt;という名前で保存し、関数実行時に&lt;code&gt;-f&lt;/code&gt;オプションで別のファイル名を指定することもできます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;関数の改善ポイント&lt;a href=&quot;#関数の改善ポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数はすでに便利ですが、さらに以下のような改善ができます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. エラーハンドリングの強化&lt;a href=&quot;#1-エラーハンドリングの強化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在もエラーチェックは行っていますが、より詳細なエラーメッセージを表示したり、特定のエラーに対して自動的に対処する機能を追加できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. ログ機能の拡張&lt;a href=&quot;#2-ログ機能の拡張&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在はコンソールに情報を出力していますが、ログファイルに記録する機能を追加すると、過去のデプロイ履歴を確認しやすくなります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 並列デプロイのサポート&lt;a href=&quot;#3-並列デプロイのサポート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;複数のサービスを同時にデプロイする機能を追加すると、大規模なシステムのデプロイ時間を短縮できます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、Cloud Runでコンテナを稼働させるために必要なgcloudコマンドをシェル関数化する方法を紹介しました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;deploy_cloud_run_container&lt;/code&gt;関数と&lt;code&gt;update_env_for_cloud_run_service&lt;/code&gt;関数を使うことで、以下のメリットが得られます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;使い回すことが出来る&lt;/li&gt;
&lt;li&gt;引数のバリデーションやエラーハンドリングが自動化される&lt;/li&gt;
&lt;li&gt;Discordへの通知機能により、デプロイ状況を離れた場所からでも確認できる&lt;/li&gt;
&lt;li&gt;ヘルプ機能により、gcloudコマンドや関数の使い方を簡単に確認できる&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらの関数を自分の環境に合わせてカスタマイズし、日々のCloud Run操作を効率化することが出来るかもしれませんね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;助かる&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他のコマンドもまとめてしまいたいな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>今年食ったサバ缶をまとめるためのPythonスクリプト</title><link>https://endorphinbath.com/posts/python-mackerel-of-the-year/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-mackerel-of-the-year/</guid><description>Googleスプレッドシートにまとめてあるサバ缶の情報をPythonのPandasで記事用の文章に起こすスクリプトを実装する流れを綴った記事です。</description><pubDate>Tue, 15 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだこれ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶だ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonでtsvをまとめて記事にする。&lt;a href=&quot;#pythonでtsvをまとめて記事にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は、個人的に日常的に食べているサバ缶をGoogleスプレッドシートに記録しています。そんな書き溜めてきたサバ缶のレビュー記事を楽に作ろうと思いました。&lt;/p&gt;&lt;p&gt;そこで、PythonのPandas等でデータを整理して、レビュー記事を出力するスクリプトを作る過程を紹介したいと思います。&lt;/p&gt;&lt;p&gt;ちなみに、2024年版のサバ缶のまとめの記事はこちらになります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/mackerel-packed-can-2024/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;今年食ったサバ缶のまとめ（2024年版）&lt;/div&gt;&lt;div&gt;2024年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/03/20241218_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スプレッドシートにあるデータをtsvにする。&lt;a href=&quot;#スプレッドシートにあるデータをtsvにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、スプレッドシートにあるデータをtsvファイルにします。スプレッドシートからコピーしたデータをメモ帳に貼り付けると、基本的にはtsv形式で貼り付けられるので、そのままメモ帳の内容をtsvファイルとして保存します。
&lt;img loading=&quot;lazy&quot; width=&quot;1572&quot; height=&quot;810&quot; src=&quot;/_astro/08.BPHMmlgn_2Qu4K.webp&quot; srcset=&quot;/_astro/08.BPHMmlgn_2l31v6.webp 640w, /_astro/08.BPHMmlgn_2vP30s.webp 750w, /_astro/08.BPHMmlgn_ktDDQ.webp 828w, /_astro/08.BPHMmlgn_lKFDC.webp 1080w, /_astro/08.BPHMmlgn_1nDws6.webp 1280w, /_astro/08.BPHMmlgn_2Qu4K.webp 1572w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Colabで開発する。&lt;a href=&quot;#google-colabで開発する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のPythonの開発には、まずはGoogle Colabを使いました。Colabに先程保存したtsvファイルをアップロードします。
&lt;img loading=&quot;lazy&quot; width=&quot;1619&quot; height=&quot;475&quot; src=&quot;/_astro/11.BlHb7ICB_ZNG6RY.webp&quot; srcset=&quot;/_astro/11.BlHb7ICB_2dC6e3.webp 640w, /_astro/11.BlHb7ICB_f22Bp.webp 750w, /_astro/11.BlHb7ICB_ZvJlhm.webp 828w, /_astro/11.BlHb7ICB_1XISs5.webp 1080w, /_astro/11.BlHb7ICB_1kzkYS.webp 1280w, /_astro/11.BlHb7ICB_ZNG6RY.webp 1619w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Google Colab上にGeminiだかGemmaだか分かりませんが何かいるので、スクリプトを作ってもらいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2023&quot; height=&quot;1024&quot; src=&quot;/_astro/12.Bkg_WGRd_Z2u5R4d.webp&quot; srcset=&quot;/_astro/12.Bkg_WGRd_qYIFb.webp 640w, /_astro/12.Bkg_WGRd_1k6sRY.webp 750w, /_astro/12.Bkg_WGRd_Z14r7mm.webp 828w, /_astro/12.Bkg_WGRd_1erF9G.webp 1080w, /_astro/12.Bkg_WGRd_1sm6Y9.webp 1280w, /_astro/12.Bkg_WGRd_23SR7f.webp 1668w, /_astro/12.Bkg_WGRd_Z2u5R4d.webp 2023w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google Colabにいる生成AIは、tsvファイルの中身を全く確認していないようです。不整合な部分を自分で直します。
&lt;img loading=&quot;lazy&quot; width=&quot;1737&quot; height=&quot;1182&quot; src=&quot;/_astro/13.CuzIXkdK_Z21ce8t.webp&quot; srcset=&quot;/_astro/13.CuzIXkdK_Z2pEUpn.webp 640w, /_astro/13.CuzIXkdK_eqS0U.webp 750w, /_astro/13.CuzIXkdK_11oCHJ.webp 828w, /_astro/13.CuzIXkdK_1PyUpJ.webp 1080w, /_astro/13.CuzIXkdK_BcWhl.webp 1280w, /_astro/13.CuzIXkdK_296oDn.webp 1668w, /_astro/13.CuzIXkdK_Z21ce8t.webp 1737w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とりあえず動きそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1907&quot; height=&quot;1095&quot; src=&quot;/_astro/14.CyKkvb8t_Z1Y1Vz4.webp&quot; srcset=&quot;/_astro/14.CyKkvb8t_2wFY6x.webp 640w, /_astro/14.CyKkvb8t_Z2or9xF.webp 750w, /_astro/14.CyKkvb8t_Z1zubcf.webp 828w, /_astro/14.CyKkvb8t_2eu39n.webp 1080w, /_astro/14.CyKkvb8t_Z1fyPeT.webp 1280w, /_astro/14.CyKkvb8t_ZqCgbY.webp 1668w, /_astro/14.CyKkvb8t_Z1Y1Vz4.webp 1907w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pandasで整理する。&lt;a href=&quot;#pandasで整理する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Pandasを使ってtsv形式のデータをデータフレームとして整理していきます。&lt;/p&gt;&lt;p&gt;そして、このように整理しました。&lt;code&gt;dates.tsv&lt;/code&gt;には&lt;code&gt;mackerel&lt;/code&gt;のフィールドが最低限必要です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# prompt: dates.tsvからmackerelの一覧を取得して、mackerels.tsvにある情報を付け加えて、サバ缶のレビュー記事を書きたい。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Union&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pandas &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# load data from dates.tsv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;dates_df &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.&lt;/span&gt;&lt;span&gt;read_csv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;dates.tsv&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# load data from mackrels.tsv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;mackerels_df &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.&lt;/span&gt;&lt;span&gt;read_csv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;mackerels.tsv&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;mackerels_df &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mackerels_df.&lt;/span&gt;&lt;span&gt;rename&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;No&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;mackerel&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(dates_df)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(mackerels_df)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# mackerelの情報を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;dates_df &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dates_df.&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;mackerel != 0&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;dates_df.&lt;/span&gt;&lt;span&gt;drop_duplicates&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;subset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;mackerel&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;dates_df.&lt;/span&gt;&lt;span&gt;dropna&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;subset&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;mackerel&quot;&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;inplace&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;mackerel_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.&lt;/span&gt;&lt;span&gt;merge&lt;/span&gt;&lt;span&gt;(dates_df, mackerels_df, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;mackerel&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;how&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Create Heading 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_h2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Union[pd.Series, pd.DataFrame]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Generates a level 2 heading for a mackerel review article.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param row: A pandas Series containing the data for the review.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It should have columns &quot;number_for_article&quot;, &quot;品名&quot;, and &quot;メーカー&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type row: pd.Series&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises TypeError: if row is not a pd.Series&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises KeyError: if row is missing any of the required columns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:returns: The level 2 heading string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;generate_h2(pd.Series({&apos;number_for_article&apos;: 1, &apos;品名&apos;: &apos;サバ缶&apos;, &apos;メーカー&apos;: &apos;メーカーA&apos;}))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;## 1. サバ缶（メーカーA）&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(row, pd.Series):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;row must be a pandas Series&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number_for_article &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;number_for_article&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;品名&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;brand &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;メーカー&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;## &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;number_for_article&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;（&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;brand&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# レビューを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_review&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Union[pd.Series, pd.DataFrame]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;Generates a review article for canned mackerel.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param row: Data used to create the review article.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type row: Union[pd.Series, pd.DataFrame]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises TypeError: if row is not a pd.Series or pd.DataFrame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:returns: The review article.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;generate_review(pd.Series({&apos;date&apos;: &apos;2023-10-27&apos;, &apos;name&apos;: &apos;Canned Mackerel&apos;, &apos;brand&apos;: &apos;Maker&apos;}))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;## 1. Canned Mackerel (Maker)&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n![]()&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;nEaten on 2023-10-27, &quot;Canned Mackerel&quot; made by Maker.&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;nThe fish is...&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(row, (pd.Series, pd.DataFrame)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;row must be a pandas Series or DataFrame&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;品名&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;brand &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;メーカー&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fish_category &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;魚種&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;flavor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;風味&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;can_color &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;缶の色&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;delicious &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;美味さ&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dha &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;DHA_content(mg)&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;epa &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;EPA_content(mg)&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ease_of_open &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;開けやすい&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;開け易い&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;開けにくい&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;comment &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;コメント&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;review &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;に食べた&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;brand&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;製の「&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;」です。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;魚は&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fish_category&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;で、&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;flavor&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;な風味と&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;can_color&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;の缶の色が特徴です。&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;delicious&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;で、缶は&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;ease_of_open&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;です。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;オメガ3脂肪酸の含有量の目安としては、DHAが&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;dha&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;mgで、EPAが&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;epa&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;mgでした。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; row[&lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;![]()&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;review &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;review&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; review&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mackerel_info[&lt;/span&gt;&lt;span&gt;&quot;number_for_article&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(mackerel_info.index) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mackerel_info[&lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mackerel_info.&lt;/span&gt;&lt;span&gt;apply&lt;/span&gt;&lt;span&gt;(generate_h2, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;axis&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mackerel_info[&lt;/span&gt;&lt;span&gt;&quot;review&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mackerel_info.&lt;/span&gt;&lt;span&gt;apply&lt;/span&gt;&lt;span&gt;(generate_review, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;axis&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mackerel_info[&lt;/span&gt;&lt;span&gt;&quot;md_item&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mackerel_info.&lt;/span&gt;&lt;span&gt;apply&lt;/span&gt;&lt;span&gt;(generate_review, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;axis&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 結果を出力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;micsellanious info of mackerel_info is the following...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(mackerel_info[[&lt;/span&gt;&lt;span&gt;&quot;number_for_article&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;review&quot;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mackerel_info_image is the following...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(mackerel_info[&lt;/span&gt;&lt;span&gt;&quot;画像&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;レビュー記事の内容をNotionに投稿する。&lt;a href=&quot;#レビュー記事の内容をnotionに投稿する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;レビュー記事の内容が出来上がったら、次にその内容を簡単に貼り付けられるようにします。&lt;/p&gt;&lt;p&gt;Markdownのまま（Markdownの文字列）で貼り付けても、Heading 2の要素に出来なかったりするので、Notionの &lt;code&gt;Append block children&lt;/code&gt; APIを使って全ての要素を貼り付けられるようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1377&quot; height=&quot;939&quot; src=&quot;/_astro/21.Am_6_8kq_21gzzr.webp&quot; srcset=&quot;/_astro/21.Am_6_8kq_ZnTNL8.webp 640w, /_astro/21.Am_6_8kq_YlAGF.webp 750w, /_astro/21.Am_6_8kq_2brE9o.webp 828w, /_astro/21.Am_6_8kq_Z1y0pEg.webp 1080w, /_astro/21.Am_6_8kq_ZCttIk.webp 1280w, /_astro/21.Am_6_8kq_21gzzr.webp 1377w&quot; /&gt;&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/patch-block-children&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Append block children - Notion Docs&lt;/div&gt;&lt;div&gt;Creates and appends new children blocks to the parent block_id specified. Blocks can be parented by other blocks, pages, or databases.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、Notion から WordPress のエディタの方に貼り付けて下記の記事が出来上がりました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/mackerel-packed-can-2024/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;今年食ったサバ缶のまとめ（2024年版）&lt;/div&gt;&lt;div&gt;2024年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/03/20241218_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Googleスプレッドシート上にあるデータをtsvファイルにして、PythonとPandasでtsvデータを整理して、Notionのページに反映する処理を実装しました。&lt;/p&gt;&lt;p&gt;今回作った処理を完全に自動化して、月次の記事も作れるようにしてみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この量が一瞬で書けちゃったなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;貯めてきた甲斐があった・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2025年03月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202503/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202503/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にSatisfactoryとモンハンワイルズのシリーズが更新されています。</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2025年3月に投稿した動画の一覧&lt;a href=&quot;#2025年3月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：7&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】スタン鉄筋と爆砕鉄筋で作るプルトニウムセルで原子力発電！ #53 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryスタン鉄筋と爆砕鉄筋で作るプルトニウムセルで原子力発電-53--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/f9DAjI2EkUw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】トカゲイヌと一緒にブループリント展示場を作る！ #54 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryトカゲイヌと一緒にブループリント展示場を作る-54--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bNIt_d3RdTo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【おかめおちょぼ口のモンハンワイルズ】オープニング・ムービー&lt;a href=&quot;#おかめおちょぼ口のモンハンワイルズオープニングムービー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6qdv_vwS9Oo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【おかめおちょぼ口のモンハンワイルズ】護竜オドガロン亜種、シーウー初見&lt;a href=&quot;#おかめおちょぼ口のモンハンワイルズ護竜オドガロン亜種シーウー初見&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ucxkjkBqtfI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【おかめおちょぼ口のモンハンワイルズ】飯を食べるシーン&lt;a href=&quot;#おかめおちょぼ口のモンハンワイルズ飯を食べるシーン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FrAFifwvvlI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【おかめおちょぼ口のモンハンワイルズ】ゾ・シア初見&lt;a href=&quot;#おかめおちょぼ口のモンハンワイルズゾシア初見&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/yVqHaKQSdv0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【おかめおちょぼ口のモンハンワイルズ】狂竜化ネルスキュラ初見&lt;a href=&quot;#おかめおちょぼ口のモンハンワイルズ狂竜化ネルスキュラ初見&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/03/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9I4S-SWtcVc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は7本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】死ぬほどモックで沼ってたのでその過程でClaude君が出してくれた対策を並べた</title><link>https://endorphinbath.com/posts/python-mock-tips-from-claude/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-mock-tips-from-claude/</guid><description>Pythonでテストメソッドを作る時にかなり沼っていたので、その過程でClaudeが教えてくれたことを並べました。色々とpytest-mockの書き方があるようです。</description><pubDate>Sat, 12 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これ何時になったら終わるの？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;沼のようだ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なんでこんなに沼っているんだ&lt;a href=&quot;#なんでこんなに沼っているんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;何時まで経っても解決できない僕とClaude君。
最初はClineにソースを読ませて解決しようとしたんですけど、読ませるにはファイルがすくすくとデカく育っていたもので、初回のデバッグの失敗を機に、Claude君と直接チャットしながらコードペタペタして解決に挑みました。
しかし・・・、大体4時間ぐらい沼っていましたかね。それでも全然解決しなくて、まあ結局解決しなくて、最終的にはメソッドをモック対象のメソッドと同じファイル内に置いて終わらせたんですけど。うーん、結局何が原因だったんだろう？
こいつも原因の一つだったのだろうか・・・。デコレータァァァ！！&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@wrap_with_debug_log&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; requests.Response:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;notion_util.fetch_notion&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;args &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [endpoint, method, payload]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Entering function with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; endpoint &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;endpoint&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;method&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; payload &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;payload&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; endpoint &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;endpoint&apos; must not be empty.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;method&apos; must not be empty.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; payload.&lt;/span&gt;&lt;span&gt;__class__&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;dict&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;payload&apos; must be dict type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;information to request Notion API...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(endpoint)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(method)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Bearer &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_notion_integration_token&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;requesting to Notion API...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;endpoint,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;endpoint,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(payload),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Error: with HTTP status code: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response.&lt;/span&gt;&lt;span&gt;raise_for_status&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# response.encoding = response.apparent_encoding&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# response.encoding = &quot;Shift_JIS&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response.encoding &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;received response.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# pprint(response.text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(response.status_code)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(response.encoding)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Exiting function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print_1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;メソッドの名前の上にチョコンと付いているグルグルが座っていた所為で4時間も意味のない時間が過ぎ去っていたのかもしれません・・・。まあ、ログを出力するために書いたんですけどね。APIリクエストの結果のログって大事ですから。
ということで今回は、そんな意味がなかった4時間を少しでも意味のあるものにするために、Claude君がその4時間の中でプリプリ出してくれたモックの手法を並べてみることにしました。
まあ、途中で出してくれた手法によって、デコレータがモックの邪魔をしていたことが分かりましたからね。あっ、ちなみに本記事には、デコレータを付けたメソッドのモックの仕方は載っていません。試しに一回、Claude君にプリッと出してもらいましたが、そのプリッでは出来ませんでした。4時間も沼っていてもう疲れたのでそれ以上の探求はしませんでした。
それでは並べていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の沼の元&lt;a href=&quot;#今回の沼の元&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、沼っていたソースコードを貼り付けます。
概要としては、とあるファイルから特定のNotionのデータベースにAPIリクエストをする別のファイルに書いてあるメソッドを呼び出して（沼の元：その1）、そのメソッドが別のファイルに書いてあるクラスのメソッドを呼び出して（沼の元：その2）、そのメソッドにデコレータが付いていたわけです。（沼の元：その3）
沼の元：その1です。クラスは名前空間としての役割を作るためだけに作りました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionDailyPropertyGenerator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requests_once&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieves_from_cache&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; Union[list[&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; NotionModels.&lt;/span&gt;&lt;span&gt;TASK&lt;/span&gt;&lt;span&gt;.value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;na &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;retrieve_pages_of_notion_db&lt;/span&gt;&lt;span&gt;(notion_model, requests_once, retrieves_from_cache)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; pages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;沼の元：その2です。このクラスも名前空間としての役割を作るためだけに作りました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@wrap_with_debug_log&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; requests.Response:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; endpoint &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;endpoint&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;method&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; payload &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;payload&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; endpoint &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;endpoint&apos; must not be empty.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;method&apos; must not be empty.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; payload.&lt;/span&gt;&lt;span&gt;__class__&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;dict&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;payload&apos; must be dict type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;information to request Notion API...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(endpoint)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(method)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Bearer &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_notion_integration_token&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;requesting to Notion API...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;endpoint,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;endpoint,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(payload),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Error: with HTTP status code: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response.&lt;/span&gt;&lt;span&gt;raise_for_status&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response.encoding &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;received response.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(response.status_code)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(response.encoding)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;沼の元：その3です。これが今回の根本の原因だったデコレータです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrap_with_debug_log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;callable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrapper&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Get the caller function&apos;s name (which is now the wrapped function)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(args)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with args: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(kwargs)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; and kwargs: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Entering function with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Execute the wrapped function and capture the result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with result: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(result)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with result: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Exiting function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print_1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; wrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;沼の元：その4です。その1のためのテストコードになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ディレクトリ構成はこんな感じの抜粋です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;my_project/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--notion_daily_property.py  # 沼の元：その1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--notion_template_page.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--notion_util.py            # 沼の元：その2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--util.py                   # 沼の元：その3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--test_notion_daily_property.py  # 沼の元：その4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--test_notion_template_page.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--test_notion_util.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--test_util.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Claudeのプリプリッ。&lt;a href=&quot;#claudeのプリプリッ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Claudeがプリプリッと出した対策を並べていきます。下記のプロンプトから全てが始まりました。&lt;a href=&quot;https://note.shiftinc.jp/n/n1c1223c75fc0&quot; target=&quot;_blank&quot;&gt;こちらのコード&lt;/a&gt;を参考にさせていただきました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下のpythonのテストコードのmockerはどう宣言すればいい？&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*# tests/lambda_test.py (抜粋)*&lt;/span&gt;&lt;span&gt; from lambda_function import lambda_handler def test_lambda_handler(mocker): &lt;/span&gt;&lt;span&gt;*# インスタンス化*&lt;/span&gt;&lt;span&gt; mock_instance = mocker.MagicMock() mocker.patch(&quot;lambda_function.ExampleClass&quot;, return_value=mock_instance) &lt;/span&gt;&lt;span&gt;*# インスタンスメソッド*&lt;/span&gt;&lt;span&gt; mock_instance.instance_method_example.return_value = &quot;instance_method_2&quot; &lt;/span&gt;&lt;span&gt;*# クラスメソッド*&lt;/span&gt;&lt;span&gt; mocker.patch( &quot;lambda_function.ExampleClass.class_method_example&quot;, return_value=&quot;class_method_2&quot;, ) &lt;/span&gt;&lt;span&gt;*# スタティックメソッド*&lt;/span&gt;&lt;span&gt; mocker.patch( &quot;lambda_function.ExampleClass.static_method_example&quot;, return_value=&quot;static_method_2&quot;, ) &lt;/span&gt;&lt;span&gt;*# プロパティ*&lt;/span&gt;&lt;span&gt; type(mock_instance).name = mocker.PropertyMock(return_value=&quot;property_2&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その1&lt;a href=&quot;#claudeのプリッその1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pytestでモックを使用するためには、pytest-mockプラグインを利用する必要があります。このテストコードでは&lt;code&gt;mocker&lt;/code&gt;をテスト関数の引数として使用していますが、これを正しく動作させるためには以下の方法があります：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;pytest.fixture&lt;/code&gt;として&lt;code&gt;mocker&lt;/code&gt;を宣言する必要はありません。pytest-mockプラグインをインストールすると、&lt;code&gt;mocker&lt;/code&gt;フィクスチャが自動的に利用可能になります。&lt;/li&gt;
&lt;li&gt;テストファイルの先頭に以下のインポートが必要です：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;テストを実行する前に、pytest-mockプラグインをインストールしておく必要があります：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest-mock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;完全なテストファイル例：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;tests/lambda_test.py&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; lambda_function &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; lambda_handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インスタンス化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_instance)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インスタンスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.instance_method_example.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;instance_method_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# クラスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.class_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;class_method_2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# スタティックメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.static_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;static_method_2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# プロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(mock_instance).name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;PropertyMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;property_2&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テスト対象の関数を呼び出し&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# アサーションをここに追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# assert result == expected_result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;pytest-mock&lt;/code&gt;プラグインをインストールしていれば、特別な宣言なしで&lt;code&gt;mocker&lt;/code&gt;引数を使用できます。これはpytestが自動的に提供するフィクスチャなので、別途宣言する必要はありません。
なるほど、pytest-mockというパッケージをインストールしておかなければならんのか。うんまあ、入ってたからヨシ。先に進もう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その2&lt;a href=&quot;#claudeのプリッその2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ダメだ。動かん。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;テストクラスの中で使いたい。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;テストクラスの中で &lt;code&gt;mocker&lt;/code&gt; フィクスチャを使用する場合、クラスベースのテストスタイルに適した形で記述する必要があります。以下の方法があります：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TestLambdaFunction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# インスタンス化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_instance)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# インスタンスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.instance_method_example.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;instance_method_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# クラスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.class_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;class_method_2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# スタティックメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.static_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;static_method_2&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# プロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(mock_instance).name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;PropertyMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;property_2&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# テスト対象の関数を呼び出し&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; lambda_function &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; lambda_handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# アサーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# assert result == expected_result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;クラスベースのテストでも、テストメソッドの引数として &lt;code&gt;mocker&lt;/code&gt; を渡すことで、pytest-mock プラグインが提供する機能をそのまま使用できます。特別な初期化や宣言は不要です。pytest がテスト実行時に自動的に &lt;code&gt;mocker&lt;/code&gt; フィクスチャを注入します。
ふむふむ、先に進もう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その3&lt;a href=&quot;#claudeのプリッその3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;動きません。「&lt;code&gt;assert mocker.call&lt;/code&gt;」はモックがテスト中に呼び出されていれば&lt;code&gt;True&lt;/code&gt;になります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;モックされない。「assert mocker.call」ではアサーションエラーにならないのに。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;モックが正しく機能していない問題について調査しましょう。&lt;code&gt;assert mocker.call&lt;/code&gt;でアサーションエラーにならないというのは、通常、モックが呼び出されていないか、正しく設定されていないことを示しています。
テストクラス内でモックを正しく動作させるための一般的な問題と解決策をいくつか挙げます：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;pytestのスコープ問題&lt;/strong&gt;：クラスメソッド内でのモックは、そのメソッドのスコープ内でのみ有効です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;autouse=Trueのフィクスチャを使用する&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; unittest.mock &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; MagicMock, patch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TestLambdaFunction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_mocks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# クラス全体で使えるモックをセットアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mock_instance)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# インスタンスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance.instance_method_example.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;instance_method_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# クラスメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.class_method_patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.class_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;class_method_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# スタティックメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.static_method_patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass.static_method_example&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;static_method_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# プロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance).name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;PropertyMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;property_2&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# テスト後のクリーンアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.class_method_patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.static_method_patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; lambda_function &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; lambda_handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# モックが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.patcher.call_args_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# または明示的に&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance.instance_method_example.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;importの問題&lt;/strong&gt;: &lt;code&gt;lambda_function&lt;/code&gt;モジュールをテスト内でインポートする時点が重要です。モックパッチを適用した後にインポートする必要があります:&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TestLambdaFunction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# パッチを適用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lambda_function.ExampleClass&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_instance)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# ここでインポート（パッチ適用後）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; lambda_function &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; lambda_handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# テスト実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda_handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# アサーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.instance_method_example.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;モジュールパスの問題&lt;/strong&gt;: モックするパスが正確であることを確認してください。&lt;code&gt;lambda_function.py&lt;/code&gt;が別のディレクトリにある場合、パスを調整する必要があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pytest-mockのバージョン確認&lt;/strong&gt;: 最新版の&lt;code&gt;pytest-mock&lt;/code&gt;を使用していることを確認:&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest-mock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記の解決策を試しても問題が解決しない場合は、&lt;code&gt;lambda_function.py&lt;/code&gt;の内容と実際のテストコードを共有していただけると、より具体的なアドバイスができます。
インポートを途中から呼び出すやつだな。やりますか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その4&lt;a href=&quot;#claudeのプリッその4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;またダメだ。モックが呼び出されませんでした。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;モック出来ない。「&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;notion_util.NotionAPI&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.patcher.call_args_list)」でアサーションエラーになる。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;問題を解決するために、モックが正しく適用されていない原因を分析しましょう。
エラーの原因として、モックのパス指定が間違っている可能性が高いです。&lt;code&gt;&quot;src.notion_util.NotionAPI&quot;&lt;/code&gt; というパスでモックを適用していますが、実際のインポートパスと一致していない可能性があります。
以下の解決策を試してみてください：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;インポートパスの確認&lt;/strong&gt;: モックされるべきクラスが実際にどのようにインポートされているか確認します。コードの中でどのように &lt;code&gt;NotionAPI&lt;/code&gt; をインポートしているかを確認してください。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モックパスの修正&lt;/strong&gt;: &lt;code&gt;setup_test&lt;/code&gt; メソッドのモックの設定を修正します：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 現在のパス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# このパスが正しいか確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_util.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の可能性のあるパスも試してみる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# self.patcher = mocker.patch(&quot;notion_util.NotionAPI&quot;, return_value=self.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# または&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# from src.notion_util import NotionAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# self.patcher = mocker.patch.object(NotionAPI, &quot;__new__&quot;, return_value=self.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.fetch_notion.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;インポート順序の問題&lt;/strong&gt;: モジュールのインポートがモックの設定前に行われている可能性があります。以下の方法を試してみてください：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テスト前にモジュールを再ロードしてみる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; importlib&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; src.notion_util&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;importlib.&lt;/span&gt;&lt;span&gt;reload&lt;/span&gt;&lt;span&gt;(src.notion_util)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# または、テスト内で明示的にインポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_daily_property &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionDailyPropertyGenerator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_database_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mock_database_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(notion_database_id, requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# アサーション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;NotionAPI&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.patcher.call_args_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# または&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.fetch_notion.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;モック方法の変更&lt;/strong&gt;: クラスではなく関数として直接モックを設定する方法も試してみてください：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 直接関数をモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.fetch_notion.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_on_notion_tasks内で使用される関数を直接モック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NotionDailyPropertyGeneratorのコード確認&lt;/strong&gt;: もし可能であれば、&lt;code&gt;NotionDailyPropertyGenerator&lt;/code&gt; クラスの実装、特に &lt;code&gt;retrieve_pages_on_notion_tasks&lt;/code&gt; メソッドの実装を確認して、実際に &lt;code&gt;NotionAPI&lt;/code&gt; がどのように使われているかを見ることができれば、より具体的な解決策を提供できます。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの方法を試しても解決しない場合は、&lt;code&gt;src.notion_daily_property&lt;/code&gt; モジュールのコード（特に &lt;code&gt;retrieve_pages_on_notion_tasks&lt;/code&gt; メソッド）を確認して、&lt;code&gt;NotionAPI&lt;/code&gt; がどのように使用されているかの詳細を教えていただければ幸いです。
うーん・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その5&lt;a href=&quot;#claudeのプリッその5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;全然出来ないので、業を煮やした僕はコードを貼り付ける。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;「self.patcher = mocker.patch.object(NotionAPI, &quot;&lt;/span&gt;&lt;span&gt;__new__&lt;/span&gt;&lt;span&gt;&quot;, return_value=self.mocker_for_notion_api)」を&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;試したら、アサーションエラーにはなったが実際の値が変わった。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;変える前は2100（モックが当たらない時に取れる実際の値）となっていたが、変えたら0になっていた。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;NotionDailyPropertyGeneratorのコードを添付する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class NotionDailyPropertyGenerator():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;def &lt;/span&gt;&lt;span&gt;**init**&lt;/span&gt;&lt;span&gt;(self):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;def get_title_of_notion_daily_report_page(self, date: Union[datetime, None]=None):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Generate the title of the Notion daily report page for a specific date.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date (datetime): The date to generate the title for.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str: The formatted page title.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if date is None:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date = get_datetime_now(is_jst=True)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cfg = notion_config()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prefix = cfg.DAILY_PAGE_PREFIX&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_str = date.strftime(&quot;%Y-%m-%d(%a)&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return f&quot;{prefix}_{date_str}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def retrieve_pages_on_notion_tasks(self, requests_once: bool = True, retrieves_from_cache: bool = False) -&amp;gt; Union[list&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;, None]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_model = &quot;task&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;na = NotionAPI()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages = na.retrieve_pages_of_notion_db(notion_model, requests_once, retrieves_from_cache)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return pages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;問題の原因がわかりました。モックのパスに問題があったと考えられます。&lt;code&gt;mocker.patch.object(NotionAPI, &quot;__new__&quot;, return_value=self.mocker_for_notion_api)&lt;/code&gt; を試したときに値が変わった（2100から0になった）という結果は進展を示しています。
&lt;code&gt;NotionDailyPropertyGenerator&lt;/code&gt; の &lt;code&gt;retrieve_pages_on_notion_tasks&lt;/code&gt; メソッドを見ると、以下のコードがあります：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requests_once&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieves_from_cache&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; Union[list[&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;task&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;na &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;retrieve_pages_of_notion_db&lt;/span&gt;&lt;span&gt;(notion_model, requests_once, retrieves_from_cache)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; pages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここで &lt;code&gt;NotionAPI()&lt;/code&gt; をインスタンス化しています。これをモックするためには、以下のように修正してみましょう：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックのセットアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIをインポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_util &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラスそのものをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックの戻り値を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;変更点のポイント：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;NotionAPI&lt;/code&gt;のパスを &lt;code&gt;src.notion_daily_property.NotionAPI&lt;/code&gt; に変更しています。これは、&lt;code&gt;retrieve_pages_on_notion_tasks&lt;/code&gt; メソッド内でインポートしているクラスをモックするために必要です。&lt;/li&gt;
&lt;li&gt;モックの戻り値を &lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; メソッドに設定しています。コードを見ると、実際に呼び出されているメソッドは &lt;code&gt;fetch_notion&lt;/code&gt; ではなく &lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; です。&lt;/li&gt;
&lt;li&gt;戻り値として &lt;code&gt;self.get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01()[&quot;results&quot;]&lt;/code&gt; を設定しています。これは実際のJSONレスポンスに合わせて、&lt;code&gt;results&lt;/code&gt; キーの値を返すようにするためです。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの変更を行った後、テストを再度実行してみてください。モックが正しく適用され、&lt;code&gt;assert &quot;NotionAPI&quot; in str(self.patcher.call_args_list)&lt;/code&gt; が成功するはずです。
また、テストメソッド内でのアサーションも以下のように変更するとより明確になります：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_database_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mock_database_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(notion_database_id, requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbメソッドが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.&lt;/span&gt;&lt;span&gt;assert_called_once_with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;task&quot;&lt;/span&gt;&lt;span&gt;, notion_database_id, requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 結果の確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(pages) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この方法でモックが正しく適用されるはずです。
おいおい原因が分かったって！？　それは本当かぃぃ！？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その6&lt;a href=&quot;#claudeのプリッその6&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ダメだ・・・。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;「self.mocker_for_notion_api.fetch_notion.assert_called_once_with(“task”, notion_database_id, requests_once)」の処理で、「AssertionError: Expected ‘fetch_notion’ to be called once. Called 0 times.」というアサーションエラーが表示されました。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;code&gt;fetch_notion&lt;/code&gt; メソッドが呼ばれていないというエラーが出ていますね。これは、実際のコードで使用されているメソッド名と、モックで設定したメソッド名が一致していないことを示しています。
コードを見ると、&lt;code&gt;NotionDailyPropertyGenerator.retrieve_pages_on_notion_tasks&lt;/code&gt; メソッドでは：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requests_once&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieves_from_cache&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; Union[list[&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;task&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;na &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;retrieve_pages_of_notion_db&lt;/span&gt;&lt;span&gt;(notion_model, requests_once, retrieves_from_cache)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; pages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;na.retrieve_pages_of_notion_db&lt;/code&gt; メソッドを呼び出していることがわかります。しかし、テストでは &lt;code&gt;fetch_notion&lt;/code&gt; メソッドが呼ばれるとアサートしています。
修正方法としては、以下のようにアサーションを変更してください：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_database_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mock_database_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbメソッドが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.&lt;/span&gt;&lt;span&gt;assert_called_once_with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;task&quot;&lt;/span&gt;&lt;span&gt;, requests_once, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 結果の確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(pages) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;また、&lt;code&gt;setup_test&lt;/code&gt; メソッドでのモックの設定も次のように変更してください：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックのセットアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラスをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbメソッドの戻り値を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;重要なポイント：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;fetch_notion&lt;/code&gt; ではなく &lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; メソッドをモックして戻り値を設定&lt;/li&gt;
&lt;li&gt;アサーションも &lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; メソッドが呼ばれることを確認するように変更&lt;/li&gt;
&lt;li&gt;パラメータの順序と名前を正確に合わせる（&lt;code&gt;notion_model&lt;/code&gt;, &lt;code&gt;requests_once&lt;/code&gt;, &lt;code&gt;retrieves_from_cache&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;また、オリジナルのコードでは &lt;code&gt;notion_database_id&lt;/code&gt; を引数として渡していますが、実際のメソッド定義ではこのパラメータは使用されていないようです。そのため、テストでも &lt;code&gt;notion_database_id&lt;/code&gt; を引数として渡さないように修正しました。
ふむふむ、モックする対象を変えると来たか・・・・・・うん？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その7&lt;a href=&quot;#claudeのプリッその7&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;通った！！　・・・けど、実際に使いたい関数自体をモックしてしまっているから、全くもってテストとしての役割を果たしていない。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;その実装でモック出来るようにはなったんですけど、テストカバレッジを上げたいです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;なので、fetch_notionをモックしたい。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;fetch_notion&lt;/code&gt; をモックしたいということですね。&lt;code&gt;NotionAPI&lt;/code&gt; クラス内の &lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; メソッドが内部で &lt;code&gt;fetch_notion&lt;/code&gt; を呼び出しているのであれば、そこまで深くモックすることでカバレッジを向上させることができます。
以下のようにモックを設定してみましょう：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIのインスタンスのモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラス自体をモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.mocker_for_notion_api)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# fetch_notionメソッドのモック設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.fetch_notion.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbメソッドも引き続きモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際のNotionAPIクラスの実装に従って結果を返す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、テストメソッドでは両方のメソッドが呼ばれたことを確認します：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラスがインスタンス化されたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbメソッドが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mocker_for_notion_api.retrieve_pages_of_notion_db.&lt;/span&gt;&lt;span&gt;assert_called_once_with&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;task&quot;&lt;/span&gt;&lt;span&gt;, requests_once, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 内部でfetch_notionが呼ばれたかを確認したい場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ただし、この部分はretrieve_pages_of_notion_dbの内部実装に依存するため、&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際の挙動に合わせて調整が必要かもしれません&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# self.mocker_for_notion_api.fetch_notion.assert_called()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(pages) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;もし &lt;code&gt;NotionAPI&lt;/code&gt; クラスの内部実装をより深くテストしたい場合は、NotionAPIクラスそのものをモックするのではなく、そのメソッドのみをモックする方法も検討できます：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIのfetch_notionメソッドのみをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_util.NotionAPI.fetch_notion&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際のretrieve_pages_of_notion_dbメソッドを実行してfetch_notionを呼び出すようにする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この方法では、&lt;code&gt;NotionAPI&lt;/code&gt; クラス自体はモックせず、そのメソッド &lt;code&gt;fetch_notion&lt;/code&gt; のみをモックするため、&lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; の実際のコードが実行され、内部で &lt;code&gt;fetch_notion&lt;/code&gt; が呼び出されたときにモックの結果が返されます。
ただし、この方法が機能するかどうかは、&lt;code&gt;NotionAPI&lt;/code&gt; クラスの実際の実装に依存します。&lt;code&gt;NotionAPI&lt;/code&gt; クラスのコードを確認し、&lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt; メソッドが内部でどのように &lt;code&gt;fetch_notion&lt;/code&gt; を呼び出しているかを把握することが重要です。
よしよし、深くモックするかぁぁ・・・・・・&lt;code&gt;retrieve_pages_of_notion_db&lt;/code&gt;？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その8&lt;a href=&quot;#claudeのプリッその8&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;だから、その実装ではテストする意味が無いのだ・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`NotionAPI`&lt;/span&gt;&lt;span&gt; クラスの内部実装を介した返り値をテストしたいです。その場合、以下の実装ではモック出来ませんでした。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIのfetch_notionメソッドのみをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_util.NotionAPI.fetch_notion&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際のretrieve_pages_of_notion_dbメソッドを実行してfetch_notionを呼び出すようにする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 他の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;内部実装を介した返り値をテストする場合、インスタンス化の順序や、モックの適用先が重要になります。&lt;code&gt;NotionAPI.fetch_notion&lt;/code&gt; をモックする場合、以下の点に注意する必要があります。
まず、モックの設定方法を修正してみましょう：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラスのfetch_notionメソッドのみをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インポートを明示的に行う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_util &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# パッチを作成する前に、モジュールをリロードして確実に最新の状態を使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; importlib&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; src.notion_util&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;importlib.&lt;/span&gt;&lt;span&gt;reload&lt;/span&gt;&lt;span&gt;(src.notion_util)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# fetch_notionメソッドをパッチ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.patch.&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;(NotionAPI, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;fetch_notion&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 環境変数の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;次に、テストメソッドを以下のように修正します：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インポートを明示的に行う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_util &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インスタンスを生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テスト実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# fetch_notionが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock.&lt;/span&gt;&lt;span&gt;assert_called&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 結果の確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(pages) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;さらに、モジュールの依存関係により、以下のようなアプローチも試してみる価値があります：
&lt;strong&gt;モック対象のパスを確認&lt;/strong&gt;： NotionAPIがどこからインポートされているか確認し、正確なパスでモックします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# NotionDailyPropertyGeneratorのコードをデバッグプリントして確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_debug_imports&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_daily_property &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionDailyPropertyGenerator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; inspect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;code &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inspect.&lt;/span&gt;&lt;span&gt;getsource&lt;/span&gt;&lt;span&gt;(NotionDailyPropertyGenerator.retrieve_pages_on_notion_tasks)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;コード:&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際に使用されているNotionAPIのインポート元を確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; src.notion_util&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;NotionAPIのパス: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;src.notion_util.NotionAPI&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;強制的にモックを適用&lt;/strong&gt;： &lt;code&gt;patch.multiple&lt;/code&gt; を使用して、複数のパスに同時にモックを適用します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 複数の可能性のあるパスに同時にモックを適用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.patch.&lt;/span&gt;&lt;span&gt;multiple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;src.notion_util.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 別の可能性のあるパスにもモックを適用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.patch.&lt;/span&gt;&lt;span&gt;multiple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;インスタンス生成を確認&lt;/strong&gt;： &lt;code&gt;NotionAPI&lt;/code&gt; のコンストラクタをモックして、インスタンス生成時に特定のモックインスタンスを返すようにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックインスタンスを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.fetch_notion.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIのコンストラクタをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;src.notion_daily_property.NotionAPI&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_instance)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_instance&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 環境変数設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これらの方法を順に試して、どれが実際の実装に適しているか確認してみてください。&lt;code&gt;NotionAPI&lt;/code&gt;クラスの正確なインポートパスと使用方法を特定することが重要です。
またちょっと毛色が変わったな・・・。おっ・・・？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプ・・・なんだこれ？？&lt;a href=&quot;#claudeのプなんだこれ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先ほどClaude君が出してくれたinspectパッケージを使った手法ですね。このパッケージを使うとですね、ソースコードをターミナルに出力することが出来ます。
そして、&lt;code&gt;fetch_notion&lt;/code&gt;に対して実行すると、こんなコードが出てきた。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;コード:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrapper&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Get the caller function&apos;s name (which is now the wrapped function)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(args)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with args: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(kwargs)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; and kwargs: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Entering function with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Execute the wrapped function and capture the result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with result: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(result)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with result: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Exiting function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print_1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;NotionAPIのパス: &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;src.notion_util.NotionAPI&apos;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;あああ～・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その9&lt;a href=&quot;#claudeのプリッその9&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;報告します。（ちなみにフィクスチャは関数の上に付けるグルグルしたアットマークのヤツのこと。デコレータは任意の関数の前後で処理をするヤツのこと。今回はフィクスチャを使ってデコレータを呼んでいました。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;NotionAPI.fetch_notionメソッドは、以下の関数を呼ぶフィクスチャが付いていました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrapper&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Get the caller function&apos;s name (which is now the wrapped function)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(args)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with args: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(kwargs)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; and kwargs: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Entering function with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Execute the wrapped function and capture the result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with result: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(result)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with result: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Exiting function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print_1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;デバッグ用のラッパー関数が &lt;code&gt;NotionAPI.fetch_notion&lt;/code&gt; メソッドに付いていることがわかりました。これはメソッドをデコレートして、呼び出し時の引数と戻り値を出力するためのものですね。
このようなラッパー関数がある場合、モックの設定には追加の考慮が必要です。デコレーターを適用されたメソッドをモックする方法として、以下のアプローチを試してみましょう：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックデータを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIをインポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.notion_util &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; NotionAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実際のインスタンスを作成し、そのメソッドをモック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# これにより、デコレーターが適用された後のメソッドをモックできる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.real_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# monkeypatchを使用して、インスタンスメソッドを直接置き換え&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mock_fetch_notion&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[MOCK] fetch_notion called with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; mock_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# インスタンスのメソッドを直接モック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;monkeypatch.&lt;/span&gt;&lt;span&gt;setattr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.real_instance, &lt;/span&gt;&lt;span&gt;&apos;fetch_notion&apos;&lt;/span&gt;&lt;span&gt;, mock_fetch_notion)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIのコンストラクタをモックして、モック済みのインスタンスを返す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;src.notion_daily_property.NotionAPI&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.real_instance)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 環境変数の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hasattr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;patcher&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;あるいは、デコレーターを回避してモックする方法も試してみましょう：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックデータを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックインスタンスを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# fetch_notionの戻り値を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_fetch_notion &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.fetch_notion &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_fetch_notion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# retrieve_pages_of_notion_dbの戻り値も設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_instance.retrieve_pages_of_notion_db.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_data[&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIクラスのコンストラクタをモックして、このモックインスタンスを返す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;src.notion_daily_property.NotionAPI&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;return_value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mock_instance)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テスト用に参照を保持&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_instance&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_fetch_notion &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_fetch_notion&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 環境変数の設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.magic_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MagicMock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.monkey_patch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hasattr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;patcher&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、テストメソッドでは次のように確認します：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instance &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;property_generator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;requests_once &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pages &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; instance.&lt;/span&gt;&lt;span&gt;retrieve_pages_on_notion_tasks&lt;/span&gt;&lt;span&gt;(requests_once)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# NotionAPIがインスタンス化されたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.patcher.&lt;/span&gt;&lt;span&gt;assert_called_once&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックメソッドが呼ばれたことを確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hasattr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;mock_fetch_notion&apos;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 第二のアプローチの場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.mock_fetch_notion.&lt;/span&gt;&lt;span&gt;assert_called&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 第一のアプローチの場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# ここでは明示的なアサーションができないが、&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# デバッグ出力から呼び出しを確認できる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 結果の確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(pages) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;デコレーターが複雑なモックの問題を引き起こしている場合、テスト専用の環境変数を設定して、デバッグ用のデコレーターを無効化するという方法も検討する価値があります。例えば、&lt;code&gt;TEST_MODE=True&lt;/code&gt; のような環境変数を設定し、デコレーターの適用を条件付きにすることができれば、テスト時のモックがより簡単になります。
よしよし、少し進展したか・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Claudeのプリッ：その10&lt;a href=&quot;#claudeのプリッその10&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ダメだ。デコレータを看過できない。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;デコレーターの適用を条件付きにする方法を教えて&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;デコレーターの適用を条件付きにするには、デコレーターの実装時に環境変数を確認し、テスト環境では適用しないようにする方法が有効です。以下に実装例を示します。
&lt;strong&gt;条件付きデコレーターの実装方法&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; functools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;debug_decorator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@functools&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;wraps&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrapper&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 環境変数 TEST_MODE が &quot;True&quot; の場合はデコレーターをスキップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;TEST_MODE&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;True&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# テスト時は元の関数をそのまま実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 通常時はデバッグログを出力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with args: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; and kwargs: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(args)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with args: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(kwargs)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; and kwargs: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Entering function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print_1&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;result_to_print_2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 元の関数を実行して結果を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot; with result: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(result)) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result_to_print &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; with result: ...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;[DEBUG] &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: Exiting function&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;result_to_print&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; wrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;テストでの使用方法&lt;/strong&gt;
テスト実行前に環境変数 &lt;code&gt;TEST_MODE&lt;/code&gt; を設定します：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テストモードを有効にして、デコレーターをスキップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;monkeypatch.&lt;/span&gt;&lt;span&gt;setenv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;TEST_MODE&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;True&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# モックの設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mock_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data_for_test_retrieve_pages_on_notion_tasks_01_01&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ここでは元のメソッドに直接モックを設定できる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mocker.&lt;/span&gt;&lt;span&gt;patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;src.notion_util.NotionAPI.fetch_notion&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.fetch_notion_mock.return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mock_data&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 残りの設定...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yield&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# teardown&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove_env_vars&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_test_data&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;すでに適用されたデコレーターがある場合&lt;/strong&gt;
すでにコードベースにデコレーターが適用されていて変更できない場合は、テスト用の差し替えモジュールを作成する方法もあります：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;テスト用のモジュールを作成（例: &lt;code&gt;test_notion_util.py&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;本番コードと同じクラスやメソッドを持ちますが、デコレーターなしで実装&lt;/li&gt;
&lt;li&gt;テスト時にモジュールのインポートパスを書き換える&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テスト内でのモジュールパス書き換え&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fixture&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;autouse&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; MockFixture&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テスト用モジュールをインポートパスに挿入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; sys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; test_notion_util&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.modules[&lt;/span&gt;&lt;span&gt;&apos;src.notion_util&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; test_notion_util&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 以降のモック設定...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このアプローチはより侵襲的ですが、既存のコードを変更せずにテストを可能にします。
どの方法を選ぶかは、プロジェクトの状況やテストの目的によって異なります。条件付きデコレーターの実装が最も簡単で推奨される方法です。
その方法だと、既にデコレータを呼んでしまっているのでダメじゃないですか？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;結局、分からなかった。&lt;a href=&quot;#結局分からなかった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ダメだ。こんなにも出したのに。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;お疲れ様。それでは今回の反省と行こうではないか。&lt;a href=&quot;#お疲れ様それでは今回の反省と行こうではないか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あー疲れました・・・。反省します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;一部のソースを貼り漏らした。&lt;a href=&quot;#一部のソースを貼り漏らした&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;fetch_notion自体のソースを貼らなかったので、AIにデコレータを気付いてもらえなかったのかもしれません。
ですがしかし、Cline君に最初見てもらった時は全てのファイルを見てもらった上で、デコレータの指摘は無くて見当違いの修正をされたので、シード値によって解析結果にムラがあります。
しかし、ソースを全部見てもらった方が確度は上がると思います。なので、Cline君をもっと使いたかったですが如何せん金が掛かり過ぎる・・・。これはClaude DesktopをWindows上で動かしてWSLにあるファイルを見れるかどうかを試す時が来たのかもしれない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クリーンアーキテクチャやらSOLID原則を使う。&lt;a href=&quot;#クリーンアーキテクチャやらsolid原則を使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;全く考えてなかったですからね、このNotionツールを作り始めた頃は・・・。
クリーンアーキテクチャに則ったディレクトリ構成にすれば、おそらくMagicMockとかmonkeypatchとかを使わなくてもモック出来るはずです。なので、依存性逆転、依存の注入、ビジネスロジックの引数には抽象を使う。システム開発は最初が肝心ですね。ディレクトリ構成をリファクタリングするには厳しいコード量になってしまった・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の内容のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pytest-mock&lt;/code&gt;をインストールしてテスト関数に&lt;code&gt;mocker&lt;/code&gt;引数を渡すと、&lt;code&gt;pytest &lt;/code&gt;がテスト実行時に自動的に &lt;code&gt;mocker&lt;/code&gt; フィクスチャを注入する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inspect&lt;/code&gt;パッケージを使ってソースコードをターミナルに表示出来る。&lt;/li&gt;
&lt;li&gt;そもそもプロジェクトのアーキテクチャ設計で依存を排除すれば沼らない。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;本気でクリーンアーキテクチャをモノにしなければ・・・。（プリプリ言ってる場合じゃない。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;オオッ・・・！ テストが一気に流れていくぞ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;川のようだ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>最近WSLでVSCodeを触ってイラッとしたこと</title><link>https://endorphinbath.com/posts/wsl-vscode-irritating-issues/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wsl-vscode-irritating-issues/</guid><description>WSLでVisual Studio Codeを設定する時とその後に触っている時にイラッとしたことをまとめました。ちょっとしたトラブルシューティングとして使える記事かもしれません。</description><pubDate>Tue, 01 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか変なところがチラホラあるよなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;私も困ることがあります。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;まずはWSLのインストール&lt;a href=&quot;#まずはwslのインストール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;ここは本題ではないので殴り書きしておきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;「スタートメニュー」→「PowerShell」と入力→右クリック→「管理者として実行」&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wsl --install&lt;/code&gt;を実行。&lt;/li&gt;
&lt;li&gt;PCを再起動。&lt;/li&gt;
&lt;li&gt;Ubuntuを起動する。Ubuntuが起動されなければ、コントロールパネルを開いて、「プログラムのアンインストールまたは変更」＞「Windowsの機能の有効化または無効化」＞「Linux用Windowsサブシステム」にチェック＞再起動。「スタートメニュー」→「PowerShell」と入力→右クリック→「管理者として実行」→&lt;code&gt;wsl --install -d Ubuntu-24.04&lt;/code&gt;を実行してディストロをインストールする。&lt;/li&gt;
&lt;li&gt;Ubuntuのユーザー名とパスワードを設定する。&lt;/li&gt;
&lt;li&gt;これで基本的なWSL2のインストールは完了。&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h2&gt;WSLのバージョンを確認してみよう&lt;a href=&quot;#wslのバージョンを確認してみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは自分の環境を確認しておきましょう。WSLのバージョンは &lt;code&gt;wsl --version&lt;/code&gt; コマンドで確認できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WSL バージョン: 2.4.12.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;カーネル バージョン: 5.15.167.4-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WSLg バージョン: 1.0.65&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MSRDC バージョン: 1.2.5716&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Direct3D バージョン: 1.611.1-81528511&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DXCore バージョン: 10.0.26100.1-240331-1435.ge-release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Windows バージョン: 10.0.26100.3476&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ふ～ん。&lt;/p&gt;&lt;p&gt;なるほど、WSL2を使っているわけですね。WSL2はHyper-Vベースの仮想化技術を使っているので、WSL1よりもパフォーマンスが良いと言われています。ただ、その分ファイルシステムの扱いなどで思わぬ落とし穴があったりするんですよね…。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;Ubuntuのバージョンも確認しておこう&lt;a href=&quot;#ubuntuのバージョンも確認しておこう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;続いて、Ubuntu自体のバージョンも確認しておきましょう。&lt;code&gt;cat /etc/os-release&lt;/code&gt; コマンドで確認できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PRETTY_NAME=&quot;Ubuntu 24.04.2 LTS&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;NAME=&quot;Ubuntu&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;VERSION_ID=&quot;24.04&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;VERSION=&quot;24.04.2 LTS (Noble Numbat)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;VERSION_CODENAME=noble&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ID=ubuntu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ID_LIKE=debian&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;HOME_URL=&quot;https://www.ubuntu.com/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SUPPORT_URL=&quot;https://help.ubuntu.com/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BUG_REPORT_URL=&quot;https://bugs.launchpad.net/ubuntu/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PRIVACY_POLICY_URL=&quot;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;UBUNTU_CODENAME=noble&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;LOGO=ubuntu-logo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;最新のUbuntu 24.04.2 LTS（Noble Numbat）を使っているようですね。LTSなので長期サポートがあり、安定していると言われています。ただ、最新版だからこそ、まだ情報が少なくて困ることもあるかもしれません…。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;権限の管理が面倒すぎる問題&lt;a href=&quot;#権限の管理が面倒すぎる問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さて、本題に入りましょう。WSLでVSCodeを使っていて最初にイラッとしたのが、権限管理の問題です。WSLとWindowsの間でファイルをやり取りすると面倒なことになることがある。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;VSCodeを立ち上げるドライブには気を付けるべき&lt;a href=&quot;#vscodeを立ち上げるドライブには気を付けるべき&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;WSLでVSCodeを使う場合、どのドライブからVSCodeを立ち上げるかが重要になります。例えば、WSLのドライブから立ち上げたワークスペースをCドライブに保存したりすると、ユーザの権限が無くなってファイルを保存できなくなることがあります。&lt;/p&gt;&lt;p&gt;私の場合は、Cドライブに&lt;code&gt;git clone&lt;/code&gt;したリポジトリをWSLに移動して、VSCode上で触ろうとしたら引っ掛かりました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# こんな感じでWindowsのCドライブからクローンしたリポジトリを移動します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;https://github.com/example/repo.git&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/mnt/c/Users/username/projects/repo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;移動したファイルをVSCodeで編集した後にctrl + Sなりを押すんですが、保存できなくなるんですよね。なので、その事象に気付かずに編集し続けた内容が保存できずに立ち往生してしまう・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;対策&lt;a href=&quot;#対策&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;基本的には、WSL内で作業する場合は、WSLのファイルシステム内（&lt;code&gt;/home/username/&lt;/code&gt;以下）からその編集したいファイルに関する作業を始めるのがベストな気がします。Windowsに召喚してしまったファイルは、WindowsからWSL上のLinuxに移動するのではなく、Linuxに直接呼び起こすようにする。&lt;/p&gt;&lt;p&gt;例えば、Gitリポジトリなどを扱う場合は、最初からWSL内にクローンするか、Windowsのファイルシステム上で完結させるかを決めておく。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;改行コードがいつの間にかCRLFになっている恐怖&lt;a href=&quot;#改行コードがいつの間にかcrlfになっている恐怖&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に大きな問題が、&lt;strong&gt;改行コードの問題&lt;/strong&gt;です。これがかなり面倒くさかった・・・。Linuxの改行コードであるLFが、いつの間にかCRLFになっていて、シェルスクリプトが動かなくなったりする問題です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;改行コード問題の発見&lt;a href=&quot;#改行コード問題の発見&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この問題は、PowerShellファイルを弄る時にもたまに遭遇する事象です。（もしかしたら、先程の権限問題で権限を割り当てる的な処理をしたのですがそれが原因なのか・・・？　うーんまあよく分かりませんが、原因の深掘りはしませんでした・・・。）&lt;/p&gt;&lt;p&gt;この事象のせいで、ShellスクリプトファイルからコピペしたコードをBash上に貼り付けて実行することは可能ですが、Shellスクリプトファイル自体から実行することができなくなります。&lt;/p&gt;&lt;p&gt;Web上で、Claude 3.7 Sonnetからこんな感じのコードをファイルから実行して問題の切り分けをするように提案されましたが、この内容だと改行コードをパースしないので当該エラーを導き出すことができませんでした。（ClineとかCursorとかClaude Desktopだったら見つけられたのかなぁ？）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テスト用の簡単なエイリアス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;echo &quot;テスト成功&quot;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;改行コード問題の発見方法&lt;a href=&quot;#改行コード問題の発見方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この改行コード問題に気付けたのは、以下のように全ての処理をコメントアウトして実行したからです。改行コードをパースすると、「: command not found」というエラーになります。ちなみにそのエラーはコメントアウトを外しても同様に発生していました。例えば以下の内容を「crlf.bash」というファイルで改行コードがCRLFの状態で実行するとエラーになりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# #!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# #==============================================================#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ##         New Commands                                      ##&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# #==============================================================#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# function getpids() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   echo `ps x | grep $1 | awk &apos;{print $1}&apos;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# function du-ah() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   # e.g. du-ah / 20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   du -ah $1 | sort -rh | head -n $2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# function git-erase() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   # e.g. git-erase credential.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   git filter-branch --force --index-filter &quot;git rm --cached --ignore-unmatch $1&quot; -- --all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./crlf.bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、この改行コード問題はどこで発生したのかが分からないのですが、私の場合は全てのファイルで発生していました。Gitの差分が100件以上になっていたので絶対おかしいとは思っていましたが、まさか全てのファイルの改行コードがCRLFになっているとは思わなかったので・・・。パッと見では分かりませんし。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;改行コード問題の影響&lt;a href=&quot;#改行コード問題の影響&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしてそして、このGitの差分100件をコミットしてリモートにプッシュしてCIを回した時にエラーが発生しました。いつも発生しない場所かつ編集していないファイルでエラーが発生していたので、改行コードだと悟りました・・・。Bash実行時に改行コードで詰まると以下のようなエラーメッセージが出ますね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env: &apos;bash\\r&apos;: No such file or directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env: use -[v]S to pass options in shebang lines&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;あーー・・・・・・、これは見覚えのあるエラーメッセージです。&lt;code&gt;\\r&lt;/code&gt;という文字が入っているということは、まさにCRLF問題ですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;改行コード問題の解決策&lt;a href=&quot;#改行コード問題の解決策&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そのため、全てのファイルをCRLF改行コードからLF改行コードに変更しました。WSLにすればバラ色のLinux開発環境をWindows上で堪能することができると思ったのですが・・・、そんなに世の中うまく行かないようです・・・。&lt;/p&gt;&lt;p&gt;以下のコマンドで自分のdotfilesリポジトリのファイルを全てLF改行コードに直しました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dos2unix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# for Ubuntu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;change_carriage_return&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# &apos;change_carriage_return&apos; changes the line feed code to the carriage return code.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# e.g. change_carriage_return dir_1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-exec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dos2unix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;change_carriage_return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./dotfiles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これで一応解決しましたが、根本的な原因が分からないので、また同じ問題が発生する可能性があります・・・。VSCodeの設定で改行コードをLFに固定するなどの対策が考えられますね。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;「Could not resolve host: github.com」という謎のエラー&lt;a href=&quot;#could-not-resolve-host-githubcomという謎のエラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に遭遇した問題は、GitHubに接続できなくなる問題です。ブラウザではGitHubにアクセスできるのに、WSL上のgitコマンドだけ繋がらないという謎の現象です。発生したりしなかったりして再現性を掴めていません。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;事象&lt;a href=&quot;#事象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;例えば、&lt;code&gt;git clone https://github.com/XXX/YYYY&lt;/code&gt;を実行したら、&lt;code&gt;Could not resolve host: github.com&lt;/code&gt;というエラーメッセージが表示されました・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;https://github.com/example/repo.git&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Cloning into &apos;repo&apos;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# fatal: unable to access &apos;&amp;lt;https://github.com/example/repo.git/&amp;gt;&apos;: Could not resolve host: github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;解決策&lt;a href=&quot;#解決策&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;結論：&lt;strong&gt;Windowsを再起動したら直りました&lt;/strong&gt;・・・。原因は未だに分かりません。ブラウザではGitHubにアクセスできていたので、WSL上での名前解決ができなかったんですかねぇ。&lt;/p&gt;&lt;p&gt;プロキシサーバを経る過程で何かしらの問題が起きていることもあるらしいです。以下のコマンドを打ったら直ることもありました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# プロキシ設定を確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# プロキシ設定を一時的に解除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http_proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https_proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、以下の対処法も試してみましたが、Windows 11では多分できません。私は試しましたが出来ませんでした。（LxssManagerというサービスが見つからないらしい。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;wsl &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;shutdown&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-Service&lt;/span&gt;&lt;span&gt; LxssManager | &lt;/span&gt;&lt;span&gt;Restart-Service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;次回、同じようなことが起きたら、以下のコマンドを実行してみることに決めました。これでWindowsを再起動しないで済むなら嬉しいのですが・・・。（実際にこの後試してみて・・・、結局出来ませんでした）。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;wsl &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;shutdown&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-Service&lt;/span&gt;&lt;span&gt; WSLService | &lt;/span&gt;&lt;span&gt;Restart-Service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;その他諸々の、イラッとしなかった作業&lt;a href=&quot;#その他諸々のイラッとしなかった作業&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここからは、イラッとまではしなかったものの、WSLでVSCodeを使う上で行った設定や遭遇した問題について紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Gitの更新をVSCodeのGUI上で見れない問題&lt;a href=&quot;#gitの更新をvscodeのgui上で見れない問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、Gitリポジトリなどのディレクトリをワークスペースとして追加した際に発生します。1つのワークスペース内で作業を完結させる場合は問題ないのですが、ワークスペースとして追加した方が可視性が上がるっていうメリットもあるからなぁ・・・。一長一短ですか。&lt;/p&gt;&lt;p&gt;VSCodeの右下に表示される「Manage unsafe repositories」をクリックすると、Gitの更新をVSCode上で管理することができます。別ドライブで動いている分、権限周りがとりあえず面倒くさいですね。&lt;/p&gt;&lt;p&gt;これは、WSLとWindowsの間でのセキュリティ上の問題で、WSL内のGitリポジトリをVSCodeが「安全でない」と判断しているためです。一度許可すれば問題なく使えるようになりますが、新しいリポジトリごとに毎回この操作が必要になるのは少し面倒です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Python 3がプリインストールされている場合がある&lt;a href=&quot;#python-3がプリインストールされている場合がある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;さて、開発および実行環境としてまずはPythonをインストールしようとしました。その際に、以下の記事を参考にさせて頂きました。&lt;/p&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-an-ubuntu-20-04-server-ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.digitalocean.com/_next/static/media/apple-touch-icon.d7edaa01.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.digitalocean.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Python 3をインストールしUbuntu 20.04サーバーにプログラミング環境を設定する方法 | DigitalOcean&lt;/div&gt;&lt;div&gt;このチュートリアルでは、Ubuntu 20.24 サーバーでPython 3のプログラミング環境をセットアップする方法を学びます。サーバーでのプログラミングには多くの利点があり、開発プロジェクト間のコラボレーションをサポートします。このチュートリアルの一般原則はDebian Linuxのディストリビューションに適…&lt;/div&gt;&lt;div&gt;www.digitalocean.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.digitalocean.com/_next/static/media/intro-to-cloud.d49bc5f7.jpeg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Pythonをインストールしようとしましたが、Ubuntuの場合は、遅くてもUbuntu 20.04からPython 3がプリインストールされているらしいです。なので、Pythonをインストールする前に、Pythonのバージョンを確認しましょう。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upgrade&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# いつも使っているのはpythonなのでalias&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;python3&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、pipがなぜか入っていなかったので、以下を実行しました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python3-pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;venvも入っていなかったので、以下を実行しました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python3.12-venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これで、Python環境の基本的なセットアップは完了です。WSLの良いところは、このようにLinuxネイティブの開発環境をすぐに構築できることですね。それは良いことです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Goもインストールしたい&lt;a href=&quot;#goもインストールしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Goも使いたかったので、まずはGoがインストールされているかどうかを確認します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Goのchange listを確認します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;snap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Goをインストールしようとしました。（&lt;code&gt;snap&lt;/code&gt;は、色々なLinuxディストロに使えるパッケージリストらしいです。&lt;code&gt;apt&lt;/code&gt;は、Debian系専用ですけど。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;snap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、以下のエラーが表示されて、インストール出来ませんでした。クラシックなGoならインストール出来るらしいですけども。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;error: This revision of snap &quot;go&quot; was published using classic confinement and thus may perform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arbitrary system changes outside of the security sandbox that snaps are usually confined to,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;which may put your system at risk.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;If you understand and want to proceed repeat the command including --classic.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;今回は素直に、aptのgolang-goにしておくことにしました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;golang-go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これでインストール完了です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;VSCodeでGoの静的チェック（フォーマッタ）を動かす問題&lt;a href=&quot;#vscodeでgoの静的チェックフォーマッタを動かす問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Goをインストール出来たのは良かったのですが、その後、VSCodeでGoの静的チェック（フォーマッタ）を動かす、つまりGoの拡張機能を動かすことができませんでした・・・。&lt;/p&gt;&lt;p&gt;Goの拡張機能がちゃんと動いていないと、こんなエラーメッセージが表示されました。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Error loading workspace folders (expected 1, got 0) failed to load view for file:////wsl.localhost/Ubuntu-24.04/wsl.localhost/Ubuntu-24.04/home/user-name/my-repository/mypkg: failed to get workspace configuration from client (file:////wsl.localhost/Ubuntu-24.04/wsl.localhost/Ubuntu-24.04/home/user-name/my-repository/mypkg): Request workspace/configuration failed with message: [UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (”//”)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;以下、Goの拡張機能をアクティブにするために試してみたことを記します。&lt;/p&gt;&lt;p&gt;settings.jsonを編集する際に、以下の機能を設定する時にリポジトリにある資料を参考にしました。&lt;/p&gt;&lt;a href=&quot;https://github.com/golang/tools/blob/master/gopls/doc/settings.md&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;tools/gopls/doc/settings.md at master · golang/tools&lt;/div&gt;&lt;div&gt;[mirror] Go Tools. Contribute to golang/tools development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/c775faff51eaf54f9740424aa1b8c13e865f1e563dce34b1ca5a26d3fa59d949/golang/tools&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;試したこと一覧です。1回しか作業しなかったので再現性は確認できていませんが、個人的に多分必要だと思ったことは強調しておきます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;VSCodeがインストールされているドライブにGoパッケージをインストールした。つまり、Windowsにインストールし直した。&lt;/li&gt;
&lt;li&gt;VSCodeに「WSL」（identifier: ms-vscode-remote.remote-wsl）をインストール。（&lt;strong&gt;多分必要&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;VSCodeの&lt;code&gt;settings.json&lt;/code&gt;に後述のフィールドを記述する。（&lt;code&gt;&quot;gopls&quot;&lt;/code&gt;は&lt;strong&gt;多分必要&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;VSCodeをUbuntu上で開き直す。「&lt;code&gt;code .&lt;/code&gt;」をWSLコンソール上で実行し直します。（&lt;strong&gt;必要&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;すると、右下の方で「Reopen folder in WSL」的なニュアンスのメッセージが表示されるので、そのメッセージ内のボタンから、WSLでVSCodeを開いた。（&lt;strong&gt;必要&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;すると、WSLでVSCodeを開くので、そこでGoの拡張機能をインストールする。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;VSCodeの&lt;code&gt;settings.json&lt;/code&gt;に記述したフィールドは下記のものになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;[go]&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.suggest.snippetsPreventQuickSuggestions&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;golang.go&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;go.formatTool&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;gofmt&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;go.toolsEnvVars&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;GO111MODULE&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;on&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;gopls&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;expandWorkspaceToModule&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そうすると、フォーマッタが発動！　・・・嬉しいけど最小構成が不明だったので腑に落ちませんでした。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WSLでVSCodeを使うことで、Windows上でLinux環境を利用できるという素晴らしいメリットがありますが、いくつかの落とし穴もあることが分かりました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;権限管理の問題&lt;/strong&gt;：WSLとWindowsの間でファイルをやり取りする際に権限が変わることがある&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改行コードの問題&lt;/strong&gt;：いつの間にかCRLFになっていて、シェルスクリプトが動かなくなる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub接続の問題&lt;/strong&gt;：突然GitHubに接続できなくなり、Windowsの再起動が必要になることがある。再起動しなくても直ることもある。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;その他の設定問題&lt;/strong&gt;：Gitの更新表示、Python/Goの環境設定など&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの問題を把握し、適切に対処することで、WSL+VSCodeの環境をより快適に使うことが出来るでしょう。特に、改行コードの問題は気付きにくいので注意が必要です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ハイドラもクソ速いけど、その代わりに最初のチャージもクソ長かったんだよなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;エアライドですか？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Compute Engine】SSH接続できるDebian VMを構築するシェル関数を作る</title><link>https://endorphinbath.com/posts/gce-debian-vm-ssh-shell-function/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gce-debian-vm-ssh-shell-function/</guid><description>Google Compute Engine上にDebianのVMインスタンスを構築するためのシェル関数を紹介します。それを実行すると、Chromeリモートデスクトップからアクセス出来るVMが使えるようになります。</description><pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～ん、GUIメンドクサイ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それではCLIで完結するようにしましょう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Compute Engineとは？&lt;a href=&quot;#google-compute-engineとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Compute Engine（GCE）は、Googleが提供するIaaSサービスで、仮想マシンをクラウド上で実行できるサービスです。様々なOSやマシンタイプを選択でき、必要に応じてスケールアップ・ダウンが可能な柔軟なサービスとなっています。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/products/compute&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Compute Engine&lt;/div&gt;&lt;div&gt;Google Cloud 上でオンライン VM を簡単に作成して実行できます。ウェブサーバー、データベース、AI などの用途に応じて、事前設定されているマシンタイプまたはカスタム マシンタイプから選択します。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回は、このGCE上にDebian VMを構築し、SSHですぐに接続できるようにするシェル関数を作成します。この作成したシェル関数が常用の関数やスニペット的な存在となり、開発環境やテスト環境を素早く立ち上げることができるようになります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前提条件&lt;a href=&quot;#前提条件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このシェル関数を使用するには、以下の準備が必要です。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Google Cloud SDKがインストールされていること。&lt;/li&gt;
&lt;li&gt;CLI上で、&lt;code&gt;gcloud auth login&lt;/code&gt;でGCPアカウントにログインしていること。&lt;/li&gt;
&lt;li&gt;対象のプロジェクトが作成済みであること。&lt;/li&gt;
&lt;li&gt;Compute Engine APIが有効化されていること。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;また、Google Chrome以外のブラウザでもChrome Remote Desktopを使える・・・？かもしれないので、その場合はChrome Remote Desktopの拡張機能を入れれば使える・・・？（Chrome以外で使ったことがないのでちょっと分かりません。）&lt;/p&gt;&lt;p&gt;とりあえずまあ、構築の方をやっていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シェル関数の実装&lt;a href=&quot;#シェル関数の実装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;主要な関数の紹介&lt;a href=&quot;#主要な関数の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回のDebian VM構築の流れは以下のような感じです。以下のシェル関数で行っていきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;VMインスタンスを作成して設定する - &lt;code&gt;create_gce_instance_and_configure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ルーターとNATを作成する - &lt;code&gt;create_gce_router_and_nat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ファイアウォール設定とSSH接続の設定を行う - &lt;code&gt;setup_gce_firewall_and_ssh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;SSH鍵をコピーする - &lt;code&gt;copy_gce_ssh_key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;インスタンスにSSH接続する - &lt;code&gt;connect_gce_instance&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それでは、各関数の詳細を見ていきましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1. create_gce_instance_and_configure&lt;a href=&quot;#1-create_gce_instance_and_configure&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この関数は、GCEインスタンスを作成し、メタデータとスタートアップスクリプトを設定します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_gce_instance_and_configure&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;create_gce_instance_and_configure&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [MACHINE_TYPE] [YAML_FILE] [STARTUP_SCRIPT_FILE]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  INSTANCE_NAME       : 作成するインスタンスの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ZONE                : インスタンスを作成するゾーン (デフォルト: us-central1-a)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  MACHINE_TYPE        : マシンタイプ (デフォルト: e2-medium)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  STARTUP_SCRIPT_FILE : スタートアップスクリプトのファイルパス (デフォルト: ./iac/gcloud/setup_scripts/startup-script.sh)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  YAML_FILE           : metadata設定用のYAMLファイル (デフォルト: env.yml)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック：最低1つは INSTANCE_NAME を指定する必要があります&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [MACHINE_TYPE] [STARTUP_SCRIPT_FILE] [YAML_FILE]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータの初期化（デフォルト値付き）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INSTANCE_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ZONE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MACHINE_TYPE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;e2-medium&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YAML_FILE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${4&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;yml&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;STARTUP_FILE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${5&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;iac&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;setup_scripts&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;startup-script&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 1. インスタンス作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;create_gce_instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$ZONE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$MACHINE_TYPE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to create instance &apos;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 2. YAMLファイルからmetadataの設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;set_gce_instance_metadata_from_yaml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$ZONE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$YAML_FILE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&apos; のmetadata設定に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 3. とスタートアップスクリプトの登録&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;add_startup_script_to_gce_instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$ZONE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$FILE_PATH&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to add startup script to instance &apos;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$INSTANCE_NAME&lt;/span&gt;&lt;span&gt;&apos; の作成、スタートアップスクリプト登録、metadata設定が正常に完了しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のコマンドは、以下のパラメータを使用してVMインスタンスを作成します：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_instance_and_configure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e2-medium&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;インスタンス名: instance-test&lt;/li&gt;
&lt;li&gt;ゾーン: us-central1-a&lt;/li&gt;
&lt;li&gt;マシンタイプ: e2-medium&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;内部的には、&lt;code&gt;create_gce_instance&lt;/code&gt;関数を呼び出してインスタンスを作成し、&lt;code&gt;set_gce_instance_metadata_from_yaml&lt;/code&gt;関数でメタデータを設定し、&lt;code&gt;add_startup_script_to_gce_instance&lt;/code&gt;関数でスタートアップスクリプトを登録します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set_gce_instance_metadata_from_yaml&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vm_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yaml_file&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;yml&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fn_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;set_gce_instance_metadata_from_yaml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプオプション&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Usage: set_instance_metadata_from_yaml &amp;lt;VM_NAME&amp;gt; &amp;lt;ZONE&amp;gt; [YAML_FILE]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Example: set_instance_metadata_from_yaml my-vm us-central1-a env.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;If YAML_FILE is not specified, &apos;env.yml&apos; will be used by default.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# YAMLファイルの存在チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$yaml_file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error: YAML file &apos;&lt;/span&gt;&lt;span&gt;$yaml_file&lt;/span&gt;&lt;span&gt;&apos; not found!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# YAMLを key=value 形式に変換&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metadata_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IFS&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 空白を除去&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;xargs&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;xargs&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 空行やコメント行を無視&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\#&lt;/span&gt;&lt;span&gt;* ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;metadata_args&lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$value&lt;/span&gt;&lt;span&gt;,&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt; &amp;lt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$yaml_file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 最後のカンマを削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;metadata_args&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;metadata_args&lt;/span&gt;&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$metadata_args&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] No valid metadata found in &apos;&lt;/span&gt;&lt;span&gt;$yaml_file&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud compute instances add-metadata を実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$vm_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$metadata_args&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ret_code&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$ret_code&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;fn_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Env variables of instance &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;vm_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; have set successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;fn_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to set env variables for instance &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;vm_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$ret_code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_startup_script_to_gce_instance&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;add_startup_script_to_gce_instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DEFAULT_ZONE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;us-central1-a&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DEFAULT_FILE_PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./shell/setup_scripts/startup-script.sh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help が指定された場合は利用方法を表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; VM_NAME ZONE [FILE_PATH]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Example: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; my-vm &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DEFAULT_ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DEFAULT_FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: If ZONE is not provided, default value &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DEFAULT_ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; is used.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: If FILE_PATH is not provided, default value &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DEFAULT_FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; is used.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 必須パラメータの数チェック (1～3個)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Invalid number of parameters.&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; VM_NAME [ZONE] [FILE_PATH]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VM_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ZONE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$DEFAULT_ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 3番目の引数が未指定の場合はデフォルト値を使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FILE_PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$DEFAULT_FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;VM_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--metadata-from-file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startup-script=&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Failed to add metadata from file &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; to instance &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;VM_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; in zone &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: Successfully added metadata from file &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FILE_PATH&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; to instance &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;VM_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; in zone &apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ZONE&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;VMの起動時に特定のスクリプトを実行したい場合は、カスタムのスタートアップスクリプトを作成し、&lt;code&gt;create_gce_instance_and_configure&lt;/code&gt;関数の第5引数として指定できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_instance_and_configure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e2-medium&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;env.yml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/path/to/custom-startup-script.sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;スタートアップスクリプトに関しては後述します！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. create_gce_router_and_nat&lt;a href=&quot;#2-create_gce_router_and_nat&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この関数は、Cloud RouterとCloud NATを作成します。これにより、外部IPアドレスを持たないインスタンスからインターネットにアクセスできるようになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_gce_router_and_nat&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;create_gce_router_and_nat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ROUTER_NAME [REGION] [NETWORK] [NAT_NAME]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ROUTER_NAME : 作成するルーターの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  REGION      : ルーターとNATを作成するリージョン (デフォルト: us-central1)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  NETWORK     : ルーターを作成するネットワーク (デフォルト: default)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  NAT_NAME    : 作成するNATの名前 (デフォルト: nat1)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック：最低1つはルーター名を指定する必要があります&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ROUTER_NAME [REGION] [NETWORK] [NAT_NAME]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータの初期化（デフォルト値付き）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;router_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;network&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nat_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${4&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nat1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: gcloud コマンドが見つかりません。Google Cloud SDKがインストールされているか確認してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ルーター作成処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;routers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$router_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--region=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$region&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--network=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$network&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: ルーター &apos;&lt;/span&gt;&lt;span&gt;$router_name&lt;/span&gt;&lt;span&gt;&apos; の作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# NAT作成処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;routers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nats&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$nat_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--router=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$router_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--region=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$region&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--auto-allocate-nat-external-ips&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--nat-all-subnet-ip-ranges&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: NAT &apos;&lt;/span&gt;&lt;span&gt;$nat_name&lt;/span&gt;&lt;span&gt;&apos; の作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ルーター &apos;&lt;/span&gt;&lt;span&gt;$router_name&lt;/span&gt;&lt;span&gt;&apos; と NAT &apos;&lt;/span&gt;&lt;span&gt;$nat_name&lt;/span&gt;&lt;span&gt;&apos; が正常に作成されました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のコマンドは、以下のパラメータを使用してCloud RouterとCloud NATを作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_router_and_nat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;router1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nat1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;ルーター名: router1&lt;/li&gt;
&lt;li&gt;リージョン: us-central1&lt;/li&gt;
&lt;li&gt;ネットワーク: default&lt;/li&gt;
&lt;li&gt;NAT名: nat1&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これにより、外部IPアドレスを持たないインスタンスからインターネットにアクセスできるようになります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. setup_gce_firewall_and_ssh&lt;a href=&quot;#3-setup_gce_firewall_and_ssh&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この関数は、SSH接続に必要なファイアウォールルールを設定し、SSH鍵をコピーして、インスタンスにSSH接続します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_gce_firewall_and_ssh&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;setup_gce_firewall_and_ssh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [SSH_KEY_PATH]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  INSTANCE_NAME : SSH 接続対象のインスタンス名 (例: crd1)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ZONE         : インスタンスのゾーン (デフォルト: us-central1-a)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  SSH_KEY_PATH : SSH 秘密鍵ファイルのパス (デフォルト: &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span&gt;/.ssh/google_compute_engine)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック：最低1つはインスタンス名を指定する必要があります&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [SSH_KEY_PATH]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータの初期化（デフォルト値付き）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ssh_key_path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google_compute_engine&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 現在の日付 (YYYYMMDD) をサフィックスとして生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+%Y%m%d&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: gcloud コマンドが見つかりません。Google Cloud SDK がインストールされているか確認してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;【STEP 1】 IAP TCP 転送用の SSH ファイアウォールルールを作成中...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 第一引数にルール名＋実行日付を渡す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;create_gce_iap_ssh_firewall_rule&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;allow-ssh-ingress-from-iap-&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: IAP 用ファイアウォールルールの作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;【STEP 2】 VPC 内 SSH 用のファイアウォールルールを作成中...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;create_gce_ingress_ssh_firewall_rule&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;allow-ingress-ssh-&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: VPC 内 SSH 用ファイアウォールルールの作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;【STEP 3】 SSH 秘密鍵のコピーを実行中...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;copy_gce_ssh_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; への SSH 秘密鍵のコピーに失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;【STEP 4】 インスタンスへの SSH 接続を実行中...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;connect_gce_instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; への SSH 接続に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] ファイアウォール設定、SSH 秘密鍵のコピー、SSH 接続が正常に完了しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のコマンドは、以下の処理を行います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setup_gce_firewall_and_ssh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;IAP TCP転送用のSSHファイアウォールルールを作成&lt;/li&gt;
&lt;li&gt;VPC内SSH用のファイアウォールルールを作成&lt;/li&gt;
&lt;li&gt;SSH秘密鍵のコピーを実行&lt;/li&gt;
&lt;li&gt;インスタンスへのSSH接続を実行&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;ファイアウォールルール名に日付を追加することで、同じ名前のルールが既に存在する場合でも、新しいルールを作成できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+%Y%m%d&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_iap_ssh_firewall_rule&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;allow-ssh-ingress-from-iap-&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. copy_gce_ssh_key&lt;a href=&quot;#4-copy_gce_ssh_key&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この関数は、ローカルのSSH鍵をGCEインスタンスにコピーします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copy_gce_ssh_key&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;copy_gce_ssh_key&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [SSH_KEY_PATH]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  INSTANCE_NAME : SSH 秘密鍵をコピーする対象のインスタンス名&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ZONE         : インスタンスのゾーン (デフォルト: us-central1-a)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  SSH_KEY_PATH : SSH 秘密鍵ファイルのパス (デフォルト: &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span&gt;/.ssh/google_compute_engine)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック: インスタンス名は必須&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR]  Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE] [SSH_KEY_PATH]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ssh_key_path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${3&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$HOME&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google_compute_engine&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: gcloud コマンドが見つかりません。Google Cloud SDK がインストールされているか確認してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# SSH 秘密鍵のコピー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$ssh_key_path&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instance_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:/tmp&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--zone=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--tunnel-through-iap&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; への SSH 秘密鍵のコピーに失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] SSH 秘密鍵 &apos;&lt;/span&gt;&lt;span&gt;$ssh_key_path&lt;/span&gt;&lt;span&gt;&apos; がインスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; の /tmp に正常にコピーされました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のコマンドは、ローカルのSSH鍵をローカルからGCEインスタンスにコピーします。コピーする際に、キーフレーズを適当に長く入力する鍵ファイルを作成する必要がありますね。&lt;/p&gt;&lt;p&gt;&lt;code&gt;setup_gce_firewall_and_ssh&lt;/code&gt;関数内で既に実行されているため、通常は個別に実行する必要はありませんが、必要に応じて使用できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;copy_gce_ssh_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;br /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. connect_gce_instance&lt;a href=&quot;#5-connect_gce_instance&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この関数は、GCEインスタンスにSSH接続します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connect_gce_instance&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;connect_gce_instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --help オプションのチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$@&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$arg&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  INSTANCE_NAME : SSH 接続するインスタンスの名前&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ZONE         : インスタンスが存在するゾーン (デフォルト: us-central1-a)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック: 少なくともインスタンス名は必須&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNC_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INSTANCE_NAME [ZONE]&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# gcloud コマンドの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: gcloud コマンドが見つかりません。Google Cloud SDK がインストールされているか確認してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] **Notice**: Setup Chrome Remote Desktop on your ssh connection and [Remote Desktop Service](&amp;lt;https://remotedesktop.google.com/headless&amp;gt;) if you want.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# インスタンスへの SSH 接続処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--zone=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;--tunnel-through-iap&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] Error: インスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; への SSH 接続に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] インスタンス &apos;&lt;/span&gt;&lt;span&gt;$instance_name&lt;/span&gt;&lt;span&gt;&apos; への SSH 接続が正常に完了しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;このコマンドは、GCEインスタンスにSSH接続します。&lt;code&gt;setup_gce_firewall_and_ssh&lt;/code&gt;関数内で既に実行されているため、通常は個別に実行する必要はありませんが、既存のインスタンスに接続する場合などに使用できます。&lt;/p&gt;&lt;p&gt;以下のコマンドは、以下の処理を行います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;connect_gce_instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;IAP（Identity-Aware Proxy）の設定により、Google Cloud Identity-Aware Proxy（IAP）を使用してSSH接続します。IAPを使用すると、外部IPアドレスを持たないインスタンスにも安全にアクセスできます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$ssh_key_path&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instance_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:/tmp&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--zone=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$zone&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--tunnel-through-iap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そんなこんなで、先程適当に長く入力したキーフレーズを再び入力すれば、GCEインスタンスにSSH接続が出来ます。&lt;a href=&quot;https://remotedesktop.google.com/access/?hl=ja&quot; target=&quot;_blank&quot;&gt;このリンク&lt;/a&gt;からChromeリモートデスクトップにアクセスして、その「SSH経由でセットアップする」からパソコンを設定します。その過程でPINを設定すれば、その後はリモデでアクセス出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;2428&quot; height=&quot;1269&quot; src=&quot;/_astro/21.DOBu75EX_ZbvrGs.webp&quot; srcset=&quot;/_astro/21.DOBu75EX_Z1c5qa3.webp 640w, /_astro/21.DOBu75EX_Zj6KUO.webp 750w, /_astro/21.DOBu75EX_Zc5e0i.webp 828w, /_astro/21.DOBu75EX_hjHrT.webp 1080w, /_astro/21.DOBu75EX_n15IM.webp 1280w, /_astro/21.DOBu75EX_23r0R.webp 1668w, /_astro/21.DOBu75EX_Z1ntpL8.webp 2048w, /_astro/21.DOBu75EX_ZbvrGs.webp 2428w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際の使用方法&lt;a href=&quot;#実際の使用方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらの関数を組み合わせて、SSH接続できるDebian VMを構築する手順は以下の通りです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 1. VMインスタンスを作成して設定する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_instance_and_configure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e2-medium&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 2. ルーターとNATを作成する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_router_and_nat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;router1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nat1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 3. ファイアウォール設定とSSH接続の設定を行う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setup_gce_firewall_and_ssh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 4. SSH鍵をコピーする（必要に応じて）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;copy_gce_ssh_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 5. インスタンスにSSH接続する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;connect_gce_instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他の詳細&lt;a href=&quot;#その他の詳細&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. スタートアップスクリプトをカスタマイズする。&lt;a href=&quot;#1-スタートアップスクリプトをカスタマイズする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;VMの起動時に特定のスクリプトを実行したい場合は、カスタムのスタートアップスクリプトを作成してVMに反映します。今回は、&lt;code&gt;create_gce_instance_and_configure&lt;/code&gt;関数の第5引数として指定していたスタートアップスクリプトを、以下のような内容で反映しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#!/bin/bash -x&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Startup script to install Chrome remote desktop and a desktop environment.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# See environmental variables at then end of the script for configuration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --helpオプションの確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-h&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Usage:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;通知テキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedのテキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedのフッターテキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;EmbedのアイコンのURL&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedの色&amp;gt;&lt;/span&gt;&lt;span&gt; [DISCORD_WEBHOOK_URL]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Parameters:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;通知テキスト&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;通知内容のテキスト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Embedのテキスト&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Embedメッセージの内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Embedのフッターテキスト&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Embedフッターに表示するテキスト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;EmbedのアイコンのURL&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Embedフッターに表示するアイコンのURL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Embedの色&lt;/span&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Embedの色（10進数の数値または以下の文字列指定が可能）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;DISCORD_WEBHOOK_URL&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; (任意) DiscordのWebhook URL。省略した場合は環境変数DISCORD_WEBHOOK_URLを使用します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Samples:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4569935&lt;/span&gt;&lt;span&gt;   (0x45BB4F)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16711680&lt;/span&gt;&lt;span&gt;  (0xFF0000)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sky_blue&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;52479&lt;/span&gt;&lt;span&gt;     (0x00CCFF)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;orange&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;14177041&lt;/span&gt;&lt;span&gt;  (0xD85311)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16777215&lt;/span&gt;&lt;span&gt;  (0xFFFFFF)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;39423&lt;/span&gt;&lt;span&gt;     (0x0099FF)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;yellow&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16770560&lt;/span&gt;&lt;span&gt;  (0xFFE600)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pink&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16711833&lt;/span&gt;&lt;span&gt;  (0xFF0099)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;purple&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10494192&lt;/span&gt;&lt;span&gt;  (0xA020F0)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;gray_blue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;9212588&lt;/span&gt;&lt;span&gt;   (0x8C92AC)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;black&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3355443&lt;/span&gt;&lt;span&gt;   (0x333333)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Examples:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Using environment variable DISCORD_WEBHOOK_URL (5 arguments)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;通知テキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Embedのテキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Embedのフッターテキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://example.com/footer_icon.png&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Explicitly specifying DISCORD_WEBHOOK_URL as the last argument (6 arguments)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;通知テキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Embedのテキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Embedのフッターテキスト&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://example.com/footer_icon.png&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://discord.com/api/webhooks/your_webhook_id/your_webhook_token&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_footer_text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_icon_url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhook_url&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Embedなし&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数の個数チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;webhook_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DISCORD_WEBHOOK_URL&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# JSONペイロードの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# curlでDiscordのWebhookにPOSTリクエストを送信&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$payload&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$webhook_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Embedあり&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数の個数チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_footer_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_icon_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;webhook_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DISCORD_WEBHOOK_URL&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_footer_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_icon_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$4&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;webhook_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$6&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error: 引数の数が正しくありません。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Usage: &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &amp;lt;通知テキスト&amp;gt; &amp;lt;Embedのテキスト&amp;gt; &amp;lt;Embedのフッターテキスト&amp;gt; &amp;lt;EmbedのアイコンのURL&amp;gt; &amp;lt;Embedの色&amp;gt; [DISCORD_WEBHOOK_URL];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# いずれかの引数が空文字だった場合のエラーハンドリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_text&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_icon_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_color&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$webhook_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error: 引数に空文字が含まれています。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Usage:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;通知テキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedのテキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedのフッターテキスト&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;EmbedのアイコンのURL&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;Embedの色&amp;gt;&lt;/span&gt;&lt;span&gt; [DISCORD_WEBHOOK_URL];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Embedの色が文字列の場合、対応する10進数の値に変換&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_color&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;4569935&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;16711680&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;sky_blue&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;52479&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;orange&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;14177041&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;white&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;16777215&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;39423&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;yellow&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;16770560&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;pink&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;16711833&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;purple&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10494192&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;gray_blue&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;9212588&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;black&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;3355443&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 数値が直接入力されているものとみなす&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# JSONペイロードの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;content&quot;: &quot;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;embeds&quot;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;description&quot;: &quot;&lt;/span&gt;&lt;span&gt;$embed_text&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;: &lt;/span&gt;&lt;span&gt;$embed_color&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;timestamp&quot;: &quot;$(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-u&lt;/span&gt;&lt;span&gt; +&quot;%Y-%m-%dT%H:%M:%SZ&quot;)&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;footer&quot;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;text&quot;: &quot;&lt;/span&gt;&lt;span&gt;$embed_footer_text&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;icon_url&quot;: &quot;&lt;/span&gt;&lt;span&gt;$embed_icon_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# curlでDiscordのWebhookにPOSTリクエストを送信&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$payload&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$webhook_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;send_discord_notification_about_gce&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 第一引数以降のパラメータは send_discord_notification と同じ順序&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 通知テキストに [GCE] プレフィックスを追加する例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_color&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_footer_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;GoogleComputeEngine&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embed_icon_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$GCE_ICON_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhook_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$DISCORD_WEBHOOK_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# webhook_url が空でないかチェックし、あれば最後の引数として渡す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$webhook_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_text&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_footer_text&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_icon_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_color&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$webhook_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_text&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_footer_text&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_icon_url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$embed_color&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set_env_var_from_custom_metadata&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MY_CUSTOM_VALUE&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Metadata-Flavor: Google&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;http://metadata.google.internal/computeMetadata/v1/instance/attributes/&lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$key&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$MY_CUSTOM_VALUE&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_chrome_remote_desktop&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://dl.google.com/linux/linux_signing_key.pub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gpg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dearmor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/trusted.gpg.d/chrome-remote-desktop.gpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;deb [arch=amd64] https://dl.google.com/linux/chrome-remote-desktop/deb stable main&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tee&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/sources.list.d/chrome-remote-desktop.list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DEBIAN_FRONTEND=noninteractive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chrome-remote-desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup for Chrome Remote Desktop completed successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_xfce_desktop_env&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Xfce デスクトップ環境の導入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DEBIAN_FRONTEND=noninteractive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xfce4&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;desktop-base&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dbus-x11&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xscreensaver&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Xfce デスクトップ環境をデフォルトへ設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;echo &quot;exec /etc/X11/Xsession /usr/bin/xfce4-session&quot; &amp;gt; /etc/chrome-remote-desktop-session&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Chrome ブラウザをインストール&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-L&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--fix-broken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Color Manager を停止&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colord&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colord&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup for Xfce (X Windows System Desktop Environment) completed successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_desktop_env_with_xfce&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;install_chrome_remote_desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;install_xfce_desktop_env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_lxqt_desktop_env&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# LXQt デスクトップ環境の導入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DEBIAN_FRONTEND=noninteractive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lxqt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dbus-x11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# LXQt デスクトップ環境をデフォルトへ設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;exec startlxqt&quot;&lt;/span&gt;&lt;span&gt; &amp;gt; &lt;/span&gt;&lt;span&gt;/etc/chrome-remote-desktop-session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Chrome ブラウザをインストール&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-L&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--fix-broken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Color Manager を停止&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colord&lt;/span&gt;&lt;span&gt; 2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colord&lt;/span&gt;&lt;span&gt; 2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup for LXQt (X Windows System Desktop Environment) completed successfully.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_desktop_env_with_lxqt&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;install_chrome_remote_desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;install_lxqt_desktop_env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;download_and_install&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;# args URL FILENAME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;-e&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cannot download &lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt; to &lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt; - file exists&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-L&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assume-yes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--fix-broken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is_installed&lt;/span&gt;&lt;span&gt; {  &lt;/span&gt;&lt;span&gt;# args PACKAGE_NAME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;dpkg-query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-q&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;^ii&quot;&lt;/span&gt;&lt;span&gt; 2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_japanese_locale&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# install japanese locale&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;locales&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;localectl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set-locale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LANG=ja_JP.UTF-8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LANGUAGE=&quot;ja_JP:ja&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/default/locale&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$LANG&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# install japanese locale for desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;task-japanese-desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_japanese_timezone&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;777&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/localtime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Asia/Tokyo&lt;/span&gt;&lt;span&gt; &amp;gt; &lt;/span&gt;&lt;span&gt;/etc/timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;644&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dpkg-reconfigure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;noninteractive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tzdata&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;277&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;278&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install_japanese_input_method&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;279&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# install input methods&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;280&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;281&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fcitx5-mozc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;282&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;283&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;touch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/.profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;284&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;inserting&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;285&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;286&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;dbus-update-activation-environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--systemd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DBUS_SESSION_BUS_ADDRESS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISPLAY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;XAUTHORITY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;287&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;288&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;289&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GTK_IM_MODULE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fcitx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;290&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;QT_IM_MODULE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fcitx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;291&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;XMODIFIERS&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;@im=fcitx&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;292&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$SHLVL&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;293&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fcitx5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--disable=wayland&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--verbose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;*&apos;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &amp;amp;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;294&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;xset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;49&lt;/span&gt;&lt;span&gt;  &amp;gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;295&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;296&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;297&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;298&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inserting&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;~/.profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;299&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;300&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;im-config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fcitx5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;301&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;302&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;303&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_dev_resources&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;304&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Setup development resources&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;305&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# local home_dir=&quot;$DEV_HOME&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;306&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;307&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;308&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;309&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;310&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup_vscode&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;311&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Install VSCode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;312&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;wget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-qO-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://packages.microsoft.com/keys/microsoft.asc&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;gpg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dearmor&lt;/span&gt;&lt;span&gt; &amp;gt; &lt;/span&gt;&lt;span&gt;packages.microsoft.gpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;313&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-D&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;644&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages.microsoft.gpg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/apt/keyrings/packages.microsoft.gpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;314&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;echo &quot;deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main&quot; &amp;gt; /etc/apt/sources.list.d/vscode.list&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;315&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;packages.microsoft.gpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;316&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-transport-https&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;317&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;318&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;319&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;320&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;321&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Configure the following environmental variables as required:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;322&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSTALL_XFCE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;323&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSTALL_CINNAMON&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;324&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSTALL_CHROME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;325&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSTALL_FULL_DESKTOP&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;yes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;326&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;327&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Any additional packages that should be installed on startup can be added here&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;328&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXTRA_PACKAGES&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;less bzip2 zip unzip tasksel wget&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;329&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;330&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_env_var_from_custom_metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VSC_PROFILE_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;331&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_env_var_from_custom_metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISCORD_WEBHOOK_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;332&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set_env_var_from_custom_metadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GCE_ICON_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;333&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのカスタムメタデータを環境変数に反映したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;334&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;335&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのスタートアップスクリプトを実行するよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;336&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;337&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;338&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;339&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Install X Windows desktop system&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;340&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ! &lt;/span&gt;&lt;span&gt;is_installed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chrome-remote-desktop&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;341&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# install_desktop_env_with_xfce&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;342&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;install_desktop_env_with_lxqt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;343&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;344&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;345&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install_desktop_env_with_xfce&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;346&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install_desktop_env_with_lxqt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;347&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのデスクトップ環境の設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;348&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;349&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# [[ &quot;$INSTALL_CHROME&quot; = &quot;yes&quot; ]] &amp;amp;&amp;amp; ! is_installed google-chrome-stable &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;350&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   download_and_install \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;351&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#     https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;352&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#     /tmp/google-chrome-stable_current_amd64.deb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;353&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;354&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Chrome remote desktop installation completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;355&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのChromeリモデの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;356&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;357&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;install_japanese_locale&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;358&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Install japanese locale completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;359&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのロケールの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;360&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;361&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setup_japanese_timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;362&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup timezone completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;363&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのタイムゾーンの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;364&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;365&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;install_japanese_input_method&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;366&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Pre-installation of japanese input methods completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;367&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのIMEの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;368&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;369&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setup_dev_resources&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;370&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup development resources completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;371&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMの開発リソースの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;372&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;373&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setup_vscode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;374&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] Setup for VSCode completed&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;375&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのVSCodeの設定が完了したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;376&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;send_discord_notification_about_gce&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;終わった！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;VMのスタートアップスクリプトが完了したよ！&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;まだ、細かいところが整備途中ですが、これでLXQtデスクトップ環境が立ち上がります。スタートアップスクリプトの実行が完了すると、自分のDiscordチャンネルにWebhookを介して通知が飛ぶようにもなっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. メタデータを設定する。&lt;a href=&quot;#2-メタデータを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そのDiscordのWebhookのURLを設定するために、VMのメタデータを設定する必要があります。&lt;/p&gt;&lt;p&gt;VMのメタデータを設定したい場合は、YAMLファイルを作成し、&lt;code&gt;create_gce_instance_and_configure&lt;/code&gt;関数の第4引数として指定できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;create_gce_instance_and_configure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance-test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;us-central1-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e2-medium&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/path/to/custom-metadata.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Chrome Remote Desktopを設定する。&lt;a href=&quot;#3-chrome-remote-desktopを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;connect_gce_instance&lt;/code&gt;関数は、SSH接続時にChrome Remote Desktopの設定を促すメッセージを表示します。これを利用して、GUIが必要な作業も行えるようになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] **Notice**: Setup Chrome Remote Desktop on your ssh connection and [Remote Desktop Service](&amp;lt;https://remotedesktop.google.com/headless&amp;gt;) if you want.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. リモデで接続した後。&lt;a href=&quot;#4-リモデで接続した後&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リモデしてVM内のデスクトップから実行しないと設定できない事柄があったりもします。例えば、日本語キーボード配列に変更することです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update_japanese_input_method&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Set keyboard layout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setxkbmap&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jp109a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-layout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fcitx5&lt;/span&gt;&lt;span&gt; &amp;amp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fcitx5-configtool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;トラブルシューティング&lt;a href=&quot;#トラブルシューティング&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. SSH接続ができない場合。&lt;a href=&quot;#1-ssh接続ができない場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;IAPを使用したSSH接続ができない場合は、以下を確認してください。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ファイアウォールルールが正しく設定されているか。&lt;/li&gt;
&lt;li&gt;インスタンスが実行中であるか。&lt;/li&gt;
&lt;li&gt;適切なIAM権限が付与されているか。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 権限エラーが発生する場合。&lt;a href=&quot;#2-権限エラーが発生する場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;必要なIAM権限が付与されているか確認してください。最低限、以下の権限が必要です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;compute.instances.create&lt;/li&gt;
&lt;li&gt;compute.instances.get&lt;/li&gt;
&lt;li&gt;compute.instances.list&lt;/li&gt;
&lt;li&gt;compute.zones.get&lt;/li&gt;
&lt;li&gt;compute.routers.create&lt;/li&gt;
&lt;li&gt;compute.routers.update&lt;/li&gt;
&lt;li&gt;compute.networks.updatePolicy&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. クォータ制限に達した場合&lt;a href=&quot;#3-クォータ制限に達した場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GCPプロジェクトには、リージョンごとにVMインスタンスの数やCPUコアの数などのクォータ制限があります。クォータ制限に達した場合は、Google Cloudのコンソールからクォータの引き上げをリクエストしてください。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Compute Engine上にSSH接続できるDebian VMを簡単に構築するためのシェル関数を作成しました。この関数を使えば、コマンド一つでVMを作成し、SSH上でChromeリモートデスクトップのPINコードを作成すれば、すぐにSSH接続することができます。&lt;/p&gt;&lt;p&gt;以下の処理を紹介しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;GCEインスタンスを立ち上げる。&lt;/li&gt;
&lt;li&gt;メタデータを設定する。&lt;/li&gt;
&lt;li&gt;スタートアップスクリプトを配置する。&lt;/li&gt;
&lt;li&gt;ルーターを設定する。&lt;/li&gt;
&lt;li&gt;NATを設定する。&lt;/li&gt;
&lt;li&gt;ファイアウォールルールを設定する。&lt;/li&gt;
&lt;li&gt;SSH 秘密鍵を設定して、GCEインスタンス内にコピーする。&lt;/li&gt;
&lt;li&gt;GCEインスタンスにSSH接続する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;開発環境やテスト環境の素早い構築に役立つだけでなく、このシェル関数をベースにして、より複雑な環境構築のための関数を作成することもできます。例えば、特定のソフトウェアが自動的にインストールされるVMや、特定の設定が適用されたVMなど、用途に応じてカスタマイズしてみてください。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、Enterキーで立ち上がるぞぉ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;すぐにDebianを立ち上げられます。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion API】100個以上のブロックをページに追加するためのPythonスクリプト</title><link>https://endorphinbath.com/posts/python-script-to-add-100-blocks-in-notion/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-script-to-add-100-blocks-in-notion/</guid><description>Notion APIではページに100個以上のブロックを追加出来ないという制約があります。その制約の元で一つのページに100個以上のブロックを追加するPython関数を紹介します。</description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、入れたいブロックが多過ぎる・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちゃんとチャンクを分けよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notion APIのブロック数制限とは？&lt;a href=&quot;#notion-apiのブロック数制限とは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notion APIを使ってページにブロックを追加する際、&lt;strong&gt;一度のリクエストで追加できるブロック数は最大100個&lt;/strong&gt;に制限されています。この制限を超えるとエラーが発生してしまいます。&lt;/p&gt;&lt;p&gt;例えば、マークダウンから変換した200個のブロックを一度に追加しようとすると・・・、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# これはエラーになる例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion.blocks.children.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;block_id&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;page_id,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;blocks_list  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 200個のブロックが含まれている&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このコードを実行すると、以下のようなエラーが返されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Error: Request failed with status code 400&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&quot;object&quot;:&quot;error&quot;,&quot;status&quot;:400,&quot;code&quot;:&quot;validation_error&quot;,&quot;message&quot;:&quot;children exceeds maximum size of 100 items&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決策：複数のリクエストに分割する&lt;a href=&quot;#解決策複数のリクエストに分割する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この制限を突破するには、&lt;strong&gt;ブロックを100個以下のグループに分割して、複数のリクエストに分けて送信する&lt;/strong&gt;必要があります。&lt;/p&gt;&lt;p&gt;ポイントは以下の2つです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;最初のリクエストでページを作成し、その後のリクエストでブロックを追加していく。&lt;/li&gt;
&lt;li&gt;2回目以降のリクエストでは、前回追加したブロックの後に新しいブロックを追加する。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実装例：100個以上のブロックを追加するPythonスクリプト&lt;a href=&quot;#実装例100個以上のブロックを追加するpythonスクリプト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、具体的な実装例を見ていきましょう。以下のコードは、Notion APIを使って100個以上のブロックをページに追加するためのPythonスクリプトです。&lt;/p&gt;&lt;p&gt;ちなみにこのコードは、実際に僕が書いた100個以上のブロックを追加する処理をAIに読ませて、AIに作ってもらったものです。（AIモデルはClaud 3.7 Sonnetです。3.5でも試したんですけど、そっちはCline上で僕のスクリプトを読んでくれず、さらにちゃんと実装できていませんでした。リクエストの回数が足りていなかったりしました。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Union&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.token &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; token&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Bearer &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.base_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;https://api.notion.com/v1&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; requests.Response:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;Notionへのリクエストを実行する関数&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.base_url&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;url,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.headers,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;method,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;url,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.headers,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(payload),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;block_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;ブロックの子要素を取得するためのエンドポイントを生成する関数&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;/blocks/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;block_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/children&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_blocks_over_threshold&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;notion_api&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; NotionAPI&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blocks&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;database_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100個以上のブロックをNotionページに追加する関数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_api: NotionAPIのインスタンス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blocks: 追加するブロックのリスト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: 既存のページIDがある場合に指定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;database_id: 新規ページを作成する場合のデータベースID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;properties: 新規ページを作成する場合のプロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threshold: 一度に追加するブロックの最大数（デフォルト: 100）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str: 作成または更新されたページのID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; blocks:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ブロックリストが空です&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ブロックを閾値（デフォルト100個）ごとに分割&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;block_chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [blocks[i:i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; threshold] &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(blocks), threshold)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;ブロックを&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(block_chunks)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;つのチャンクに分割しました&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 最初のチャンク処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; page_id &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 新規ページ作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; database_id &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; properties &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;新規ページ作成には database_id と properties が必要です&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;: database_id},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: properties,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: block_chunks[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/pages&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;エラー: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response_data[&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;新規ページを作成しました: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;page_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 既存ページにブロックを追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: block_chunks[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;span&gt;&quot;PATCH&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;エラー: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;最初のブロックチャンクを追加しました&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 残りのチャンクを処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(block_chunks) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i, chunk &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(block_chunks[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:], &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 最後に追加されたブロックのIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;, {})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;エラー: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response_data.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;, [])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; results:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;前回追加したブロックが見つかりません&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 最後のブロックIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;last_block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; results[&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 次のチャンクを追加（前回追加したブロックの後に追加）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: chunk,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;: last_block_id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;span&gt;&quot;PATCH&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;エラー: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;ブロックチャンク &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(block_chunks)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; を追加しました&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; page_id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;FIXME&lt;/span&gt;&lt;span&gt;: Notion APIトークン&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;token &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_notion_api_token&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_api &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;(token)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;FIXME&lt;/span&gt;&lt;span&gt;: データベースID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;database_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_database_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;FIXME&lt;/span&gt;&lt;span&gt;: ページプロパティ: プロパティ名は各自編集してください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;properties &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;100個以上のブロックを持つページ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;タグ&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;select&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;テスト&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 追加するブロック（例として200個のパラグラフブロック）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blocks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blocks.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;block&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;paragraph&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;paragraph&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;これはテスト用のパラグラフ &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1}&lt;/span&gt;&lt;span&gt; です。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_blocks_over_threshold&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;notion_api&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;notion_api,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;blocks&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;blocks,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;database_id&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;database_id,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; page_id:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;すべてのブロックが正常に追加されました。ページID: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;page_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ブロックの追加に失敗しました。&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;こんなの書けちゃうんだなあ・・・。APIとのやり取りは苦手だと思ってたんですけど。&lt;/p&gt;&lt;p&gt;上記のスクリプトを動かすと、ターミナル上で以下のように出力されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ブロックを2つのチャンクに分割しました&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;新規ページを作成しました: xxxxxxxx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;yyyy&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;81fb&lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;zzzz&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;123456a87890&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ブロックチャンク &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; を追加しました&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;すべてのブロックが正常に追加されました。ページID: xxxxxxxx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;yyyy&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;81fb&lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;zzzz&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;123456a87890&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;追加されたページはこんな感じでした。ちゃんと100個以上の新規ブロックがNotionのページに反映されています。（まあ、パラグラフブロックしか追加していませんが。）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;100個以上の新規ブロックがNotionのページに反映された&quot; loading=&quot;lazy&quot; width=&quot;1702&quot; height=&quot;1134&quot; src=&quot;/_astro/11.MUgpZUt8_2beOtV.webp&quot; srcset=&quot;/_astro/11.MUgpZUt8_2Orzq.webp 640w, /_astro/11.MUgpZUt8_Z2nfRNd.webp 750w, /_astro/11.MUgpZUt8_VQXMm.webp 828w, /_astro/11.MUgpZUt8_ZjNiFn.webp 1080w, /_astro/11.MUgpZUt8_ZJRUvk.webp 1280w, /_astro/11.MUgpZUt8_Yk6F4.webp 1668w, /_astro/11.MUgpZUt8_2beOtV.webp 1702w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;100個以上の新規ブロックがNotionのページに反映されたの続き&quot; loading=&quot;lazy&quot; width=&quot;1604&quot; height=&quot;903&quot; src=&quot;/_astro/12.DnhejTFS_1pnd04.webp&quot; srcset=&quot;/_astro/12.DnhejTFS_1ITnqV.webp 640w, /_astro/12.DnhejTFS_ZSQCfu.webp 750w, /_astro/12.DnhejTFS_Z2eMAHW.webp 828w, /_astro/12.DnhejTFS_Z1uhOJj.webp 1080w, /_astro/12.DnhejTFS_Zuoczr.webp 1280w, /_astro/12.DnhejTFS_1pnd04.webp 1604w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実装のポイント解説&lt;a href=&quot;#実装のポイント解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このスクリプトの重要なポイントを詳しく解説します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. ブロックの分割&lt;a href=&quot;#1-ブロックの分割&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、追加するブロックのリストを100個（または指定した閾値）ごとに分割します。これにより、Notion APIの制限を回避できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ブロックを閾値（デフォルト100個）ごとに分割&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;block_chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [blocks[i:i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; threshold] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(blocks), threshold)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 最初のチャンクの処理&lt;a href=&quot;#2-最初のチャンクの処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最初のチャンクは、新規ページを作成するか、既存のページにブロックを追加するかで処理が異なります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 新規ページ作成の場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;: database_id},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: properties,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: block_chunks[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/pages&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 既存ページにブロックを追加する場合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: block_chunks[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;PATCH&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 残りのチャンクの処理&lt;a href=&quot;#3-残りのチャンクの処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;2回目以降のチャンクを追加する際は、前回追加したブロックの後に追加するために、&lt;code&gt;after&lt;/code&gt;パラメータを使用します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 最後に追加されたブロックのIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;, {})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;last_block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response_data.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, [])[&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 次のチャンクを追加（前回追加したブロックの後に追加）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: chunk,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;: last_block_id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_api.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;PATCH&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この&lt;code&gt;after&lt;/code&gt;パラメータが重要で、これにより前回追加したブロックの直後に新しいブロックを追加できます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際のプロジェクトでの応用例&lt;a href=&quot;#実際のプロジェクトでの応用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際のプロジェクトでは、より複雑な処理が必要になることがあります。例えば、別のプロジェクトでは以下のような実装が行われています。&lt;/p&gt;&lt;p&gt;ちなみに以下のコードは僕が書いたもので、繰り返しているのでコードの長さは短くはなっていますが、AIが実装したコードは繰り返していないので長めになっていました。しかし、AIが作ったコードの方が見やすかったりするかもしれない。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_notion_to_insert_task_page_over_threshold_of_block&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payloads&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; list[&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;category_for_content&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; tuple[Union[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;複数のペイロードを使用してNotionページを作成・更新する関数&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 入力検証（省略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_duplicated &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_updated &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inserted_page_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;npg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionDailyPropertyGenerator&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_product_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;NOTION_PRODUCT_URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_db_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;DB_ID_OF_TASKS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notion_view_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;VIEW_ID_MY_TASKS_POWERING_BOARD&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nc &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotifyingCategory&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;na &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;category_for_content_modified &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nc.&lt;/span&gt;&lt;span&gt;CONTENT_FOR_NOTHING&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;method &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i, payload &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(payloads):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Processing payload &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt;i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(payloads)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 最初のペイロードは新規ページ作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;ENDPOINT_OF_NOTION_API_PAGES&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 2回目以降は既存ページにブロックを追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;method &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;PATCH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;ENDPOINT_OF_NOTION_API_BLOCKS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id, endpoint)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;: payload[&lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;: block_id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, method, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 成功時の処理（省略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;# 最初のペイロード成功時、ページIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; npg.&lt;/span&gt;&lt;span&gt;get_inserted_notion_page_id_from_response&lt;/span&gt;&lt;span&gt;(response)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;category_for_content_modified &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; category_for_content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_updated &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;# 2回目以降のペイロード成功時、最後のブロックIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; npg.&lt;/span&gt;&lt;span&gt;get_inserted_notion_last_block_id_from_response&lt;/span&gt;&lt;span&gt;(response)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; npg.&lt;/span&gt;&lt;span&gt;reform_block_id_for_requesting&lt;/span&gt;&lt;span&gt;(block_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 最後に追加されたブロックのIDを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; notion_cfg.&lt;/span&gt;&lt;span&gt;ENDPOINT_OF_NOTION_API_BLOCKS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;get_endpoint_to_retrieve_block_children&lt;/span&gt;&lt;span&gt;(page_id, endpoint)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; na.&lt;/span&gt;&lt;span&gt;fetch_notion&lt;/span&gt;&lt;span&gt;(endpoint, &lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;, payload)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; response.ok:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;block_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; npg.&lt;/span&gt;&lt;span&gt;get_inserted_notion_last_block_id_from_response&lt;/span&gt;&lt;span&gt;(response)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Error: with HTTP status code: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;Error: with HTTP status code: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.status_code&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;response.text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inserted_page_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; inserted_page_url, is_duplicated, is_updated, category_for_content_modified&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;このコードは、複数のペイロードを順番に処理し、100個以上のブロックを持つページを作成します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;注意点とベストプラクティス&lt;a href=&quot;#注意点とベストプラクティス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notion APIで大量のブロックを追加する際の注意点とノウハウ的なものをいくつか紹介します。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;エラーハンドリングを適切に行う&lt;/strong&gt; APIリクエストが失敗した場合に適切に対応できるよう、エラーハンドリングを実装しましょう。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;レート制限に注意する&lt;/strong&gt; Notion APIにはレート制限があります。短時間に大量のリクエストを送ると制限にかかる可能性があるため、必要に応じて遅延を入れましょう。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ブロック数を事前に確認する&lt;/strong&gt; 追加するブロック数が閾値を超える場合のみ分割処理を行うようにすると、効率的です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ネストされたブロックに注意する&lt;/strong&gt; 見出しの中に子ブロックがネストされている場合、それらも合計ブロック数にカウントされます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PATCHでリクエストする時のボディに注意する&lt;/strong&gt; PATCHメソッドでリクエストする際に、リクエストボディにプロパティが不要な場合もあります。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notion APIには一度に追加できるブロック数に100個という制限がありますが、適切な実装によってこの制限を回避し、100個以上のブロックを持つページを作成することができます。&lt;/p&gt;&lt;p&gt;ポイントは以下の通りです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブロックを100個以下のチャンクに分割する。&lt;/li&gt;
&lt;li&gt;最初のチャンクでページを作成し、残りのチャンクは既存ページに追加する。&lt;/li&gt;
&lt;li&gt;2回目以降のチャンクを追加する際は、&lt;code&gt;after&lt;/code&gt;パラメータを使用して前回追加したブロックの後に追加する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;この方法を使えば、Markdownから変換した大量のブロックや、プログラムで生成した複雑なページ構造も、Notion APIを使って簡単に作成できます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだよ、これが欲しかったんだよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちゃんとチャンクを分けよう。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Document AI】確定申告のために為替差益の計算に必要なデータを抽出する</title><link>https://endorphinbath.com/posts/documentai-for-foreign-exchange-profit/</link><guid isPermaLink="true">https://endorphinbath.com/posts/documentai-for-foreign-exchange-profit/</guid><description>Document AIを使用して、確定申告のために必要なデータである為替差益に関する情報を、証券口座から受け取った書類からOCRして、スプレッドシートに一気に反映していく方法を紹介します。</description><pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今年もアレの季節だな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;アレだね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;しかも昨年はアレをしたからな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;アレをしたね&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;為替差益の計算を自動化したい&lt;a href=&quot;#為替差益の計算を自動化したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;昨年、円安前から貯め続けていた外貨を円に換えてしまいました・・・。&lt;/p&gt;&lt;p&gt;確定申告の際、為替取引による利益（為替差益）を計算する必要がありますが、取引履歴のPDFから必要なデータを手作業で抽出するのは時間がかかり、ミスも起こりやすいものです。&lt;/p&gt;&lt;p&gt;そこで今回は、Google Cloud の Document AI を使って、PDFからOCRで自動的にデータを抽出し、為替差益を計算する方法を紹介します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AIとは？&lt;a href=&quot;#document-aiとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Document AIは、GoogleのCloud AI/MLサービスの1つで、PDFや画像から構造化されたデータを抽出できるサービスです。一般的なOCRとは異なり、以下のような特徴があります:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高度なデータ抽出&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;単なるテキスト認識だけでなく、表形式データの認識が可能&lt;/li&gt;
&lt;li&gt;フォームからの特定フィールドの抽出&lt;/li&gt;
&lt;li&gt;請求書、領収書、契約書などの定型文書の処理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;カスタマイズ可能&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;カスタムプロセッサによる特定データの抽出&lt;/li&gt;
&lt;li&gt;独自のトレーニングデータによる精度向上&lt;/li&gt;
&lt;li&gt;多言語対応&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;実用的な機能&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;自動レイアウト分析&lt;/li&gt;
&lt;li&gt;エンティティ抽出&lt;/li&gt;
&lt;li&gt;テーブル構造の認識&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Document AIは以下のような場面で特に威力を発揮します:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;請求書処理の自動化&lt;/li&gt;
&lt;li&gt;契約書からの重要情報抽出&lt;/li&gt;
&lt;li&gt;金融取引データの分析&lt;/li&gt;
&lt;li&gt;医療記録のデジタル化&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;今回は、この強力なツールを使って確定申告のための為替取引データ抽出を自動化してみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実装手順&lt;a href=&quot;#実装手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下の流れで、為替差益の計算まで完了させたいと思います。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;各証券口座から取引履歴PDFを収集する。&lt;/li&gt;
&lt;li&gt;取引履歴PDFの前処理をする。&lt;/li&gt;
&lt;li&gt;Document AIをセットアップする。&lt;/li&gt;
&lt;li&gt;カスタムプロセッサの作成およびカスタムプロセッサに学習させる。&lt;/li&gt;
&lt;li&gt;Pythonでカスタムプロセッサを使う機能を実装する。&lt;/li&gt;
&lt;li&gt;為替差益を計算する。（今回は総平均法を使います。）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;各証券口座から取引履歴PDFを収集する。&lt;a href=&quot;#各証券口座から取引履歴pdfを収集する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、為替差益が発生した各証券口座から、その為替取引に関わる取引履歴を扱ったPDF文書を収集します。&lt;/p&gt;&lt;p&gt;これは各証券口座にログインして口座管理画面などからアクセスして集められるので操作としては単純ですが・・・。&lt;/p&gt;&lt;p&gt;何せ収集量が多い。&lt;/p&gt;&lt;p&gt;僕が昨年に発生させた為替差益は1箇所の証券口座のみでしたが、それでも4年分の外国証券の取引履歴、配当金に関する書類などを集める必要があったので、この作業だけでも2時間ぐらい掛かりました・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;取引履歴PDFの前処理をする。&lt;a href=&quot;#取引履歴pdfの前処理をする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら、PDFから必要なデータを抽出しやすくするための前処理を行います。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;PDFの表示縮尺を調整してスクリーンショットを撮影する。&lt;/li&gt;
&lt;li&gt;個人情報を省くためにトリミングする。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;スクショのトリミングには、以前にPowerShellで実装したものを使います。実装した時の記事は以下にありますのでご参考程度に。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-html-image-trimming-by-coordinates/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell、HTML】画像の不要な部分を数値化して、その座標でトリミングする&lt;/div&gt;&lt;div&gt;HTMLとJavaScriptとPowerShellで画像を一気にトリミングする記事です。OutOfMemoryExceptionとExternalExceptionをWrite-Errorでやり過ごしたりします。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241207_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;PowerShellにおけるトリミングの処理とは、簡潔に書くとざっと以下のようなイメージです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# PowerShellでトリミング処理を自動化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Trim-Image&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$x&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$y&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$height&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$bitmap&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$height&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$graphics&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Graphics&lt;/span&gt;&lt;span&gt;]::FromImage(&lt;/span&gt;&lt;span&gt;$bitmap&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$graphics.DrawImage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$height&lt;/span&gt;&lt;span&gt;)),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle(&lt;/span&gt;&lt;span&gt;$x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$y&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$height&lt;/span&gt;&lt;span&gt;)),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Drawing.GraphicsUnit&lt;/span&gt;&lt;span&gt;]::Pixel)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$bitmap.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$graphics.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$bitmap.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そんな感じの処理を実行して、以下のようなPNG画像を何枚か作ります。以下はDocument AIを使っている時のスクショです。
&lt;img loading=&quot;lazy&quot; width=&quot;2547&quot; height=&quot;1216&quot; src=&quot;/_astro/11.9_uE7IFQ_ZcuyLx.webp&quot; srcset=&quot;/_astro/11.9_uE7IFQ_Z2cMnUy.webp 640w, /_astro/11.9_uE7IFQ_1f4qSS.webp 750w, /_astro/11.9_uE7IFQ_ZsBmJ9.webp 828w, /_astro/11.9_uE7IFQ_1w07g9.webp 1080w, /_astro/11.9_uE7IFQ_1We8TX.webp 1280w, /_astro/11.9_uE7IFQ_OrpOn.webp 1668w, /_astro/11.9_uE7IFQ_Z3swXy.webp 2048w, /_astro/11.9_uE7IFQ_ZcuyLx.webp 2547w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AIのセットアップと学習&lt;a href=&quot;#document-aiのセットアップと学習&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Google Cloud Consoleで新しいプロジェクトを作成し、Document AI APIを有効化します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Google Cloud CLIでプロジェクトを設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-project-id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Document AI APIを有効化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;documentai.googleapis.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;以下の流れでDocument AIでカスタムプロセッサを作成していきます。各手順の詳細は後ほど記載していきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;カスタムプロセッサを作成する。&lt;/li&gt;
&lt;li&gt;トレーニングを開始します。ラベリングをしてスキーマを定義します。&lt;/li&gt;
&lt;li&gt;「ビルド」＞「基盤モデルを呼び出す」を選択して、トレーニングさせるベースモデルを選びます。&lt;/li&gt;
&lt;li&gt;「新しいバージョンを作成」で、学習させたモデルにバージョン名を設定してビルドする。&lt;/li&gt;
&lt;li&gt;ビルド完了後、そのモデルをデプロイしてデフォルトのバージョンに設定する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;以下、Document AIをWebコンソール上で利用した際に感じた留意点です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Document AIのUXは少し分かりづらいです&lt;/li&gt;
&lt;li&gt;デプロイ状態の確認が不明確な場合があります&lt;/li&gt;
&lt;li&gt;「1個のバージョンをデプロイしています。」というメッセージが表示されても、実際には使用可能な状態かもしれません&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;カスタムプロセッサを作成する。&lt;a href=&quot;#カスタムプロセッサを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Document AI Workbenchに移動して、カスタムプロセッサを作成します。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/document-ai-workbench&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Document AI Workbench | Google Cloud&lt;/div&gt;&lt;div&gt;Document AI ワークベンチを使用すると、請求書の処理、フォームの処理、本人確認などのドキュメント ワークフロー向けに ML モデルのトレーニングとアップトレーニングを行うことができます。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以下の項目をDocument AI上で入力します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;プロセッサ名：「test_extractor」&lt;/li&gt;
&lt;li&gt;目的：取引履歴からの自動データ抽出&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;トレーニングを開始。ラベリングをする。&lt;a href=&quot;#トレーニングを開始ラベリングをする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら早速トレーニングを開始します。&lt;/p&gt;&lt;p&gt;以下のようコンソール内のGUI上で、PNG画像の中でOCRさせたい箇所を選んでラベリングして、スキーマを定義していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2547&quot; height=&quot;1216&quot; src=&quot;/_astro/11.9_uE7IFQ_ZcuyLx.webp&quot; srcset=&quot;/_astro/11.9_uE7IFQ_Z2cMnUy.webp 640w, /_astro/11.9_uE7IFQ_1f4qSS.webp 750w, /_astro/11.9_uE7IFQ_ZsBmJ9.webp 828w, /_astro/11.9_uE7IFQ_1w07g9.webp 1080w, /_astro/11.9_uE7IFQ_1We8TX.webp 1280w, /_astro/11.9_uE7IFQ_OrpOn.webp 1668w, /_astro/11.9_uE7IFQ_Z3swXy.webp 2048w, /_astro/11.9_uE7IFQ_ZcuyLx.webp 2547w&quot; /&gt;&lt;/p&gt;&lt;p&gt;証券銘柄のシンボルは、学習元のAIが自動的にラベリングしてくれました。元々の能力が高いですね。&lt;/p&gt;&lt;p&gt;一旦これで1枚目のラベリングは完了しました。
&lt;img loading=&quot;lazy&quot; width=&quot;2548&quot; height=&quot;1219&quot; src=&quot;/_astro/12.D-dVjame_21dtEL.webp&quot; srcset=&quot;/_astro/12.D-dVjame_Zz9Boc.webp 640w, /_astro/12.D-dVjame_kx6wu.webp 750w, /_astro/12.D-dVjame_Z1n8H6x.webp 828w, /_astro/12.D-dVjame_Z1gqv1n.webp 1080w, /_astro/12.D-dVjame_ZPctmy.webp 1280w, /_astro/12.D-dVjame_x3ANq.webp 1668w, /_astro/12.D-dVjame_1u79wc.webp 2048w, /_astro/12.D-dVjame_21dtEL.webp 2548w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2枚目からはラベリングした情報を元に、モデルが自動的にラベリングしてくれるようになります。その自動ラベリング結果を承認するかどうかはユーザ次第。&lt;/p&gt;&lt;p&gt;しかしながら、殆ど当たっていますね。これは少ない学習量で済みそう。5枚も要らなさそう。
&lt;img loading=&quot;lazy&quot; width=&quot;2557&quot; height=&quot;1213&quot; src=&quot;/_astro/13.C09Joqnx_RhUcB.webp&quot; srcset=&quot;/_astro/13.C09Joqnx_1Plyo3.webp 640w, /_astro/13.C09Joqnx_d1foy.webp 750w, /_astro/13.C09Joqnx_Z1uEyet.webp 828w, /_astro/13.C09Joqnx_3FF2n.webp 1080w, /_astro/13.C09Joqnx_Z1l3NOv.webp 1280w, /_astro/13.C09Joqnx_1Vhj8X.webp 1668w, /_astro/13.C09Joqnx_Z1rFrUx.webp 2048w, /_astro/13.C09Joqnx_RhUcB.webp 2557w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「ビルド」＞「基盤モデルを呼び出す」&lt;a href=&quot;#ビルド基盤モデルを呼び出す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ラベリングが終わったら、次に学習させるAIモデルを選んでいきます。&lt;/p&gt;&lt;p&gt;AIモデルは「基盤モデルを呼び出す」、「ファインチューニング」、「カスタムモデルのトレーニング」から選べますが、今回のような比較的単純なドキュメントを読み取る場合は、「基盤モデルを呼び出す」を選択すれば、トレーニングに必要なデータセットが少なく済みます。&lt;/p&gt;&lt;p&gt;今回は、「基盤を呼び出す」で作っていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2547&quot; height=&quot;1211&quot; src=&quot;/_astro/14.BtS3iAXR_Z1R2nWj.webp&quot; srcset=&quot;/_astro/14.BtS3iAXR_1zRSls.webp 640w, /_astro/14.BtS3iAXR_2uzBh9.webp 750w, /_astro/14.BtS3iAXR_LSMD7.webp 828w, /_astro/14.BtS3iAXR_ZcDebp.webp 1080w, /_astro/14.BtS3iAXR_SE5dh.webp 1280w, /_astro/14.BtS3iAXR_ZTbUCb.webp 1668w, /_astro/14.BtS3iAXR_M2r7f.webp 2048w, /_astro/14.BtS3iAXR_Z1R2nWj.webp 2547w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「新しいバージョンを作成」で学習させたモデルにバージョン名を設定してビルドする。&lt;a href=&quot;#新しいバージョンを作成で学習させたモデルにバージョン名を設定してビルドする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;適当にバージョン名を付けて、先ほどラベリングしたデータを選択したAIモデルに学習させて、そのモデルをビルドします。
&lt;img loading=&quot;lazy&quot; width=&quot;868&quot; height=&quot;523&quot; src=&quot;/_astro/15.Dj8sP7Rp_Zke7QI.webp&quot; srcset=&quot;/_astro/15.Dj8sP7Rp_ZqhmRw.webp 640w, /_astro/15.Dj8sP7Rp_ZJHHat.webp 750w, /_astro/15.Dj8sP7Rp_Z14fcYj.webp 828w, /_astro/15.Dj8sP7Rp_Zke7QI.webp 868w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;学習させたモデルをデプロイする。&lt;a href=&quot;#学習させたモデルをデプロイする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ビルドが終わったら、「テストと評価」の項目に移ります。&lt;/p&gt;&lt;p&gt;しかし、「テストと評価」の作業を行うためには、その前に「デプロイと使用」を行わなければならないようです。（なんで工程の順番が逆なの？）
&lt;img loading=&quot;lazy&quot; width=&quot;1118&quot; height=&quot;734&quot; src=&quot;/_astro/17.DF0wmSHC_1Bee8r.webp&quot; srcset=&quot;/_astro/17.DF0wmSHC_ZodT17.webp 640w, /_astro/17.DF0wmSHC_24w2R8.webp 750w, /_astro/17.DF0wmSHC_1QbaPA.webp 828w, /_astro/17.DF0wmSHC_RT90U.webp 1080w, /_astro/17.DF0wmSHC_1Bee8r.webp 1118w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは、「デプロイと使用」で先ほどビルドしたバージョンを選択してデプロイします。バージョンを選択したらデプロイすることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1451&quot; height=&quot;643&quot; src=&quot;/_astro/18.CXiJFPY1_Z2qspl8.webp&quot; srcset=&quot;/_astro/18.CXiJFPY1_Z29Youz.webp 640w, /_astro/18.CXiJFPY1_2uH4d.webp 750w, /_astro/18.CXiJFPY1_EHkTo.webp 828w, /_astro/18.CXiJFPY1_Z20QMG1.webp 1080w, /_astro/18.CXiJFPY1_ZU8zxT.webp 1280w, /_astro/18.CXiJFPY1_Z2qspl8.webp 1451w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デプロイが始まりました・・・。画面下の方に「1個のバージョンをデプロイしています。」といったメッセージが表示されて、何十分経っても表示されたままでしたが、とりあえずそのトレーニングさせたバージョンをデフォルトに設定して、実際にローカルから使っていきました。
&lt;img loading=&quot;lazy&quot; width=&quot;2179&quot; height=&quot;927&quot; src=&quot;/_astro/19.DE6Jhtoz_2makRO.webp&quot; srcset=&quot;/_astro/19.DE6Jhtoz_pCX0v.webp 640w, /_astro/19.DE6Jhtoz_4F91.webp 750w, /_astro/19.DE6Jhtoz_Z6LUC7.webp 828w, /_astro/19.DE6Jhtoz_ZGwppD.webp 1080w, /_astro/19.DE6Jhtoz_ojRG3.webp 1280w, /_astro/19.DE6Jhtoz_Z2vTezE.webp 1668w, /_astro/19.DE6Jhtoz_25zXen.webp 2048w, /_astro/19.DE6Jhtoz_2makRO.webp 2179w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、Document AI内での作業は完了です。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonでの実装&lt;a href=&quot;#pythonでの実装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、先ほど作成したカスタムプロセッサを使って、ローカルに置いてある資料をOCRさせていきます。今回はPythonとColab Notebookを使いました。&lt;/p&gt;&lt;p&gt;GitHubにて公開されていた&lt;a href=&quot;https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/documentai/snippets/process_document_sample.py&quot; target=&quot;_blank&quot;&gt;Google公式サンプルコード&lt;/a&gt;を参考に実装します:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# [START documentai_process_document]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.api_core.client_options &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; ClientOptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.cloud &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; documentai  &lt;/span&gt;&lt;span&gt;# type: ignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# &lt;/span&gt;&lt;span&gt;TODO&lt;/span&gt;&lt;span&gt;(developer): Uncomment these variables before running the sample.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# project_id = &quot;YOUR_PROJECT_ID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# location = &quot;YOUR_PROCESSOR_LOCATION&quot; # Format is &quot;us&quot; or &quot;eu&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# processor_id = &quot;YOUR_PROCESSOR_ID&quot; # Create processor before running sample&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# file_path = &quot;/path/to/local/pdf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# mime_type = &quot;application/pdf&quot; # Refer to &amp;lt;https://cloud.google.com/document-ai/docs/file-types&amp;gt; for supported file types&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# field_mask = &quot;text,entities,pages.pageNumber&quot;  # Optional. The fields to return in the Document object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# processor_version_id = &quot;YOUR_PROCESSOR_VERSION_ID&quot; # Optional. Processor version to use&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process_document_sample&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;processor_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;field_mask&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Optional[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;processor_version_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Optional[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# You must set the `api_endpoint` if you use a location other than &quot;us&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;opts &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ClientOptions&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;api_endpoint&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-documentai.googleapis.com&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; documentai.&lt;/span&gt;&lt;span&gt;DocumentProcessorServiceClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;client_options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;opts)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; processor_version_id:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# The full resource name of the processor version, e.g.:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# `projects/{project_id}/locations/{location}/processors/{processor_id}/processorVersions/{processor_version_id}`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.&lt;/span&gt;&lt;span&gt;processor_version_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;project_id, location, processor_id, processor_version_id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# The full resource name of the processor, e.g.:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# `projects/{project_id}/locations/{location}/processors/{processor_id}`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.&lt;/span&gt;&lt;span&gt;processor_path&lt;/span&gt;&lt;span&gt;(project_id, location, processor_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Read the file into memory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_path, &lt;/span&gt;&lt;span&gt;&quot;rb&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; image:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image_content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; image.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Load binary data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raw_document &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; documentai.&lt;/span&gt;&lt;span&gt;RawDocument&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;image_content, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;mime_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# For more information: &amp;lt;https://cloud.google.com/document-ai/docs/reference/rest/v1/ProcessOptions&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Optional: Additional configurations for processing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;process_options &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; documentai.&lt;/span&gt;&lt;span&gt;ProcessOptions&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Process only specific pages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;individual_page_selector&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;documentai.ProcessOptions.&lt;/span&gt;&lt;span&gt;IndividualPageSelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;pages&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Configure the process request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; documentai.&lt;/span&gt;&lt;span&gt;ProcessRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;name,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raw_document&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;raw_document,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;field_mask&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;field_mask,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;process_options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;process_options,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.&lt;/span&gt;&lt;span&gt;process_document&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;request)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# For a full list of `Document` object attributes, reference this page:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &amp;lt;https://cloud.google.com/document-ai/docs/reference/rest/v1/Document&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; result.document&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Read the text recognition output from the processor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;The document contains the following text:&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(document.text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# [END documentai_process_document]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;process_document_sample&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;project_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;000000000000&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;us&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;processor_id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;xxxxxxxxxxxxxx &quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/TemporarySave/ImagesForAgentWorking/スクリーンショット 2025-03-14 072159.png&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Colab Notebook上で、Python実行前に必要かもしれない処理。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application-default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application-default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set-quota-project&lt;/span&gt;&lt;span&gt; [project-id]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-genai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-cloud-documentai==&lt;/span&gt;&lt;span&gt;3.0.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;以下のように、Googleドライブに資料を格納して、Colab Notebookにドライブをマウントします。
&lt;img loading=&quot;lazy&quot; width=&quot;1457&quot; height=&quot;728&quot; src=&quot;/_astro/20.7HdsuzZ9_19Nljc.webp&quot; srcset=&quot;/_astro/20.7HdsuzZ9_Z2rElHx.webp 640w, /_astro/20.7HdsuzZ9_Z1GPOC4.webp 750w, /_astro/20.7HdsuzZ9_2l2U1u.webp 828w, /_astro/20.7HdsuzZ9_ZU6FBn.webp 1080w, /_astro/20.7HdsuzZ9_Z2oES0c.webp 1280w, /_astro/20.7HdsuzZ9_19Nljc.webp 1457w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;The document contains the following text:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Document Al / プロセッサ / プロセッサ: xxxxxxxxxxxxxx / 始める&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;←&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!i!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=フィルタ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;テキストを入力して結果を&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;絞り込む&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+ 新しいフィールドを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dvidend&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3,946&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rate_less&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;149.4900&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rate_more&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;150.2600&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ラベル付きとしてマーク&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;I&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;52&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Q&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(国内源泉徴収税の明細)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;配当金等支払日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;国内支払日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;現地基準日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;銘柄コード&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;銘&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;柄名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/16&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/12&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;304-AAPL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;アップル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;分配通貨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外国源泉税率(%)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1単位あたり金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;決済方法&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;円貨決済用レート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;口座区分&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;勘定設定年&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;備考&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;米国ドル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;10.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;0.24&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外貨決済&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;数量&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;配当金等金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外国源泉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;徴収税額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外国手数料&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外国精算金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;国内源泉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;徴収税額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;国内手数料&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;消費税&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;受取金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外貨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;23.76&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4.78&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;0.00&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;0.00&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;18.98&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;110&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;26.40&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2.64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;0.00&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;円貨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ラベル 「rate_more」を作成しました&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;X&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;申告レート基準日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;為替レート基準日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;申告レート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;為替レート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;配当金等金額(円)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外国源泉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;徴収税額(円)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;国内課税所得額(円)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;所得税&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;地方税&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;国内源泉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;徴収税額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;149.4900&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;外貨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3.61&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1.17&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4.78&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/16&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;150.2600&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3,946&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;394&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3,552&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;円貨&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;543&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;177&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;取得できたデータをCSV形式などで出力して、スプレッドシート上に反映すれば、外国証券の売買履歴および配当金の授受履歴のデータが格納された、為替取引の計算シートの完成です！
&lt;img loading=&quot;lazy&quot; width=&quot;1169&quot; height=&quot;776&quot; src=&quot;/_astro/21.D148_KlO_1w61vL.webp&quot; srcset=&quot;/_astro/21.D148_KlO_ZjsveU.webp 640w, /_astro/21.D148_KlO_1zfV3d.webp 750w, /_astro/21.D148_KlO_ZwcaKR.webp 828w, /_astro/21.D148_KlO_Z1NiSwN.webp 1080w, /_astro/21.D148_KlO_1w61vL.webp 1169w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これらのデータを元に計算すれば、為替差益による利益を確定申告書に入力することが出来ますね！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;【参考】Document AI APIからのレスポンスの仕様&lt;a href=&quot;#参考document-ai-apiからのレスポンスの仕様&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Document AIでドキュメントを解析すると、ラベル付けした各項目は「エンティティ（entities）」として出力されます。（2025-03-26時点）つまり、データセットでラベル付けした部分の情報は、解析結果のJSONオブジェクト内のentities配列に格納されます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;エンティティの構造&lt;a href=&quot;#エンティティの構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;各エンティティには以下のような情報が含まれます：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;type_（ラベルの種類）&lt;/strong&gt; 例: 「請求書番号」「日付」「金額」など、あなたがラベル付けした名前が入ります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mention_text（抽出されたテキスト）&lt;/strong&gt; 実際に読み取った文字列がここに格納されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;normalized_value（正規化された値）&lt;/strong&gt; 日付や金額など、フォーマットが統一された値がある場合に利用できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;confidence（信頼度）&lt;/strong&gt; 解析結果の精度を表す数値です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;page_anchor&lt;/strong&gt; ラベル付けしたテキストがどのページ、どの位置にあったかの情報です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ラベル付け部分の値を取得する例（Python）&lt;a href=&quot;#ラベル付け部分の値を取得する例python&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下は、解析済みのDocumentオブジェクトから各エンティティを取得し、ラベルとその値を表示するサンプルコードです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.cloud &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; documentai_v1 &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; documentai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 例として、既にDocument AIで処理されたdocumentオブジェクトがあるとする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.&lt;/span&gt;&lt;span&gt;process_document&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;request).document&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# エンティティごとにループし、ラベルと抽出された値を出力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; entity &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; document.entities:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ラベル:&quot;&lt;/span&gt;&lt;span&gt;, entity.type_)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;抽出値:&quot;&lt;/span&gt;&lt;span&gt;, entity.mention_text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 正規化された値が存在する場合はそちらも利用可能&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; entity.normalized_value:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;正規化された値:&quot;&lt;/span&gt;&lt;span&gt;, entity.normalized_value.text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;信頼度:&quot;&lt;/span&gt;&lt;span&gt;, entity.confidence)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;---&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このコードでは、&lt;code&gt;document.entities&lt;/code&gt; に含まれる各エンティティから、ラベル（&lt;code&gt;type_&lt;/code&gt;）、実際に読み取ったテキスト（&lt;code&gt;mention_text&lt;/code&gt;）、および（存在すれば）正規化された値を取得しています。これにより、データセットでラベル付けした各部分の値をプログラム内で利用可能です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カスタムプロセッサの場合&lt;a href=&quot;#カスタムプロセッサの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もしカスタムラベルや独自のアノテーションを使用している場合は、各エンティティの&lt;code&gt;type_&lt;/code&gt;にカスタムで設定したラベル名が入るため、目的に合わせて条件分岐などで抽出することも可能です。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;為替差益の計算方法&lt;a href=&quot;#為替差益の計算方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は売却を任意の日で一括で行ったため、総平均法で計算しました。&lt;/p&gt;&lt;p&gt;売却を都度行っている場合は先入先出法の方がオトクかもしれませんね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;OCRに使ったコストと作業時間&lt;a href=&quot;#ocrに使ったコストと作業時間&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、カスタムプロセッサを作るために使ったAPIコストに関しては、80枚の画像処理で872円の料金が掛かりました。&lt;/p&gt;&lt;p&gt;まあまあ掛かった気がしますが、次回の為替差益の計算が楽になったので特に問題なく感じています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回はDocument AIを使って、確定申告のために必要なデータである為替差益に関する情報を、証券口座から受け取った書類からOCRして、スプレッドシートに一気に反映する方法を紹介しました。&lt;/p&gt;&lt;p&gt;以下が記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Document AIでは、5枚以下の学習データで、証券取引の書類からデータを抽出出来るAIモデルを構築出来る。&lt;/li&gt;
&lt;li&gt;Document AIでは、用途ごとにAIモデルを「基盤モデルを呼び出す」、「ファインチューニング」、「カスタムモデルのトレーニング」の中から選べる。&lt;/li&gt;
&lt;li&gt;PythonからDocument AIのモデルから情報を取得する際には、&lt;code&gt;document.entities&lt;/code&gt; に含まれる各エンティティから正規化された情報を取得出来る。&lt;/li&gt;
&lt;li&gt;コストは80枚で872円ぐらい掛かった。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;結構漏れないな！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一つ大きな作業が減ったぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>今年食ったサバ缶のまとめ（2024年版）</title><link>https://endorphinbath.com/posts/mackerel-packed-can-2024/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mackerel-packed-can-2024/</guid><description>2024年に筆者が食べたサバ缶、イワシ缶、サンマ缶などを紹介します。個人的な美味しさ、DHAおよびEPAの含有量の目安なども掲載しています。</description><pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶だ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今年食べた、サバ缶の一覧です。&lt;a href=&quot;#今年食べたサバ缶の一覧です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. AIKOCHAN_鰯_水煮（伊藤食品）&lt;a href=&quot;#1-aikochan_鰯_水煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/11.B7gqPnbj_14mT6S.webp&quot; srcset=&quot;/_astro/11.B7gqPnbj_14mT6S.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/01/15に食べた伊藤食品製の「AIKOCHAN_鰯_水煮」です。
魚は鰯で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：腕立て伏せが30回しか出来なかったヤバい！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. AIKOCHAN_鰯_水煮_食塩不使用（伊藤食品）&lt;a href=&quot;#2-aikochan_鰯_水煮_食塩不使用伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/12.CuGKRn2d_r8EsF.webp&quot; srcset=&quot;/_astro/12.CuGKRn2d_r8EsF.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/01/22に食べた伊藤食品製の「AIKOCHAN_鰯_水煮_食塩不使用」です。
魚は鰯で、水煮な風味と水色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：久しぶりのプログラミングは楽しい&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. AIKOCHAN_脂のり☆のりいわし_生姜☆パワー_醤油煮（伊藤食品）&lt;a href=&quot;#3-aikochan_脂のりのりいわし_生姜パワー_醤油煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/13.apwf6seU_ZdKrUs.webp&quot; srcset=&quot;/_astro/13.apwf6seU_ZdKrUs.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/02/02に食べた伊藤食品製の「AIKOCHAN_脂のり☆のりいわし_生姜☆パワー_醤油煮」です。
魚は鰯で、醤油煮な風味と黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：徹夜明けにはコレが必要かもしれない&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. AIKOCHAN_鰯_醤油煮（伊藤食品）&lt;a href=&quot;#4-aikochan_鰯_醤油煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/14.BWg8ZZEp_Z3cktV.webp&quot; srcset=&quot;/_astro/14.BWg8ZZEp_Z3cktV.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/02/06に食べた伊藤食品製の「AIKOCHAN_鰯_醤油煮」です。
魚は鰯で、醤油煮な風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：今日食ったオリービオイルの賞味期限が8ヶ月前に切れてた不味かった…&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. AIKOCHAN_脂のり☆のりいわし_黒ごま☆パワー_味噌煮（伊藤食品）&lt;a href=&quot;#5-aikochan_脂のりのりいわし_黒ごまパワー_味噌煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/15.DB-TRmeP_1de0UI.webp&quot; srcset=&quot;/_astro/15.DB-TRmeP_1de0UI.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/02/13に食べた伊藤食品製の「AIKOCHAN_脂のり☆のりいわし_黒ごま☆パワー_味噌煮」です。
魚は鰯で、味噌煮な風味と黒の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：徹夜明けだからかは知らんがコレも結構美味いよ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. マルハニチロ_さばみそ煮_ノルウェー産（マルハニチロ）&lt;a href=&quot;#6-マルハニチロ_さばみそ煮_ノルウェー産マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/16.RVUKpL2r_1t9Sd.webp&quot; srcset=&quot;/_astro/16.RVUKpL2r_1t9Sd.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/03/01に食べたマルハニチロ製の「マルハニチロ_さばみそ煮_ノルウェー産」です。
魚は鯖で、味噌煮な風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：マイルドな味噌ですね&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. ニッスイ_SuiSuiオープン_さば水煮減塩（日本水産）&lt;a href=&quot;#7-ニッスイ_suisuiオープン_さば水煮減塩日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/17.CO-TM9G4_KfL2R.webp&quot; srcset=&quot;/_astro/17.CO-TM9G4_1hA0Ia.webp 640w, /_astro/17.CO-TM9G4_Z1lBolh.webp 750w, /_astro/17.CO-TM9G4_1oiBDq.webp 828w, /_astro/17.CO-TM9G4_Z2j4Vbh.webp 1080w, /_astro/17.CO-TM9G4_Z2soivf.webp 1280w, /_astro/17.CO-TM9G4_Z1AQBbh.webp 1668w, /_astro/17.CO-TM9G4_1NoVgj.webp 2048w, /_astro/17.CO-TM9G4_Z1CaQx3.webp 2560w, /_astro/17.CO-TM9G4_KfL2R.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/01に食べた日本水産製の「ニッスイ_SuiSuiオープン_さば水煮減塩」です。
魚は鯖で、水煮な風味と白、青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：肉厚で、減塩テイストにしては美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. HOKO_日本のさんま味噌煮（宝幸）&lt;a href=&quot;#8-hoko_日本のさんま味噌煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/18.BvLH-xFo_1S6Jzt.webp&quot; srcset=&quot;/_astro/18.BvLH-xFo_1S6Jzt.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/05に食べた宝幸製の「HOKO_日本のさんま味噌煮」です。
魚は秋刀魚で、味噌煮な風味と茶色、白の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：味噌煮というよりは普段食べてる煮付けのような味だった。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. SuiSuiオープン_うまい！鯖匠_さばみそ煮（日本水産）&lt;a href=&quot;#9-suisuiオープン_うまい鯖匠_さばみそ煮日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/19.Dpl2bGN2_ZN0z7V.webp&quot; srcset=&quot;/_astro/19.Dpl2bGN2_ZN0z7V.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/11に食べた日本水産製の「SuiSuiオープン_うまい！鯖匠_さばみそ煮」です。
魚は鯖で、味噌煮な風味と橙色、白の缶の色が特徴です。美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：紙のタブで開ける奇怪なタイプのフタです&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. HOKO_赤からさば（宝幸）&lt;a href=&quot;#10-hoko_赤からさば宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/20.DrUGrNgd_ZJ5aDt.webp&quot; srcset=&quot;/_astro/20.DrUGrNgd_ZJ5aDt.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/20に食べた宝幸製の「HOKO_赤からさば」です。
魚は鯖で、辛いな風味と赤の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：思ったよりは辛くなかった。美味くはない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. Kanpy_さば水煮_ノルウェー産さば使用（福井缶詰）&lt;a href=&quot;#11-kanpy_さば水煮_ノルウェー産さば使用福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/21.-jaX4HSy_Z2ah7lL.webp&quot; srcset=&quot;/_astro/21.-jaX4HSy_Z1qgz61.webp 640w, /_astro/21.-jaX4HSy_10I9Dt.webp 750w, /_astro/21.-jaX4HSy_Z1jxXaK.webp 828w, /_astro/21.-jaX4HSy_Z9pFKY.webp 1080w, /_astro/21.-jaX4HSy_ZiJ35W.webp 1280w, /_astro/21.-jaX4HSy_xMDe1.webp 1668w, /_astro/21.-jaX4HSy_Z177W8k.webp 2048w, /_astro/21.-jaX4HSy_wtnRf.webp 2560w, /_astro/21.-jaX4HSy_Z2ah7lL.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/25に食べた福井缶詰製の「Kanpy_さば水煮_ノルウェー産さば使用」です。
魚は鯖で、水煮な風味と白、水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：美味い感じはする。普段あんまり食べない感じの塩だな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. セブンプレミアム_国産いわし水煮_塩と生姜にこだわった（STIフードホールディングス）&lt;a href=&quot;#12-セブンプレミアム_国産いわし水煮_塩と生姜にこだわったstiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/22.epqV8hV5_pJdMp.webp&quot; srcset=&quot;/_astro/22.epqV8hV5_1qV1T7.webp 640w, /_astro/22.epqV8hV5_Z1cgnak.webp 750w, /_astro/22.epqV8hV5_1xDCOn.webp 828w, /_astro/22.epqV8hV5_2qAEnc.webp 1080w, /_astro/22.epqV8hV5_2hhi3e.webp 1280w, /_astro/22.epqV8hV5_Z1Vn9qJ.webp 1668w, /_astro/22.epqV8hV5_1sSo0Q.webp 2048w, /_astro/22.epqV8hV5_Z1WGoMv.webp 2560w, /_astro/22.epqV8hV5_pJdMp.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/05/29に食べたSTIフードホールディングス製の「セブンプレミアム_国産いわし水煮_塩と生姜にこだわった」です。
魚は鰯で、水煮な風味と水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2380.0mgで、EPAが3080.0mgでした。
感想：これ食ってセイレーン作戦を頑張ろう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. ニッスイ_SABA_さばみそ煮_日本産さば使用（日本水産）&lt;a href=&quot;#13-ニッスイ_saba_さばみそ煮_日本産さば使用日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/23.0NSR4ezm_bmp9W.webp&quot; srcset=&quot;/_astro/23.0NSR4ezm_1qsJyc.webp 640w, /_astro/23.0NSR4ezm_Z1cIEvf.webp 750w, /_astro/23.0NSR4ezm_1xblts.webp 828w, /_astro/23.0NSR4ezm_2cdPJJ.webp 1080w, /_astro/23.0NSR4ezm_22TtpL.webp 1280w, /_astro/23.0NSR4ezm_Z2aJX4c.webp 1668w, /_astro/23.0NSR4ezm_1evzno.webp 2048w, /_astro/23.0NSR4ezm_Z2c4dpX.webp 2560w, /_astro/23.0NSR4ezm_bmp9W.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/06/04に食べた日本水産製の「ニッスイ_SABA_さばみそ煮_日本産さば使用」です。
魚は鯖で、味噌煮な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：蓋のプルタブが脆い感じがして、開けるのが怖かったです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14. ニッスイ_SABA_さば水煮_日本産さば使用（日本水産）&lt;a href=&quot;#14-ニッスイ_saba_さば水煮_日本産さば使用日本水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/24.D57oghc7_1gxWDe.webp&quot; srcset=&quot;/_astro/24.D57oghc7_Z1DvrCK.webp 640w, /_astro/24.D57oghc7_Mth6J.webp 750w, /_astro/24.D57oghc7_Z1wMPHu.webp 828w, /_astro/24.D57oghc7_Z1MLJzU.webp 1080w, /_astro/24.D57oghc7_Z1W66TS.webp 1280w, /_astro/24.D57oghc7_Z15ypzU.webp 1668w, /_astro/24.D57oghc7_2jH7QF.webp 2048w, /_astro/24.D57oghc7_Z16REVG.webp 2560w, /_astro/24.D57oghc7_1gxWDe.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/06/10に食べた日本水産製の「ニッスイ_SABA_さば水煮_日本産さば使用」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：テトリスの穴を掘るのがなかなか速くならないクソォ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;15. Kanpy_さば醤油味付_ノルウェー産さば使用（福井缶詰）&lt;a href=&quot;#15-kanpy_さば醤油味付_ノルウェー産さば使用福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/25.DcVEVAPB_Z8pNyn.webp&quot; srcset=&quot;/_astro/25.DcVEVAPB_Zde6U9.webp 640w, /_astro/25.DcVEVAPB_2dKBOl.webp 750w, /_astro/25.DcVEVAPB_Z6vuYS.webp 828w, /_astro/25.DcVEVAPB_1RqC1p.webp 1080w, /_astro/25.DcVEVAPB_1I7fGr.webp 1280w, /_astro/25.DcVEVAPB_Z2uxbMw.webp 1668w, /_astro/25.DcVEVAPB_TIlE4.webp 2048w, /_astro/25.DcVEVAPB_Z2vQr9i.webp 2560w, /_astro/25.DcVEVAPB_Z8pNyn.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/06/17に食べた福井缶詰製の「Kanpy_さば醤油味付_ノルウェー産さば使用」です。
魚は鯖で、煮付な風味と白、薄茶の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：少し脂っこさは感じるが、美味い部類のサバ缶だ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;16. Norlake_さばの水煮_Saba_in_Brinc（ノルレェイク・インターナショナル）&lt;a href=&quot;#16-norlake_さばの水煮_saba_in_brincノルレェイクインターナショナル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/26.nJkSPZVz_ruz5G.webp&quot; srcset=&quot;/_astro/26.nJkSPZVz_Z1l7a76.webp 640w, /_astro/26.nJkSPZVz_15RyCo.webp 750w, /_astro/26.nJkSPZVz_Z1eoybP.webp 828w, /_astro/26.nJkSPZVz_2sm0Ft.webp 1080w, /_astro/26.nJkSPZVz_2j2Dlv.webp 1280w, /_astro/26.nJkSPZVz_Z1TBN8s.webp 1668w, /_astro/26.nJkSPZVz_1uDJj8.webp 2048w, /_astro/26.nJkSPZVz_Z1UV3ue.webp 2560w, /_astro/26.nJkSPZVz_ruz5G.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/06/24に食べたノルレェイク・インターナショナル製の「Norlake_さばの水煮_Saba_in_Brinc」です。
魚は鯖で、水煮な風味と紺色の缶の色が特徴です。少し美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが未明で、EPAが未明でした。
感想：今日は暑くなってくる予感がする日だった。こんな時に是非とも栄養を摂って英気を養いたいですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;17. セブンプレミアム_国産いわし生姜煮_千切生姜でさっぱりと（STIフードホールディングス）&lt;a href=&quot;#17-セブンプレミアム_国産いわし生姜煮_千切生姜でさっぱりとstiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/27.CKf21SNq_Z1LgpJd.webp&quot; srcset=&quot;/_astro/27.CKf21SNq_2lDFG5.webp 640w, /_astro/27.CKf21SNq_ZhxInm.webp 750w, /_astro/27.CKf21SNq_2smhBl.webp 828w, /_astro/27.CKf21SNq_eA0Pz.webp 1080w, /_astro/27.CKf21SNq_5gDvB.webp 1280w, /_astro/27.CKf21SNq_VNkPz.webp 1668w, /_astro/27.CKf21SNq_ZI7fvL.webp 2048w, /_astro/27.CKf21SNq_Uu5tN.webp 2560w, /_astro/27.CKf21SNq_Z1LgpJd.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/06/28に食べたSTIフードホールディングス製の「セブンプレミアム_国産いわし生姜煮_千切生姜でさっぱりと」です。
魚は鰯で、その他な風味と薄茶の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1470.0mgで、EPAが1910.0mgでした。
感想：生姜が千切りだから食べやすいね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;18. 高木商店_国産_寒さば_味噌煮（高木商店）&lt;a href=&quot;#18-高木商店_国産_寒さば_味噌煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/28.548hYZ6j_ZCt2mW.webp&quot; srcset=&quot;/_astro/28.548hYZ6j_1XQOWX.webp 640w, /_astro/28.548hYZ6j_25hcAd.webp 750w, /_astro/28.548hYZ6j_ZoGIGE.webp 828w, /_astro/28.548hYZ6j_1jTWCl.webp 1080w, /_astro/28.548hYZ6j_Z17mwsd.webp 1280w, /_astro/28.548hYZ6j_Z6f5d1.webp 1668w, /_astro/28.548hYZ6j_1ps72E.webp 2048w, /_astro/28.548hYZ6j_1fBlwg.webp 2560w, /_astro/28.548hYZ6j_ZCt2mW.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/07/03に食べた高木商店製の「高木商店_国産_寒さば_味噌煮」です。
魚は鯖で、味噌煮な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2305.0mgで、EPAが1096.0mgでした。
感想：もし入院とかしてそれが長引いたら困るから、サバ缶を消費しておこう！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;19. 駿河燻鯖_OIL_SABADINES_COTTONSEED_OIL（由比缶詰所）&lt;a href=&quot;#19-駿河燻鯖_oil_sabadines_cottonseed_oil由比缶詰所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/29.DO7_y62x_BU10q.webp&quot; srcset=&quot;/_astro/29.DO7_y62x_12hNmv.webp 640w, /_astro/29.DO7_y62x_18HaYK.webp 750w, /_astro/29.DO7_y62x_Z1lgKi7.webp 828w, /_astro/29.DO7_y62x_Z2uS7Nd.webp 1080w, /_astro/29.DO7_y62x_81vUa.webp 1280w, /_astro/29.DO7_y62x_198Xam.webp 1668w, /_astro/29.DO7_y62x_Z2pkXnT.webp 2048w, /_astro/29.DO7_y62x_2v0oTD.webp 2560w, /_astro/29.DO7_y62x_BU10q.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/07/07に食べた由比缶詰所製の「駿河燻鯖_OIL_SABADINES_COTTONSEED_OIL」です。
魚は鯖で、オイルな風味と黒の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：細かく刻まれていて食べやすい。味もスモークが効いていて美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;20. 高木商店_国産_寒さば_水煮（高木商店）&lt;a href=&quot;#20-高木商店_国産_寒さば_水煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/30.npr_2W-F_Z27B4XO.webp&quot; srcset=&quot;/_astro/30.npr_2W-F_Z1vcHD1.webp 640w, /_astro/30.npr_2W-F_Z1oMl0L.webp 750w, /_astro/30.npr_2W-F_1bpQvi.webp 828w, /_astro/30.npr_2W-F_Zad4Xw.webp 1080w, /_astro/30.npr_2W-F_2sGyJQ.webp 1280w, /_astro/30.npr_2W-F_Z1An7NS.webp 1668w, /_astro/30.npr_2W-F_Z4EUyd.webp 2048w, /_astro/30.npr_2W-F_ZevG4B.webp 2560w, /_astro/30.npr_2W-F_Z27B4XO.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/07/11に食べた高木商店製の「高木商店_国産_寒さば_水煮」です。
魚は鯖で、水煮な風味と青の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1780.0mgで、EPAが887.0mgでした。
感想：たぶん今、ピロリ菌のせいで消化能力が弱まっているので、なるべく魚とか消化に良さそうな食品でタンパク質を摂取しよう！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;21. 駿河燻鯖_OIL_SABADINES_GARLIC（由比缶詰所）&lt;a href=&quot;#21-駿河燻鯖_oil_sabadines_garlic由比缶詰所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/31.C-pSAn0-_2iHt64.webp&quot; srcset=&quot;/_astro/31.C-pSAn0-_1pBQNw.webp 640w, /_astro/31.C-pSAn0-_1w2eqL.webp 750w, /_astro/31.C-pSAn0-_ZWVGQ6.webp 828w, /_astro/31.C-pSAn0-_ZO5EHz.webp 1080w, /_astro/31.C-pSAn0-_1NNY0N.webp 1280w, /_astro/31.C-pSAn0-_Z2ffHxV.webp 1668w, /_astro/31.C-pSAn0-_ZIxvig.webp 2048w, /_astro/31.C-pSAn0-_ZSogNE.webp 2560w, /_astro/31.C-pSAn0-_2iHt64.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/07/18に食べた由比缶詰所製の「駿河燻鯖_OIL_SABADINES_GARLIC」です。
魚は鯖で、オイルな風味と緑の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：確かにガーリックのような背徳的な味がしました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;22. 銚子港・波崎港水揚げ_味噌と砂糖だけで作った_素材をそのまま_いわし醤油煮（高木商店）&lt;a href=&quot;#22-銚子港波崎港水揚げ_味噌と砂糖だけで作った_素材をそのまま_いわし醤油煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/32.ChUFFRO8_cAA6r.webp&quot; srcset=&quot;/_astro/32.ChUFFRO8_Z1gBudC.webp 640w, /_astro/32.ChUFFRO8_Z1ac7An.webp 750w, /_astro/32.ChUFFRO8_1q14UG.webp 828w, /_astro/32.ChUFFRO8_29YA6J.webp 1080w, /_astro/32.ChUFFRO8_ZhhSXO.webp 1280w, /_astro/32.ChUFFRO8_IOxgn.webp 1668w, /_astro/32.ChUFFRO8_2fwJw3.webp 2048w, /_astro/32.ChUFFRO8_25FY0E.webp 2560w, /_astro/32.ChUFFRO8_cAA6r.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/07/24に食べた高木商店製の「銚子港・波崎港水揚げ_味噌と砂糖だけで作った_素材をそのまま_いわし醤油煮」です。
魚は鰯で、味噌煮な風味と黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：食べやすい味噌煮です&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;23. 駿河燻鯖_OIL_SABADINES_BLACK_PEPPER（由比缶詰所）&lt;a href=&quot;#23-駿河燻鯖_oil_sabadines_black_pepper由比缶詰所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/33.tbSwyush_26A4I.webp&quot; srcset=&quot;/_astro/33.tbSwyush_Z1AWUmN.webp 640w, /_astro/33.tbSwyush_Z1uxxJy.webp 750w, /_astro/33.tbSwyush_15EDLv.webp 828w, /_astro/33.tbSwyush_1YuA51.webp 1080w, /_astro/33.tbSwyush_ZrLT0x.webp 1280w, /_astro/33.tbSwyush_ykxeE.webp 1668w, /_astro/33.tbSwyush_252Juk.webp 2048w, /_astro/33.tbSwyush_1UbXXV.webp 2560w, /_astro/33.tbSwyush_26A4I.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/08/06に食べた由比缶詰所製の「駿河燻鯖_OIL_SABADINES_BLACK_PEPPER」です。
魚は鯖で、オイルな風味と茶色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：こんな暑い日にブラックペッパーを食べるとテンションが上りますな！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;24. 駿河燻鯖_OIL_SABADINES_NATURAL（由比缶詰所）&lt;a href=&quot;#24-駿河燻鯖_oil_sabadines_natural由比缶詰所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/34.C1LlSxSk_1eIMBP.webp&quot; srcset=&quot;/_astro/34.C1LlSxSk_1nw0j4.webp 640w, /_astro/34.C1LlSxSk_1tVmVj.webp 750w, /_astro/34.C1LlSxSk_Z102yly.webp 828w, /_astro/34.C1LlSxSk_Z1S4lbN.webp 1080w, /_astro/34.C1LlSxSk_JPiwz.webp 1280w, /_astro/34.C1LlSxSk_1KWJLL.webp 1668w, /_astro/34.C1LlSxSk_Z1MwbLu.webp 2048w, /_astro/34.C1LlSxSk_Z1WmWhS.webp 2560w, /_astro/34.C1LlSxSk_1eIMBP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/08/22に食べた由比缶詰所製の「駿河燻鯖_OIL_SABADINES_NATURAL」です。
魚は鯖で、オイルな風味と黄色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：ナチュラルに美味かったぞ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;25. 銚子港・波崎港水揚げ_醤油と砂糖だけで作った_素材をそのまま_いわし醤油煮（高木商店）&lt;a href=&quot;#25-銚子港波崎港水揚げ_醤油と砂糖だけで作った_素材をそのまま_いわし醤油煮高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/35.B8UIXhDF_IAcxO.webp&quot; srcset=&quot;/_astro/35.B8UIXhDF_Z1pzUPJ.webp 640w, /_astro/35.B8UIXhDF_Z1jaydu.webp 750w, /_astro/35.B8UIXhDF_1h2Diz.webp 828w, /_astro/35.B8UIXhDF_Z2ocVfO.webp 1080w, /_astro/35.B8UIXhDF_eGHsy.webp 1280w, /_astro/35.B8UIXhDF_1fO9HK.webp 1668w, /_astro/35.B8UIXhDF_Z2iELPv.webp 2048w, /_astro/35.B8UIXhDF_Z2svxlT.webp 2560w, /_astro/35.B8UIXhDF_IAcxO.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/09に食べた高木商店製の「銚子港・波崎港水揚げ_醤油と砂糖だけで作った_素材をそのまま_いわし醤油煮」です。
魚は鰯で、醤油煮な風味と朱色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：久し振りにサバ缶を食べた。思いの外、味が濃いんだな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;26. マーメイド_鯖水煮（福井缶詰）&lt;a href=&quot;#26-マーメイド_鯖水煮福井缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/36.BfeK-9P-_Z10Kz8p.webp&quot; srcset=&quot;/_astro/36.BfeK-9P-_Z2i3aBx.webp 640w, /_astro/36.BfeK-9P-_Z2bCMYi.webp 750w, /_astro/36.BfeK-9P-_ozowL.webp 828w, /_astro/36.BfeK-9P-_VCpQS.webp 1080w, /_astro/36.BfeK-9P-_Z1uE4dF.webp 1280w, /_astro/36.BfeK-9P-_ZtwBXt.webp 1668w, /_astro/36.BfeK-9P-_12azhc.webp 2048w, /_astro/36.BfeK-9P-_RjNKN.webp 2560w, /_astro/36.BfeK-9P-_Z10Kz8p.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/17に食べた福井缶詰製の「マーメイド_鯖水煮」です。
魚は鯖で、水煮な風味と水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3200.0mgで、EPAが5600.0mgでした。
感想：塩味がかなりちゃんと効いているぞよ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;27. 三陸気仙沼ほてい_鰯_いわし水煮（気仙沼ほてい）&lt;a href=&quot;#27-三陸気仙沼ほてい_鰯_いわし水煮気仙沼ほてい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/37.ZK3Lv8h7_1DwjTK.webp&quot; srcset=&quot;/_astro/37.ZK3Lv8h7_JidYq.webp 640w, /_astro/37.ZK3Lv8h7_PHABF.webp 750w, /_astro/37.ZK3Lv8h7_Z1DgkFc.webp 828w, /_astro/37.ZK3Lv8h7_Z1tgNSS.webp 1080w, /_astro/37.ZK3Lv8h7_19COOu.webp 1280w, /_astro/37.ZK3Lv8h7_2aKh4G.webp 1668w, /_astro/37.ZK3Lv8h7_Z1nIEtz.webp 2048w, /_astro/37.ZK3Lv8h7_Z1xzpYX.webp 2560w, /_astro/37.ZK3Lv8h7_1DwjTK.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/19に食べた気仙沼ほてい製の「三陸気仙沼ほてい_鰯_いわし水煮」です。
魚は鰯で、水煮な風味と白、水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2800.0mgで、EPAが1800.0mgでした。
感想：Wallpaper Engineの良さを改めて感じている。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;28. マルハニチロ_さば照焼き（マルハニチロ）&lt;a href=&quot;#28-マルハニチロ_さば照焼きマルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/38.DA8oE_6v_Qk1Q5.webp&quot; srcset=&quot;/_astro/38.DA8oE_6v_ZAiJUR.webp 640w, /_astro/38.DA8oE_6v_ZtSniC.webp 750w, /_astro/38.DA8oE_6v_26jOdr.webp 828w, /_astro/38.DA8oE_6v_Z2gt6Wy.webp 1080w, /_astro/38.DA8oE_6v_mqwKO.webp 1280w, /_astro/38.DA8oE_6v_1nxY11.webp 1668w, /_astro/38.DA8oE_6v_Z2aUWxf.webp 2048w, /_astro/38.DA8oE_6v_Z2kLI3D.webp 2560w, /_astro/38.DA8oE_6v_Qk1Q5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/21に食べたマルハニチロ製の「マルハニチロ_さば照焼き」です。
魚は鯖で、塩焼な風味と白、歌舞伎定式幕の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが560.0mgで、EPAが630.0mgでした。
感想：タレにしっかり浸かっていて美味かったよ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;29. 元祖ちようしたのかばやき_さんま（田原缶詰）&lt;a href=&quot;#29-元祖ちようしたのかばやき_さんま田原缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3072&quot; height=&quot;4080&quot; src=&quot;/_astro/39.WAHNe1vE_DM2XC.webp&quot; srcset=&quot;/_astro/39.WAHNe1vE_Z1aHArm.webp 640w, /_astro/39.WAHNe1vE_1gh8i8.webp 750w, /_astro/39.WAHNe1vE_Z13YYw6.webp 828w, /_astro/39.WAHNe1vE_Z2pxEfw.webp 1080w, /_astro/39.WAHNe1vE_2vk7er.webp 1280w, /_astro/39.WAHNe1vE_Z1Hkkfw.webp 1668w, /_astro/39.WAHNe1vE_1GVdc4.webp 2048w, /_astro/39.WAHNe1vE_Z1IDzBi.webp 2560w, /_astro/39.WAHNe1vE_DM2XC.webp 3072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/23に食べた田原缶詰製の「元祖ちようしたのかばやき_さんま」です。
魚は秋刀魚で、蒲焼な風味と白、赤、紺の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1440.0mgで、EPAが670.0mgでした。
感想：元祖は普通の味でした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;30. マルハニチロ_月花_いわし水煮（マルハニチロ）&lt;a href=&quot;#30-マルハニチロ_月花_いわし水煮マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/40.cfOarKBX_B12J4.webp&quot; srcset=&quot;/_astro/40.cfOarKBX_de4Hr.webp 640w, /_astro/40.cfOarKBX_jDrkG.webp 750w, /_astro/40.cfOarKBX_Z2aktWb.webp 828w, /_astro/40.cfOarKBX_Z2vM64z.webp 1080w, /_astro/40.cfOarKBX_77xDN.webp 1280w, /_astro/40.cfOarKBX_18eYT0.webp 1668w, /_astro/40.cfOarKBX_Z2qeVEg.webp 2048w, /_astro/40.cfOarKBX_2u6qDh.webp 2560w, /_astro/40.cfOarKBX_B12J4.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/25に食べたマルハニチロ製の「マルハニチロ_月花_いわし水煮」です。
魚は鰯で、水煮な風味と赤、青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3310.0mgで、EPAが5244.0mgでした。
感想：鯖はあんまり美味くなかったが、鰯は悪くないな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;31. STI_STONE-ROLLS_金華さば_水煮_生詰め（STIフードホールディングス）&lt;a href=&quot;#31-sti_stone-rolls_金華さば_水煮_生詰めstiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/41.B9Rz07n8_Z1x3wMf.webp&quot; srcset=&quot;/_astro/41.B9Rz07n8_2r5D1Y.webp 640w, /_astro/41.B9Rz07n8_Z2wG89H.webp 750w, /_astro/41.B9Rz07n8_3w4mm.webp 828w, /_astro/41.B9Rz07n8_pksd3.webp 1080w, /_astro/41.B9Rz07n8_Z21W1Rv.webp 1280w, /_astro/41.B9Rz07n8_Z10OzCj.webp 1668w, /_astro/41.B9Rz07n8_uRBCm.webp 2048w, /_astro/41.B9Rz07n8_l1Q6X.webp 2560w, /_astro/41.B9Rz07n8_Z1x3wMf.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/28に食べたSTIフードホールディングス製の「STI_STONE-ROLLS_金華さば_水煮_生詰め」です。
魚は鯖で、水煮な風味と銀の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが5890.0mgで、EPAが3230.0mgでした。
感想：PowerShellでディレクトリ巡りは金輪際やりたくない。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;32. STI_STONE-ROLLS_金華さば_みそ煮_数量限定（STIフードホールディングス）&lt;a href=&quot;#32-sti_stone-rolls_金華さば_みそ煮_数量限定stiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/42.axDaRxrK_Z1Cp19I.webp&quot; srcset=&quot;/_astro/42.axDaRxrK_Z1Of4Iy.webp 640w, /_astro/42.axDaRxrK_Z1HOH6j.webp 750w, /_astro/42.axDaRxrK_RnupK.webp 828w, /_astro/42.axDaRxrK_jXXPz.webp 1080w, /_astro/42.axDaRxrK_Z27iveY.webp 1280w, /_astro/42.axDaRxrK_Z16b3YM.webp 1668w, /_astro/42.axDaRxrK_pw8fS.webp 2048w, /_astro/42.axDaRxrK_fFmJu.webp 2560w, /_astro/42.axDaRxrK_Z1Cp19I.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/30に食べたSTIフードホールディングス製の「STI_STONE-ROLLS_金華さば_みそ煮_数量限定」です。
魚は鯖で、味噌煮な風味と金の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2907.0mgで、EPAが1520.0mgでした。
感想：鯖よりも味噌で味を押している感じがする。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;33. 信田缶詰_SABA_さば水煮_SIK（信田缶詰）&lt;a href=&quot;#33-信田缶詰_saba_さば水煮_sik信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/43.BrndyziH_Z1CDLMH.webp&quot; srcset=&quot;/_astro/43.BrndyziH_Z29gkzg.webp 640w, /_astro/43.BrndyziH_Z22PWW1.webp 750w, /_astro/43.BrndyziH_xmez3.webp 828w, /_astro/43.BrndyziH_jJdcA.webp 1080w, /_astro/43.BrndyziH_Z27xgRX.webp 1280w, /_astro/43.BrndyziH_Z16pOCL.webp 1668w, /_astro/43.BrndyziH_phmBT.webp 2048w, /_astro/43.BrndyziH_fqB6v.webp 2560w, /_astro/43.BrndyziH_Z1CDLMH.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/10/31に食べた信田缶詰製の「信田缶詰_SABA_さば水煮_SIK」です。
魚は鯖で、水煮な風味と白、水色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：塩がしっかりしている。海っぽい味で、好みが分かれそう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;34. 信田缶詰_SABA_さばみそ煮_SIK（信田缶詰）&lt;a href=&quot;#34-信田缶詰_saba_さばみそ煮_sik信田缶詰&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/44.CqNfoSVf_Z1AyzAX.webp&quot; srcset=&quot;/_astro/44.CqNfoSVf_2qXIPx.webp 640w, /_astro/44.CqNfoSVf_Z2wN2l9.webp 750w, /_astro/44.CqNfoSVf_3paaU.webp 828w, /_astro/44.CqNfoSVf_lOpok.webp 1080w, /_astro/44.CqNfoSVf_Z25s4Ge.webp 1280w, /_astro/44.CqNfoSVf_Z14kCr2.webp 1668w, /_astro/44.CqNfoSVf_rmyND.webp 2048w, /_astro/44.CqNfoSVf_hvNif.webp 2560w, /_astro/44.CqNfoSVf_Z1AyzAX.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/02に食べた信田缶詰製の「信田缶詰_SABA_さばみそ煮_SIK」です。
魚は鯖で、味噌煮な風味と白、橙色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：PDF結合ツール開発疲れたぁぁぁ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;35. マルハニチロ_北海道のいわし_水煮（マルハニチロ）&lt;a href=&quot;#35-マルハニチロ_北海道のいわし_水煮マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/45.BNvScmDO_2jQxlj.webp&quot; srcset=&quot;/_astro/45.BNvScmDO_1zEvzS.webp 640w, /_astro/45.BNvScmDO_1G4Sd8.webp 750w, /_astro/45.BNvScmDO_ZMT34J.webp 828w, /_astro/45.BNvScmDO_ZMVAsk.webp 1080w, /_astro/45.BNvScmDO_1OX3g3.webp 1280w, /_astro/45.BNvScmDO_Z2e6DiG.webp 1668w, /_astro/45.BNvScmDO_ZHor31.webp 2048w, /_astro/45.BNvScmDO_ZRfcyp.webp 2560w, /_astro/45.BNvScmDO_2jQxlj.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/04に食べたマルハニチロ製の「マルハニチロ_北海道のいわし_水煮」です。
魚は鰯で、水煮な風味と青の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2063.0mgで、EPAが3689.0mgでした。
感想：そこまで塩っぱくないのが良いよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;36. マルハニチロ_北海道のいわし_味付（マルハニチロ）&lt;a href=&quot;#36-マルハニチロ_北海道のいわし_味付マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/46.CvXirwFY_214ljo.webp&quot; srcset=&quot;/_astro/46.CvXirwFY_ZI1Vo7.webp 640w, /_astro/46.CvXirwFY_ZBByKR.webp 750w, /_astro/46.CvXirwFY_1XACKc.webp 828w, /_astro/46.CvXirwFY_Z16IMuf.webp 1080w, /_astro/46.CvXirwFY_1waQe8.webp 1280w, /_astro/46.CvXirwFY_Z2wSPkB.webp 1668w, /_astro/46.CvXirwFY_Z11bD4V.webp 2048w, /_astro/46.CvXirwFY_Z1b2oAk.webp 2560w, /_astro/46.CvXirwFY_214ljo.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/06に食べたマルハニチロ製の「マルハニチロ_北海道のいわし_味付」です。
魚は鰯で、煮付な風味と黒の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1935.0mgで、EPAが2793.0mgでした。
感想：今日は色々と食べたので煮付を食べる気分ではなかったな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;37. マルハニチロ_北海道のいわし_味噌煮（マルハニチロ）&lt;a href=&quot;#37-マルハニチロ_北海道のいわし_味噌煮マルハニチロ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/47.CvJJmj4S_Z28nb7M.webp&quot; srcset=&quot;/_astro/47.CvJJmj4S_1qRNOG.webp 640w, /_astro/47.CvJJmj4S_1xibrV.webp 750w, /_astro/47.CvJJmj4S_ZVFJOV.webp 828w, /_astro/47.CvJJmj4S_ZaYb7u.webp 1080w, /_astro/47.CvJJmj4S_2rUsAS.webp 1280w, /_astro/47.CvJJmj4S_Z1B9dWQ.webp 1668w, /_astro/47.CvJJmj4S_Z5r1Hb.webp 2048w, /_astro/47.CvJJmj4S_ZfhMdz.webp 2560w, /_astro/47.CvJJmj4S_Z28nb7M.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/08に食べたマルハニチロ製の「マルハニチロ_北海道のいわし_味噌煮」です。
魚は鰯で、味噌煮な風味と白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1845.0mgで、EPAが2505.0mgでした。
感想：こういう味噌煮が良いですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;38. Sardinillas en aceite de oliva 16/22 piezas（Vengarco）&lt;a href=&quot;#38-sardinillas-en-aceite-de-oliva-1622-piezasvengarco&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/48.B6pOgkPl_Z9npgP.webp&quot; srcset=&quot;/_astro/48.B6pOgkPl_FJVMf.webp 640w, /_astro/48.B6pOgkPl_Majpu.webp 750w, /_astro/48.B6pOgkPl_Z1GNBRn.webp 828w, /_astro/48.B6pOgkPl_1N0zIs.webp 1080w, /_astro/48.B6pOgkPl_ZDgTm6.webp 1280w, /_astro/48.B6pOgkPl_mPwS6.webp 1668w, /_astro/48.B6pOgkPl_1SxJ8L.webp 2048w, /_astro/48.B6pOgkPl_1IGXCn.webp 2560w, /_astro/48.B6pOgkPl_Z9npgP.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/12に食べたVengarco製の「Sardinillas en aceite de oliva 16/22 piezas」です。
魚は鰯で、オイルな風味と青、紺の缶の色が特徴です。美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：スペインの企業が作った缶詰。ガリシア州リアス産の小さなイワシ。まあ、外国の缶詰だから期待はしていなかったが、魚が萎び過ぎていて食感が良くない。しょっぱい。なるべくならご飯を一緒に食べたいのだが、ホカホカのご飯ではダメだ。油が熱で揮発してあまり良くない匂いが鼻の方に漂ってくる。冷ましたご飯と一緒に撃退するのが良いと思う。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;39. 高木商店_やまめ_ねぎ鯖醤油だれ（高木商店）&lt;a href=&quot;#39-高木商店_やまめ_ねぎ鯖醤油だれ高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/49.CcHNwd17_1u68hT.webp&quot; srcset=&quot;/_astro/49.CcHNwd17_2n3A8p.webp 640w, /_astro/49.CcHNwd17_2tsWKE.webp 750w, /_astro/49.CcHNwd17_ZuXwd.webp 828w, /_astro/49.CcHNwd17_Z1CH0vJ.webp 1080w, /_astro/49.CcHNwd17_10cDcD.webp 1280w, /_astro/49.CcHNwd17_21k5rP.webp 1668w, /_astro/49.CcHNwd17_Z1x9Q6q.webp 2048w, /_astro/49.CcHNwd17_Z1H0BBO.webp 2560w, /_astro/49.CcHNwd17_1u68hT.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/14に食べた高木商店製の「高木商店_やまめ_ねぎ鯖醤油だれ」です。
魚は鯖で、醤油煮な風味と黒、白の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：すんげえ柔らかいネギが入っている。タレが染みていて美味いよ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;40. 高木商店_寒いわし蒲焼_数量限定品（高木商店）&lt;a href=&quot;#40-高木商店_寒いわし蒲焼_数量限定品高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/50.BxQMWBTJ_237DuA.webp&quot; srcset=&quot;/_astro/50.BxQMWBTJ_156p1P.webp 640w, /_astro/50.BxQMWBTJ_1bvLE5.webp 750w, /_astro/50.BxQMWBTJ_Z1is9CM.webp 828w, /_astro/50.BxQMWBTJ_Z14Fuj3.webp 1080w, /_astro/50.BxQMWBTJ_1ye9pk.webp 1280w, /_astro/50.BxQMWBTJ_Z2uPx9p.webp 1668w, /_astro/50.BxQMWBTJ_ZY8kSJ.webp 2048w, /_astro/50.BxQMWBTJ_Z18Y6p8.webp 2560w, /_astro/50.BxQMWBTJ_237DuA.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/19に食べた高木商店製の「高木商店_寒いわし蒲焼_数量限定品」です。
魚は鰯で、蒲焼な風味と橙色の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2640.0mgで、EPAが3110.0mgでした。
感想：徹夜明けでスゲエ眠かったけど、味わいを感じることは出来た。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;41. MEIDI-YA_おいしい缶詰_国産真いわしと野菜のトマト煮（明治屋）&lt;a href=&quot;#41-meidi-ya_おいしい缶詰_国産真いわしと野菜のトマト煮明治屋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/51.inav4LHs_Z1OIYH8.webp&quot; srcset=&quot;/_astro/51.inav4LHs_Z1z1xO.webp 640w, /_astro/51.inav4LHs_4Pl4q.webp 750w, /_astro/51.inav4LHs_Z2p8Adr.webp 828w, /_astro/51.inav4LHs_7E0ia.webp 1080w, /_astro/51.inav4LHs_Z2jCtMo.webp 1280w, /_astro/51.inav4LHs_Z1iv2xc.webp 1668w, /_astro/51.inav4LHs_dc9Ht.webp 2048w, /_astro/51.inav4LHs_3loc5.webp 2560w, /_astro/51.inav4LHs_Z1OIYH8.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/22に食べた明治屋製の「MEIDI-YA_おいしい缶詰_国産真いわしと野菜のトマト煮」です。
魚は鰯で、その他な風味と青、白の缶の色が特徴です。かなり美味いで、缶は開けにくいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：美味いんだけど開けづらいんだよなァァ・・・&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;42. 黄金の村_国産いわし_きとうゆずしお_オリーブオイルづけ（黄金の村）&lt;a href=&quot;#42-黄金の村_国産いわし_きとうゆずしお_オリーブオイルづけ黄金の村&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/52.BAHpxqvw_1R2V2K.webp&quot; srcset=&quot;/_astro/52.BAHpxqvw_1yKM5L.webp 640w, /_astro/52.BAHpxqvw_1Fb9I1.webp 750w, /_astro/52.BAHpxqvw_ZNMLyQ.webp 828w, /_astro/52.BAHpxqvw_Z1fKcKS.webp 1080w, /_astro/52.BAHpxqvw_1n9qWu.webp 1280w, /_astro/52.BAHpxqvw_2ogScG.webp 1668w, /_astro/52.BAHpxqvw_Z1ad3lz.webp 2048w, /_astro/52.BAHpxqvw_Z1k3NQX.webp 2560w, /_astro/52.BAHpxqvw_1R2V2K.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/24に食べた黄金の村製の「黄金の村_国産いわし_きとうゆずしお_オリーブオイルづけ」です。
魚は鰯で、オイルな風味と青、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：塩味の按配がちょうどいいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;43. 高木商店_国産_焼き鯖のアヒージョ（高木商店）&lt;a href=&quot;#43-高木商店_国産_焼き鯖のアヒージョ高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/53.CGlDgybK_jiCsX.webp&quot; srcset=&quot;/_astro/53.CGlDgybK_11GbdA.webp 640w, /_astro/53.CGlDgybK_186xPP.webp 750w, /_astro/53.CGlDgybK_Z1lRnr2.webp 828w, /_astro/53.CGlDgybK_2gGCtg.webp 1080w, /_astro/53.CGlDgybK_ZazQBi.webp 1280w, /_astro/53.CGlDgybK_PwzCT.webp 1668w, /_astro/53.CGlDgybK_2meLSz.webp 2048w, /_astro/53.CGlDgybK_2co1nb.webp 2560w, /_astro/53.CGlDgybK_jiCsX.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/26に食べた高木商店製の「高木商店_国産_焼き鯖のアヒージョ」です。
魚は鯖で、オイルな風味と水色、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：塩こしょうが効いていて美味いぞ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;44. 木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[あっさり塩味]（木の屋石巻水産）&lt;a href=&quot;#44-木の屋石巻水産_料理に活きる_サラダサバ_さば油漬けあっさり塩味木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/35.B9vL-1Jk_1x0D2W.webp&quot; srcset=&quot;/_astro/35.B9vL-1Jk_Z2x2quy.webp 640w, /_astro/35.B9vL-1Jk_Z2qC3Rj.webp 750w, /_astro/35.B9vL-1Jk_9A8DK.webp 828w, /_astro/35.B9vL-1Jk_Z1zMuKG.webp 1080w, /_astro/35.B9vL-1Jk_1378WG.webp 1280w, /_astro/35.B9vL-1Jk_24eAcS.webp 1668w, /_astro/35.B9vL-1Jk_Z1uflln.webp 2048w, /_astro/35.B9vL-1Jk_Z1E66QL.webp 2560w, /_astro/35.B9vL-1Jk_1x0D2W.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/28に食べた木の屋石巻水産製の「木の屋石巻水産_料理に活きる_サラダサバ_さば油漬け[あっさり塩味]」です。
魚は鯖で、オイルな風味と青、黄色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが590.0mgで、EPAが300.0mgでした。
感想：サッパリとした食感です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;45. VALUE_PLUS_国産さば使用_さば味噌煮（宝幸）&lt;a href=&quot;#45-value_plus_国産さば使用_さば味噌煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/55.HRaI36wr_ZdpLLr.webp&quot; srcset=&quot;/_astro/55.HRaI36wr_FC002.webp 640w, /_astro/55.HRaI36wr_M2mCh.webp 750w, /_astro/55.HRaI36wr_Z1GVyEA.webp 828w, /_astro/55.HRaI36wr_1IXddQ.webp 1080w, /_astro/55.HRaI36wr_ZHjgQH.webp 1280w, /_astro/55.HRaI36wr_iNanu.webp 1668w, /_astro/55.HRaI36wr_1OvmDa.webp 2048w, /_astro/55.HRaI36wr_1EEB7L.webp 2560w, /_astro/55.HRaI36wr_ZdpLLr.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/11/30に食べた宝幸製の「VALUE_PLUS_国産さば使用_さば味噌煮」です。
魚は鯖で、味噌煮な風味と橙色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：今日は凄い忙しなく活動している気がする。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;46. VALUE_PLUS_国産さば使用_さば水煮（宝幸）&lt;a href=&quot;#46-value_plus_国産さば使用_さば水煮宝幸&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/56.CkZta77Z_gH3Yd.webp&quot; srcset=&quot;/_astro/56.CkZta77Z_Z25vmPq.webp 640w, /_astro/56.CkZta77Z_Z1Y60db.webp 750w, /_astro/56.CkZta77Z_B7ciS.webp 828w, /_astro/56.CkZta77Z_2e63Yv.webp 1080w, /_astro/56.CkZta77Z_Zdbq63.webp 1280w, /_astro/56.CkZta77Z_MV199.webp 1668w, /_astro/56.CkZta77Z_2jDdoO.webp 2048w, /_astro/56.CkZta77Z_29MrSq.webp 2560w, /_astro/56.CkZta77Z_gH3Yd.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/02に食べた宝幸製の「VALUE_PLUS_国産さば使用_さば水煮」です。
魚は鯖で、水煮な風味と水色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：麻婆豆腐を食った後に食べると落ち着くわ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;47. セブンプレミアム_バジルオリーブオイルさば_オイルごと使える_MCT中鎖脂肪酸（STIフードホールディングス）&lt;a href=&quot;#47-セブンプレミアム_バジルオリーブオイルさば_オイルごと使える_mct中鎖脂肪酸stiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/57.C6inlemO_26ahzg.webp&quot; srcset=&quot;/_astro/57.C6inlemO_1JdWTE.webp 640w, /_astro/57.C6inlemO_1PDkwT.webp 750w, /_astro/57.C6inlemO_ZDkAJX.webp 828w, /_astro/57.C6inlemO_Z11CQen.webp 1080w, /_astro/57.C6inlemO_1BgMu0.webp 1280w, /_astro/57.C6inlemO_Z2rMT4J.webp 1668w, /_astro/57.C6inlemO_ZV5GO4.webp 2048w, /_astro/57.C6inlemO_Z15Vsks.webp 2560w, /_astro/57.C6inlemO_26ahzg.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/04に食べたSTIフードホールディングス製の「セブンプレミアム_バジルオリーブオイルさば_オイルごと使える_MCT中鎖脂肪酸」です。
魚は鯖で、オイルな風味と緑の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2175.0mgで、EPAが1470.0mgでした。
感想：けっこう合いますねえ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;48. 黄金の村_国産いわし_きとうゆずしおバター（黄金の村）&lt;a href=&quot;#48-黄金の村_国産いわし_きとうゆずしおバター黄金の村&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/58.DC-TyPEk_Z1cCS5N.webp&quot; srcset=&quot;/_astro/58.DC-TyPEk_Z28q8Xs.webp 640w, /_astro/58.DC-TyPEk_Z220Lld.webp 750w, /_astro/58.DC-TyPEk_ycqaQ.webp 828w, /_astro/58.DC-TyPEk_JK6Tu.webp 1080w, /_astro/58.DC-TyPEk_Z1Gwnb4.webp 1280w, /_astro/58.DC-TyPEk_ZFoUUR.webp 1668w, /_astro/58.DC-TyPEk_PigjN.webp 2048w, /_astro/58.DC-TyPEk_FruNp.webp 2560w, /_astro/58.DC-TyPEk_Z1cCS5N.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/06に食べた黄金の村製の「黄金の村_国産いわし_きとうゆずしおバター」です。
魚は鰯で、オイルな風味と黄色、白の缶の色が特徴です。かなり美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：バターって珍しいよな。そして美味いんだよなあ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;49. AIKOCHAN_伊藤食品_美味しい鯖_味噌煮（伊藤食品）&lt;a href=&quot;#49-aikochan_伊藤食品_美味しい鯖_味噌煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/59.D6pnEQ6C_1EA3x5.webp&quot; srcset=&quot;/_astro/59.D6pnEQ6C_ZeH218.webp 640w, /_astro/59.D6pnEQ6C_Z8hEnS.webp 750w, /_astro/59.D6pnEQ6C_2rUx8b.webp 828w, /_astro/59.D6pnEQ6C_Z1sd5gy.webp 1080w, /_astro/59.D6pnEQ6C_1aGyrO.webp 1280w, /_astro/59.D6pnEQ6C_2bO0H1.webp 1668w, /_astro/59.D6pnEQ6C_Z1mEUQf.webp 2048w, /_astro/59.D6pnEQ6C_Z1wvGmD.webp 2560w, /_astro/59.D6pnEQ6C_1EA3x5.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/10に食べた伊藤食品製の「AIKOCHAN_伊藤食品_美味しい鯖_味噌煮」です。
魚は鯖で、味噌煮な風味と金色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが710.0mgで、EPAが160.0mgでした。
感想：金色だからスゴイ美味そうに見えるがそうでもないこの一品。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;50. セブンプレミアム_国産さばみそ煮_塩こうじでまろやか_MCT中鎖脂肪酸（STIフードホールディングス）&lt;a href=&quot;#50-セブンプレミアム_国産さばみそ煮_塩こうじでまろやか_mct中鎖脂肪酸stiフードホールディングス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/60.C2vTuOga_Z26uU7v.webp&quot; srcset=&quot;/_astro/60.C2vTuOga_VUjXD.webp 640w, /_astro/60.C2vTuOga_13kGAS.webp 750w, /_astro/60.C2vTuOga_Z1qDeFY.webp 828w, /_astro/60.C2vTuOga_Z96U7d.webp 1080w, /_astro/60.C2vTuOga_2tMIBa.webp 1280w, /_astro/60.C2vTuOga_Z1zgWWz.webp 1668w, /_astro/60.C2vTuOga_Z3yKGT.webp 2048w, /_astro/60.C2vTuOga_Zdpwdi.webp 2560w, /_astro/60.C2vTuOga_Z26uU7v.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/14に食べたSTIフードホールディングス製の「セブンプレミアム_国産さばみそ煮_塩こうじでまろやか_MCT中鎖脂肪酸」です。
魚は鯖で、味噌煮な風味と橙色、茶色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが3173.0mgで、EPAが2318.0mgでした。
感想：そうでもありませんでした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;51. 高木商店_国産_焼きいわしのアヒージョ（高木商店）&lt;a href=&quot;#51-高木商店_国産_焼きいわしのアヒージョ高木商店&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/61.19MiE1QO_Micz7.webp&quot; srcset=&quot;/_astro/61.19MiE1QO_Z1JtpUS.webp 640w, /_astro/61.19MiE1QO_Z1D43iD.webp 750w, /_astro/61.19MiE1QO_W99dq.webp 828w, /_astro/61.19MiE1QO_Z2kuVew.webp 1080w, /_astro/61.19MiE1QO_ioHtQ.webp 1280w, /_astro/61.19MiE1QO_1jw9J3.webp 1668w, /_astro/61.19MiE1QO_Z2eWLOd.webp 2048w, /_astro/61.19MiE1QO_Z2oNxkB.webp 2560w, /_astro/61.19MiE1QO_Micz7.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/16に食べた高木商店製の「高木商店_国産_焼きいわしのアヒージョ」です。
魚は鰯で、オイルな風味と橙色、白の缶の色が特徴です。美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：コイツも美味かったな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;52. AIKOCHAN_伊藤食品_美味しい鯖_水煮（伊藤食品）&lt;a href=&quot;#52-aikochan_伊藤食品_美味しい鯖_水煮伊藤食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/62.ChQsRLBv_Z1KkceB.webp&quot; srcset=&quot;/_astro/62.ChQsRLBv_Z1kttNI.webp 640w, /_astro/62.ChQsRLBv_Z1e47bt.webp 750w, /_astro/62.ChQsRLBv_1m95kA.webp 828w, /_astro/62.ChQsRLBv_c3MKG.webp 1080w, /_astro/62.ChQsRLBv_Z2fdGjR.webp 1280w, /_astro/62.ChQsRLBv_Z1e6f4F.webp 1668w, /_astro/62.ChQsRLBv_hAWb0.webp 2048w, /_astro/62.ChQsRLBv_7KbEB.webp 2560w, /_astro/62.ChQsRLBv_Z1KkceB.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/19に食べた伊藤食品製の「AIKOCHAN_伊藤食品_美味しい鯖_水煮」です。
魚は鯖で、水煮な風味と銀色の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが1060.0mgで、EPAが240.0mgでした。
感想：銀色だからスゴイ美味そうに見えるがそうでもないこの一品。まあ水煮だもんな。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;53. SABA_サバカリー_本格麻辣仕立て（SSK、新宿中村屋）&lt;a href=&quot;#53-saba_サバカリー_本格麻辣仕立てssk新宿中村屋&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/63.Bd9CNErj_ZWGQW3.webp&quot; srcset=&quot;/_astro/63.Bd9CNErj_ZWGQW3.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/21に食べたSSK、新宿中村屋製の「SABA_サバカリー_本格麻辣仕立て」です。
魚は鯖で、辛いな風味と赤の缶の色が特徴です。少し美味いで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2305.0mgで、EPAが1680.0mgでした。
感想：少し辛い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;54. いなば_日本産いわし100%_ひと口いわし_味付（‎いなば食品）&lt;a href=&quot;#54-いなば_日本産いわし100_ひと口いわし_味付いなば食品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/64.CtT2la_I_1yP6oR.webp&quot; srcset=&quot;/_astro/64.CtT2la_I_ZyT8oi.webp 640w, /_astro/64.CtT2la_I_ZstKL3.webp 750w, /_astro/64.CtT2la_I_27IqK1.webp 828w, /_astro/64.CtT2la_I_Z1xX2oL.webp 1080w, /_astro/64.CtT2la_I_14VBjB.webp 1280w, /_astro/64.CtT2la_I_2643yN.webp 1668w, /_astro/64.CtT2la_I_Z1spRYs.webp 2048w, /_astro/64.CtT2la_I_Z1CgDuQ.webp 2560w, /_astro/64.CtT2la_I_1yP6oR.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/24に食べた‎いなば食品製の「いなば_日本産いわし100%_ひと口いわし_味付」です。
魚は鰯で、煮付な風味と橙色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが470.0mgで、EPAが460.0mgでした。
感想：一口目を食べた瞬間には、サバよりは不味くないなと思ったが、生姜を食べたら少し不味かった。どうしたもんかねえ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;55. SABA_サバ・トマレモ_トマト&amp;amp;レモン味（SSK）&lt;a href=&quot;#55-saba_サバトマレモ_トマトレモン味ssk&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;450&quot; src=&quot;/_astro/65.DKPr8IiG_gPSXy.webp&quot; srcset=&quot;/_astro/65.DKPr8IiG_gPSXy.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/26に食べたSSK製の「SABA_サバ・トマレモ_トマト&amp;amp;レモン味」です。
魚は鯖で、その他な風味と朱色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが2730.0mgで、EPAが2030.0mgでした。
感想：最近なんだか暑すぎるぞ&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;56. 木の屋石巻水産_印度カリー子監修のカレー缶詰_丸ごといわし（木の屋石巻水産）&lt;a href=&quot;#56-木の屋石巻水産_印度カリー子監修のカレー缶詰_丸ごといわし木の屋石巻水産&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/66.CHWp_OWI_Z1QLSP6.webp&quot; srcset=&quot;/_astro/66.CHWp_OWI_Z1YHK6b.webp 640w, /_astro/66.CHWp_OWI_Z1SinsV.webp 750w, /_astro/66.CHWp_OWI_GTO38.webp 828w, /_astro/66.CHWp_OWI_5B6ac.webp 1080w, /_astro/66.CHWp_OWI_Z2lFnUm.webp 1280w, /_astro/66.CHWp_OWI_Z1kxVFa.webp 1668w, /_astro/66.CHWp_OWI_b9fzv.webp 2048w, /_astro/66.CHWp_OWI_1iu47.webp 2560w, /_astro/66.CHWp_OWI_Z1QLSP6.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024/12/29に食べた木の屋石巻水産製の「木の屋石巻水産_印度カリー子監修のカレー缶詰_丸ごといわし」です。
魚は鰯で、辛いな風味と黄色、茶色の缶の色が特徴です。あまり美味くないで、缶は開けやすいです。
オメガ3脂肪酸の含有量の目安としては、DHAが記載無しで、EPAが記載無しでした。
感想：開け易すぎて開け難い事案かもしれない。鰯とカレーが微妙に合わないな・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだコレ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶でした。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2025年02月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202502/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202502/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にPalworldのシリーズが更新されています。アズールレーンの動画もありました。</description><pubDate>Sun, 23 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2025年2月に投稿した動画の一覧&lt;a href=&quot;#2025年2月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Palworld】セッションタイムアウト攻撃を放つ武装ヘリを発見しました！（大規模オイルリグ）【ゆっくり実況】&lt;a href=&quot;#palworldセッションタイムアウト攻撃を放つ武装ヘリを発見しました大規模オイルリグゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AW6WLKmMTMU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】パルソウル+60にしたベイントール50体でボルドラゴ極をボコボコにする（鬼神ブリザードスパイクバージョン）【ゆっくり実況】&lt;a href=&quot;#palworldパルソウル60にしたベイントール50体でボルドラゴ極をボコボコにする鬼神ブリザードスパイクバージョンゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FRwH5UkPuZk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】ボルドラゴ10連戦 ～レーザーガトリングガンを携えて～【ゆっくり実況】&lt;a href=&quot;#palworldボルドラゴ10連戦-レーザーガトリングガンを携えてゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/3JLYulir7OI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】パルソウル+60にしたベイントール50体でボルドラゴ極をボコボコに…てアレ？（吸血鬼バージョン）【ゆっくり実況】&lt;a href=&quot;#palworldパルソウル60にしたベイントール50体でボルドラゴ極をボコボコにてアレ吸血鬼バージョンゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Vh_nAgv_BjE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】ベイントールでボルドラゴ自動迎撃システムが出来上がってしまった…&lt;a href=&quot;#palworldベイントールでボルドラゴ自動迎撃システムが出来上がってしまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AQv7fSBzgC8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】パルソウル+60にしたベイントール100体でゼノドラン極を何が何でも倒す！【ゆっくり実況】&lt;a href=&quot;#palworldパルソウル60にしたベイントール100体でゼノドラン極を何が何でも倒すゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/txn7xBAkL4Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】ベイントールと一緒に塔ボスハードを廻る【ゆっくり実況】&lt;a href=&quot;#palworldベイントールと一緒に塔ボスハードを廻るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/YHM-7nh5-gU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】通商破壊でウィダーとアミティを放置して勝利&lt;a href=&quot;#アズールレーン通商破壊でウィダーとアミティを放置して勝利&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/02/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/y-gJV3Gf03M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Go、Docker】「api」という名前のパッケージを作るとビルド出来なくなる</title><link>https://endorphinbath.com/posts/go-docker-api-package-building-problem/</link><guid isPermaLink="true">https://endorphinbath.com/posts/go-docker-api-package-building-problem/</guid><description>Goでアプリケーションを開発する際、「api」というパッケージ名を含んだモジュールをDockerコンテナ内でビルドしようとするとバグります。そんな奇妙な事象に遭遇して沼りました。</description><pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～ん、これはどうなっているんだ？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;デプロイが出来ないな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、何が起きてるんだ&lt;a href=&quot;#まず何が起きてるんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、Goを使ってGinベースのWebアプリケーションを開発していました。このアプリケーションをCloud Runにデプロイしようとしたところ、奇妙な現象に遭遇しました。&lt;/p&gt;&lt;p&gt;今回使っていたGoのバージョンは、1.23.5です。&lt;/p&gt;&lt;p&gt;まあ、例えばこんな感じのディレクトリ構造になっているとします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/home/user/my-module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--.dockerignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--.gcloudignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--COMMIT_EDITMSG&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--FETCH_HEAD&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--handlers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| | |--user.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--logger.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--logger_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--middleware&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| | |--auth.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| | |--rate_limiter.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--router.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--router_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--swagger.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--swagger_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--util.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--util_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--coverage.html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--coverage.out&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--db_pc_stats&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--domain.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--domain_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--model.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--model_error_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--model_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--util.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Cloud Runにデプロイする時に使ったコマンドは普通にこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;image_name&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=&amp;lt;project_id&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=&amp;lt;region&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--allow-unauthenticated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--timeout=60s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして今回、そのサービスのデプロイが失敗して、Cloud Buildのログの中に以下のようなエラーメッセージが表示されたのです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;main.go:9:2: no required module provides package github.com/user/my-module/api; to add it:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;go get github.com/user/my-module/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;The command &apos;/bin/sh -c go build -v -o main&apos; returned a non-zero code: 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ERROR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ERROR: build step 0 &quot;gcr.io/cloud-builders/docker&quot; failed: step exited with non-zero status: 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラーが発生している箇所は、以下のようなインポート文でした。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;api&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github.com/user/my-module/api&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;あれ・・・？&lt;/p&gt;&lt;p&gt;ローカル環境では&lt;code&gt;go build -v -o main&lt;/code&gt;を実行すると問題なくビルド出来ていました。しかし、Dockerコンテナ内で同じコマンドを実行するとエラーになるなんて・・・。これは一体どういうことでしょうか？&lt;/p&gt;&lt;p&gt;今回、アプリケーションの構造として、APIのルーティングやSwagger UIの実装を「api」というパッケージに配置していました。しかし、このディレクトリ構造の状態で、ローカル環境では問題なくビルドできていたのですが、Dockerコンテナ内でビルドすると失敗する。・・・という謎の現象が発生したのです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因を探る。&lt;a href=&quot;#原因を探る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最初は、開発中にgo.modのモジュール名を変更したことが原因かと思いました。しかし、他のプロジェクトでは同様のディレクトリ構成でもデプロイできていました。モジュール名も「my-project」や「github.com/username/mymodule」のような形式でも問題なくデプロイできていました。&lt;/p&gt;&lt;p&gt;次に、Dockerfileを見てみました。「&lt;code&gt;RUN go build -v -o main&lt;/code&gt;」のレイヤーでエラーになりました。このレイヤーの前に&lt;code&gt;go mod tidy&lt;/code&gt;や&lt;code&gt;go mod edit&lt;/code&gt;を入れても相変わらずエラーになりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Build stage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; debian:11 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; builder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 依存関係をダウンロード（go.mod, go.sumがある場合）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt-get update &amp;amp;&amp;amp; apt-get upgrade -y &amp;amp;&amp;amp; apt-get install -y curl gcc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; go.mod go.sum ./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; curl -OL &amp;lt;https://go.dev/dl/go1.23.7.linux-amd64.tar.gz&amp;gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tar -C /usr/local -xzf go1.23.7.linux-amd64.tar.gz &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;\\\\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rm -rf go1.23.7.linux-amd64.tar.gz&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PATH $PATH:/usr/local/go/bin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; go mod download&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ソースコードをコピー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; . .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ↓↓ アプリケーションのビルド ↓↓ &amp;lt;------------------------------- HERE!!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; go build -v -o main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Final stage: 軽量な実行環境&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# FROM gcr.io/distroless/base-debian10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; debian:11 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt-get update &amp;amp;&amp;amp; apt-get upgrade -y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt-get install -y openssl ca-certificates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ビルドしたバイナリをコピー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; --from=builder /app/main .&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Cloud Runのためにポート8080を公開&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPOSE&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# コンテナ起動時に実行されるコマンド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CMD&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;./main&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因が判明する&lt;a href=&quot;#原因が判明する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そんなこんなで、色々と試しながら30分ぐらい経った頃でしょうか・・・、試行錯誤の末、ついに「api」ディレクトリの名前を「app」に変更したところ、デプロイが成功しました。その箇所だけ変更してデプロイし直すと結果が違ったので、たぶん間違いないかと。&lt;/p&gt;&lt;p&gt;ええっ・・・、そんなことってあるの・・・？？&lt;/p&gt;&lt;p&gt;「api」っていう名前のパッケージで、Dockerコンテナ内でGoモジュールがビルド出来なくなる・・・？？&lt;/p&gt;&lt;p&gt;Goのプロジェクトモジュールのディレクトリ構造の参考として、「golang-standards/project-layout」というものがあります。&lt;/p&gt;&lt;a href=&quot;https://github.com/golang-standards/project-layout&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub - golang-standards/project-layout: Standard Go Project Layout&lt;/div&gt;&lt;div&gt;Standard Go Project Layout. Contribute to golang-standards/project-layout development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/36d2357eae9db3c31e3b423bf7d7898f341d106d89f5f4a794f755fafae4038e/golang-standards/project-layout&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;その「golang-standards/project-layout」のリポジトリで紹介されているようなプロジェクトレイアウトのサンプルでは「api」ディレクトリがあるけど、それはどういうことなの？　・・・とも思いましたが、このディレクトリの中のREADMEを見ると、「OpenAPI/Swagger specs, JSON schema files, protocol definition files.」と書かれているので、おそらくこの「api」ディレクトリにはGoファイルは格納されないんだと思います。そう考えれば、今回の事象の原因の反例にはならない。&lt;/p&gt;&lt;p&gt;でも、「api」ディレクトリが原因ならば、その旨をエラーメッセージに出して欲しいんだけどなぁ・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;考えられる理由&lt;a href=&quot;#考えられる理由&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なぜ「api」という名前のパッケージがDockerコンテナ内でビルドに失敗するのでしょうか？いくつかの可能性が考えられます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;名前の衝突&lt;/strong&gt;: 「api」という名前が、Goの標準ライブラリや内部的な何かと衝突している可能性があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特別な扱い&lt;/strong&gt;: 「api」ディレクトリは、OpenAPIなどのAPI仕様書を格納するための特別なディレクトリとして認識されている可能性があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;環境の違い&lt;/strong&gt;: ローカル環境とDockerコンテナ環境の微妙な違いにより、同じコードでも挙動が異なる可能性があります。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;うーん、でも今回事象が発生したプロジェクトでは「api」ディレクトリでAPIのルーティングをしてるし、SwaggerUIを作る部分もこの中でやってるから、「api」という名前のGoパッケージにしたかったのだが・・・。そうかぁ・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のまとめです。&lt;/p&gt;&lt;p&gt;Goでアプリケーションを開発する際、パッケージ名には注意が必要です。特に「api」という名前は、ローカル環境では問題なくても、Dockerコンテナ内でビルドする際に問題を引き起こす可能性がありました。&lt;/p&gt;&lt;p&gt;そして、「api」ディレクトリを「app」に変更することで問題が解決しました。APIのルーティングやSwagger UIの実装は「app」パッケージ内で行うことにしました。&lt;/p&gt;&lt;p&gt;そしてまあ、今回のような問題に遭遇した場合に解決した流れは以下の通りです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;パッケージ名の変更&lt;/strong&gt;: 「api」という名前を避け、「app」「apiserver」「endpoints」など別の名前に変更する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モジュール構造の見直し&lt;/strong&gt;: プロジェクトのモジュール構造を見直し、標準的なレイアウトに合わせる。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ビルド環境のテスト&lt;/strong&gt;: デプロイ前に、Dockerコンテナ内でのビルドテストを行い、問題を早期に発見する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;また、Goのプロジェクト構造については、&lt;a href=&quot;https://github.com/golang-standards/project-layout/tree/master&quot; target=&quot;_blank&quot;&gt;golang-standards/project-layout&lt;/a&gt;のような標準的なレイアウトを参考にすると良いでしょう。まあ、個人開発の水準としては、丸写しするにはかなり手が込んでいますが・・・。（このリポジトリでも留意事項に同じようなことが書いてありました。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;また変なところで沼ったなああ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;分かってよかったです。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Go】日付計算とかWeb検索とかするMCPサーバを手に入れた</title><link>https://endorphinbath.com/posts/go-cline-mcp-server-date-calculation-web-search/</link><guid isPermaLink="true">https://endorphinbath.com/posts/go-cline-mcp-server-date-calculation-web-search/</guid><description>GoでClineに利用出来るMCPサーバを作りました。年月日の計算やBraveのAPIを使ってWeb検索が出来るようになっています。</description><pubDate>Fri, 14 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわああああ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;出来てしまったようだな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;MCPサーバでさらに色んなことが・・・&lt;a href=&quot;#mcpサーバでさらに色んなことが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近巷で話題になっているMCPサーバをGoで組んでみたので、途中まで作成したものを紹介がてら、どんなことが出来るのかを紹介していきます。&lt;/p&gt;&lt;p&gt;本当にスゴイです。チャット画面の中でしか動けなかったAI君が画面を飛び出して色々なところから情報を拾ってくるようになります。楽しくなってきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;MCPサーバとは？&lt;a href=&quot;#mcpサーバとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Model Context Protocol（MCP）は、AnthropicのClaudeなどのAIモデルが外部のデータソースやツールと安全に対話するための標準化されたプロトコルです。MCPサーバを使うことで、AIアシスタントは以下のようなことができるようになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ファイルシステムへのアクセス&lt;/li&gt;
&lt;li&gt;データベースへの問い合わせ&lt;/li&gt;
&lt;li&gt;Web検索の実行&lt;/li&gt;
&lt;li&gt;日時計算の実行&lt;/li&gt;
&lt;li&gt;HTTPリクエストの送信&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;つまり、AIアシスタントが「外の世界」とやり取りするための窓口となるわけです。これにより、AIの能力が大幅に拡張され、より実用的なタスクをこなせるようになります。&lt;/p&gt;&lt;p&gt;例えば、足し算とか引き算などの算術演算の処理に対して、大規模言語モデルは当たり前のように間違えてしまいますよね。しかし、算術演算用のMCPサーバを設置してしまえばそんなことは無くなります。&lt;/p&gt;&lt;p&gt;MCPサーバを立てるためのSDKは、Model Context Protocolという組織の公式リポジトリで公開されていて、そのパッケージを使ったサンプルコードも紹介されているのですが、使用している言語は、Python、TypeScript、C#、Java、Kotlinだけなんですよね。（2025-03-30時点）&lt;/p&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/python-sdk&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;modelcontextprotocol&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;python-sdk&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし今回、MCPサーバを実装するのに使った言語は、Goです。なぜわざわざGoにしたのかと言うと、Pythonと同様に書き慣れていたというのと、AIにコーディングしてもらう時は静的型付け言語の方がバグの少ないソースを生成してもらいやすいというのがあるみたいなので、ちょっくらやってみました。（実際、今回も実行時には殆どバグが起きませんでした。）あと、バイナリにビルドするので、基本的にどんな環境でも動きます。&lt;/p&gt;&lt;p&gt;GoでMCPサーバの開発が行われているリポジトリで最も活発なものが、「mcp-go」というリポジトリでした。今回はそのパッケージを使って開発させていただきます。&lt;/p&gt;&lt;a href=&quot;https://github.com/mark3labs/mcp-go&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;mark3labs&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;mcp-go&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;mcps-goの紹介&lt;a href=&quot;#mcps-goの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回開発したのは、「mcps-go」というリポジトリです。一旦、以下の4つのMCPサーバを提供出来ています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;arithmetic_calculator - 算術計算機能&lt;/li&gt;
&lt;li&gt;datetime_calculator - 日時計算機能&lt;/li&gt;
&lt;li&gt;http_request - HTTPリクエスト機能&lt;/li&gt;
&lt;li&gt;brave_web_search - Brave検索エンジンを使用したWeb検索機能&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;今回作ったリポジトリは公開しています。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/mcps-go&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;mcps-go&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;これらのサーバは、コマンドライン引数によって選択的に起動できるようになっています。ClineのためのMCPサーバを設定するための&lt;code&gt;cline_mcp_settings.json&lt;/code&gt;には、以下のように記述して使用できます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;mcpServers&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;arithmetic_calculator&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;arith_calc&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;datetime_calculator&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;datetime_calc&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;http_request&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;http_request&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;brave_web_search&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;brave_web_search&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;BRAVE_API_KEY&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;あなたのAPIキー&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実装されているMCPサーバの詳細&lt;a href=&quot;#実装されているmcpサーバの詳細&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、各MCPサーバの機能を詳しく見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;arithmetic_calculator（算術計算機能）&lt;a href=&quot;#arithmetic_calculator算術計算機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;基本的な算術計算を行うためのMCPサーバです。足し算、引き算、掛け算、割り算などの基本的な計算機能を提供します。この機能は、mcp-goのクイックスタートをそのまま利用しています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;datetime_calculator（日時計算機能）&lt;a href=&quot;#datetime_calculator日時計算機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;日時に関する様々な計算を行うためのMCPサーバです。主な機能は以下の通りです：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;日時に年月日時分秒を追加（AddDatetime）&lt;/li&gt;
&lt;li&gt;日時から年月日時分秒を引く（SubtractDatetime）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;例えば、現在の日時から1年3ヶ月5日後の日時を計算したり、4時間15分7秒前の日時を計算したりすることが出来ます。日付に関する複雑な計算を簡単に行えるので、スケジュール管理やイベント計画などに役立つかもしれません。この機能は実装に必要なパラメータが多かったので、AIコーディングがあって本当に助かりました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;http_request（HTTPリクエスト機能）&lt;a href=&quot;#http_requesthttpリクエスト機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;外部APIにHTTPリクエストを送信するためのMCPサーバです。GET、POST、PUT、DELETEなどの主要なHTTPメソッドをサポートしており、外部のWebサービスやAPIと連携できます。&lt;/p&gt;&lt;p&gt;これにより、AIアシスタントは天気情報の取得、ニュースの検索、データの送信など、インターネット上の様々なサービスにアクセスできるようになります。この機能も、mcp-goのクイックスタートをそのまま利用しています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;brave_web_search（Brave検索機能）&lt;a href=&quot;#brave_web_searchbrave検索機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Brave Search APIを使用してWeb検索を行うためのMCPサーバです。このサーバは以下の2つの主要な機能を提供しています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;brave_web_search&lt;/strong&gt; - 一般的なWeb検索機能
&lt;ul&gt;
&lt;li&gt;一般的なクエリ、ニュース、記事、オンラインコンテンツの検索に適しています。&lt;/li&gt;
&lt;li&gt;最大20件の結果を取得可能。&lt;/li&gt;
&lt;li&gt;ページネーション、コンテンツフィルタリング、鮮度コントロールをサポート。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;brave_local_search&lt;/strong&gt; - ローカルビジネス検索機能
&lt;ul&gt;
&lt;li&gt;物理的な場所、ビジネス、レストラン、サービスなどに関連するクエリに適しています。&lt;/li&gt;
&lt;li&gt;ビジネス名や住所、評価とレビュー数、電話番号や営業時間などの詳細情報を返します。&lt;/li&gt;
&lt;li&gt;「近くの」や特定の場所を含むクエリに最適。&lt;/li&gt;
&lt;li&gt;ローカル結果が見つからない場合は自動的にWeb検索にフォールバック。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;このサーバを使用するには、Brave Search APIのAPIキーが必要です。APIキーは環境変数「BRAVE_API_KEY」として設定する必要があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;使い方と設定方法&lt;a href=&quot;#使い方と設定方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;mcps-goを使用するには、まず以下の手順でビルドします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 通常のビルド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Dockerを使用したビルド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcps-go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;一応、Dockerを使ったビルドも出来ることには出来ますが、その場合だとなぜか、Cline君がMCPサーバを利用するのに必要な引数を渡せなくなってしまい、動かすことが出来ませんでした・・・。ちょっとまだ、mcp-goの動きがよく分かっていないので、一旦通常のビルドでバイナリを動かす形で利用していきます。&lt;/p&gt;&lt;p&gt;次に、Clineなどのクライアントで使用するために、設定ファイル（cline_mcp_setting.json）に以下のような設定を追加します。これは冒頭の方で見せたJSONファイルと同じものです。&lt;code&gt;brave_web_search&lt;/code&gt;を使用する場合は、Brave Search APIのAPIキーを取得して設定する必要があります。（実はここにAPIキーを書きたくなかったので、Dockerを使いたかったんですけどね。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;mcpServers&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;arithmetic_calculator&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;arith_calc&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;datetime_calculator&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;datetime_calc&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;http_request&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;http_request&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;brave_web_search&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;command&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;/home/nov/mcps-go-for-claude/mcps-go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;args&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;brave_web_search&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;env&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;BRAVE_API_KEY&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;あなたのAPIキー&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;disabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;autoApprove&quot;&lt;/span&gt;&lt;span&gt;: []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;設定が完了したら、Clineなどのクライアントを再起動すると、AIアシスタントが新しいMCPサーバを使用できるようになります。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;利用可能なMCPサーバを確認&quot; loading=&quot;lazy&quot; width=&quot;348&quot; height=&quot;428&quot; src=&quot;/_astro/11.BRvi7RL9_Z1NQa7f.webp&quot; srcset=&quot;/_astro/11.BRvi7RL9_Z1NQa7f.webp 348w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;MCPサーバの実際の使用例&lt;a href=&quot;#mcpサーバの実際の使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、実際にこれらのMCPサーバをどのように使用できるか、いくつか例を見てみましょう。使ったモデルは、ChatGPT-4o-miniだったり、Claude 3.7 Sonnetだったりでした。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;日時計算の例&lt;a href=&quot;#日時計算の例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ざっくりと、以下のようなやり取りになりました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ユーザー: 500/100の計算をツールを使って行ってください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;GPT 4o-mini: ユーザーは500/100の計算結果を知りたいようです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;これを計算するために、arithmetic_calculatorというMCPサーバーを使うことができます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;このサーバーは算術計算を行うツールを提供しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;500/100は5.00です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;日時計算の例&lt;a href=&quot;#日時計算の例-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ざっくりと、以下のようなやり取りになりました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ユーザー: 今日の4日後の日付をツールを使って教えて。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;GPT 4o-mini: ユーザーは今日の4日後の日付を知りたいようです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;これを計算するために、datetime_calculatorというMCPサーバーを使うことができます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;このサーバーは日付計算を行うツールを提供しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;今日の4日後の日付は2025年4月3日です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;実行した時のスクショです。こういう機能ってどこかで使うような気がするので、実装できてよかったです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;日時計算ツール実行時のスクショ&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;548&quot; src=&quot;/_astro/12.DJYMBMdf_2s5ymO.webp&quot; srcset=&quot;/_astro/12.DJYMBMdf_2s5ymO.webp 357w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;パラメータをこれぐらい分けないと、大規模言語モデルはパラメータに適切な値を渡してくれません。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;パラメータ改良後のスクショ&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;551&quot; src=&quot;/_astro/13.BpIUo2qp_Z18ObHW.webp&quot; srcset=&quot;/_astro/13.BpIUo2qp_Z18ObHW.webp 360w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;MCPツールの結果による回答のスクショ&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;358&quot; src=&quot;/_astro/14.DH_0P6J0_ZFJscF.webp&quot; srcset=&quot;/_astro/14.DH_0P6J0_ZFJscF.webp 355w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;13日前だろうが、4日後だろうが、使いたいMCPツールを呼び出すことが出来ています。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;日時計算ツールの更なる検証のスクショ&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;653&quot; src=&quot;/_astro/15.BWMWItBO_Z8KjVw.webp&quot; srcset=&quot;/_astro/15.BWMWItBO_Z8KjVw.webp 351w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;HTTPリクエストの例&lt;a href=&quot;#httpリクエストの例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ざっくりと、以下のようなやり取りになりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ユーザー: ツールを使って、以下のwebページから内容を取得して、それを要約して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Claude:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Status: 200&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Body: &amp;lt;!doctype html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;html lang=&quot;ja&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ウェブページの内容を取得して要約するタスクです。ウェブページの内容は既に取得できており、&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;これは「今年食ったサバ缶のまとめ（2024年版）」というブログ記事です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;この記事は、著者が2024年に食べたサバ缶、イワシ缶、サンマ缶などの缶詰を紹介しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;記事の構造を分析すると：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以前に当ブログで書いた、サバ缶に関する記事を要約してもらいます。以下が実行時のスクショです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;サバ缶に関する記事の要約のスクショ&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;557&quot; src=&quot;/_astro/16.DLVvL7Fm_1WhDif.webp&quot; srcset=&quot;/_astro/16.DLVvL7Fm_1WhDif.webp 362w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;サバ缶に関する記事の要約のスクショその2&quot; loading=&quot;lazy&quot; width=&quot;344&quot; height=&quot;431&quot; src=&quot;/_astro/17.EeeDXNCN_ZzMpIv.webp&quot; srcset=&quot;/_astro/17.EeeDXNCN_ZzMpIv.webp 344w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;記事の内容を取得できたので、要約の作業が始まりました。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;サバ缶に関する記事の要約内容のスクショ&quot; loading=&quot;lazy&quot; width=&quot;357&quot; height=&quot;573&quot; src=&quot;/_astro/18.CY6G5kix_ZF4GOv.webp&quot; srcset=&quot;/_astro/18.CY6G5kix_ZF4GOv.webp 357w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;すげえじゃん、まとまってんじゃん・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;サバ缶に関する記事の要約内容のスクショその2&quot; loading=&quot;lazy&quot; width=&quot;380&quot; height=&quot;543&quot; src=&quot;/_astro/19.CWUjMT5V_Z2tir1f.webp&quot; srcset=&quot;/_astro/19.CWUjMT5V_Z2tir1f.webp 380w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Web検索の例&lt;a href=&quot;#web検索の例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ざっくりと、以下のようなやり取りになりました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ユーザー: Web検索しておすすめのMCP Serverを探して、リスト化して書き出して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Claude: Brave検索MCPサーバを使用して検索します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;brave_web_searchツールを使用して、「recommended MCP servers for Claude」や&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;「popular MCP servers for AI assistants」などのキーワードで検索してみましょう。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;現在の設定を確認しました。次に、Web検索を使用して推奨されるMCP Serverを探します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...（検索結果に基づく情報）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;素晴らしい！Awesome Claude MCP ServersのREADMEの内容を取得できました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;これは非常に包括的なMCP Serverのリストで、カテゴリ別に整理されています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;次に、もう一つの「awesome-mcp-servers」リポジトリの内容も...（検索結果に基づく情報）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この機能はヤバいですね。Web検索出来るってことは、それってDeep Researchではないですか。以下がスクショです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Web検索ツール実行時のスクショ&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;411&quot; src=&quot;/_astro/20.BjC-8Z4f_ZuLLvy.webp&quot; srcset=&quot;/_astro/20.BjC-8Z4f_ZuLLvy.webp 364w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Web検索ツール実行時のスクショその2&quot; loading=&quot;lazy&quot; width=&quot;365&quot; height=&quot;503&quot; src=&quot;/_astro/21.En9umoTv_Z1biGA1.webp&quot; srcset=&quot;/_astro/21.En9umoTv_Z1biGA1.webp 365w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;検索結果を引っ張ってこれています。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Web検索結果取得時のスクショ&quot; loading=&quot;lazy&quot; width=&quot;349&quot; height=&quot;570&quot; src=&quot;/_astro/22.CCwuPmdk_2lNr0I.webp&quot; srcset=&quot;/_astro/22.CCwuPmdk_2lNr0I.webp 349w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Web検索結果取得時のスクショその2&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;560&quot; src=&quot;/_astro/23.UoQkkrG0_ZVc9DJ.webp&quot; srcset=&quot;/_astro/23.UoQkkrG0_ZVc9DJ.webp 337w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;なんかまだ、Cline君は調べ足りないようです。好奇心旺盛だなあ。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;好奇心旺盛なClineのスクショ&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;519&quot; src=&quot;/_astro/24.DZHh97Zc_Z19SGzV.webp&quot; srcset=&quot;/_astro/24.DZHh97Zc_Z19SGzV.webp 355w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;好奇心旺盛なClineのスクショその2&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;543&quot; src=&quot;/_astro/25.BEEaxAWD_SfPVg.webp&quot; srcset=&quot;/_astro/25.BEEaxAWD_SfPVg.webp 340w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;先ほど実装したHTTPリクエストのMCPツールまで使って調べてくれました。好奇心旺盛だなあ。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;さらに好奇心旺盛なClineのスクショ&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;511&quot; src=&quot;/_astro/26.BTF-zvgB_Zq7a4y.webp&quot; srcset=&quot;/_astro/26.BTF-zvgB_Zq7a4y.webp 355w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;さらに好奇心旺盛なClineのスクショその2&quot; loading=&quot;lazy&quot; width=&quot;363&quot; height=&quot;611&quot; src=&quot;/_astro/27.D8nZqMH2_Z2tTlqR.webp&quot; srcset=&quot;/_astro/27.D8nZqMH2_Z2tTlqR.webp 363w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;どうやら調べ終わって、まとめ作業が始まりました・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Web検索作業終了時のスクショ&quot; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;764&quot; src=&quot;/_astro/28.CyVgw0Y__2s9Vp4.webp&quot; srcset=&quot;/_astro/28.CyVgw0Y__2s9Vp4.webp 493w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発時のまとめ&lt;a href=&quot;#開発時のまとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;MCPサーバを開発していた時の出来事などに関するまとめです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;AIが渡しやすいパラメータを設定する。&lt;a href=&quot;#aiが渡しやすいパラメータを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「datetime-calculate」の部分の機能って、当初はパラメータの数が3つぐらいしか設定していなかったんですよね。しかし、そのパラメータ数だとどうにもAI君がMCPサーバに適切な数値を渡してくれなかった・・・。&lt;/p&gt;&lt;p&gt;そこで、パラメータ数を基準となる年月日時分秒の6個に増やして、そこから計算するためにさらに年月日時分秒の6個の引数を追加して、総計12個のパラメータを実装しました。こうすると、ガッチリMCPサーバに適切な値を渡せるようになりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;AddTool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CallToolRequest&lt;/span&gt;&lt;span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CallToolResult&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;operation&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;year_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;year_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;month_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;month_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;day_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;day_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;hour_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;hour_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;minute_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;minute_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;second_1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;second_1&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_year&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_year&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_month&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_month&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_day&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_day&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_hour&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_hour&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_minute&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_minute&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duration_of_second&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Arguments&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;duration_of_second&quot;&lt;/span&gt;&lt;span&gt;].(&lt;/span&gt;&lt;span&gt;float64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DatetimeCalculator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;add&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;AddDatetimeFloat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;month_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;day_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;hour_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;minute_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;second_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_year&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_month&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_day&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_hour&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_minute&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_second&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;subtract&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SubtractDatetimeFloat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;month_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;day_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;hour_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;minute_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;second_1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_year&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_month&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_day&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_hour&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_minute&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;duration_of_second&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// case &quot;diff&quot;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//   result = c.DiffTime(x, y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewToolResultText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;こういう時に、AIにコーディングしてもらうととても快適ですね。本当に今日のレベルのAIが登場してくれて有り難い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;MCPサーバはキャッシュされる。&lt;a href=&quot;#mcpサーバはキャッシュされる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Clineに限った現象なのか分かりませんが、今回、MCPサーバをビルドする時はGoの標準機能でバイナリファイルにデプロイするわけでしたが、そのバイナリファイルを修正した際に、Clineが参照しているバイナリが以前の状態のバイナリを見ている時がありました。（Clineが提示したパラメータが修正前のものだった時に気付きました。）&lt;/p&gt;&lt;p&gt;原因として、AIエージェントの中で少なくともClineには、「メモリバンク機能」というものが備わっているらしく、その機能はまだ消されていないClineとのチャット履歴を参照して、Clineが長期記憶として情報を維持しているらしいです。つまり、そのメモリバンク機能で修正前のバイナリファイルの内容をキャッシュしているのかもしれない・・・。&lt;/p&gt;&lt;p&gt;そして、チャット履歴を全て消して、再びClineにMCPツールを使うようにプロンプトを送ると、今度はちゃんと修正後のバイナリが受け取れるパラメータでMCPツールを使ってくれました。メモリバンク機能は便利ではありますが、開発中には時々チャット履歴を消す必要があります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;数値は基本的にはfloat64で受け取る。&lt;a href=&quot;#数値は基本的にはfloat64で受け取る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;mcp.CallToolRequest.Params.Arguments[&quot;operation&quot;].()&lt;/code&gt;で受け取る引数の型は&lt;code&gt;float64&lt;/code&gt;でなければならないみたいですね。例えばintで渡すとエラーになります。ここは静的に型拘束がされない部分なので少しハマりました。ClineのMCPサーバを設定する画面で、「interface conversion: interface {} is float64, not int」というエラーが表示されて気付きました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AIでかなり書けてしまった・・・。&lt;a href=&quot;#aiでかなり書けてしまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「brave-web-search」の部分の機能って、Model Context Protocol公式からのTypeScriptのサンプルはあったんですけど、Goのコードは皆無だったんですよね。なので、この機能を作るのは結構時間が掛かるのかなと思ってたんですけど・・・。&lt;/p&gt;&lt;p&gt;蓋を開けてみると、自分が書いたGoのMCPサーバのソース（確か日時計算のソースを見せたような。）と、MCP公式のBrave Search APIを叩くTypeScriptソースをClaude 3.7 sonnetに食わせたら、なんと2往復で実装することが出来てしまいました・・・。要は、使い方なんだなって思います。（1往復目で引っ掛かってたのは、JSONのパースエラーだけだった。）&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おすすめMCP Serverリスト&lt;a href=&quot;#おすすめmcp-serverリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先ほど、「brave_web_search」機能でまとめ上げ（てもらっ）たMCPサーバのまとめです。（2025-03-30時点）&lt;/p&gt;&lt;p&gt;一番驚いたのは、Web検索とこの要約作業に35円ぐらいしか掛からなかったことです！Σ(・ω・ノ)ノ！&lt;/p&gt;&lt;section&gt;&lt;h3&gt;現在設定済みのMCP Server&lt;a href=&quot;#現在設定済みのmcp-server&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;arithmetic_calculator&lt;/strong&gt;: 基本的な算術計算機能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;datetime_calculator&lt;/strong&gt;: 日時計算機能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;http_request&lt;/strong&gt;: 外部APIへのHTTPリクエスト機能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;brave_web_search&lt;/strong&gt;: Brave検索エンジンを使用したWeb検索機能&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ファイルシステム関連 📂&lt;a href=&quot;#ファイルシステム関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-filesystem&lt;/strong&gt;&lt;/a&gt; - ローカルファイルシステムへの直接アクセス&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/gdrive&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-google-drive&lt;/strong&gt;&lt;/a&gt; - Google Driveとの統合（ファイル管理）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;検索エンジン関連 🔍&lt;a href=&quot;#検索エンジン関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/exa-labs/exa-mcp-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;exa-labs/exa-mcp-server&lt;/strong&gt;&lt;/a&gt; - Exa AI Search APIを使用したリアルタイムWeb検索&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ac3xx/mcp-servers-kagi&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ac3xx/mcp-servers-kagi&lt;/strong&gt;&lt;/a&gt; - Kagi検索エンジンとの統合&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/blazickjp/arxiv-mcp-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;blazickjp/arxiv-mcp-server&lt;/strong&gt;&lt;/a&gt; - ArXivを通じた研究論文検索&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;データベース関連 🗄️&lt;a href=&quot;#データベース関連-️&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/postgres&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-postgres&lt;/strong&gt;&lt;/a&gt; - PostgreSQLとの統合（スキーマ検査機能付き）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/sqlite&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-sqlite&lt;/strong&gt;&lt;/a&gt; - SQLite操作（分析機能付き）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/domdomegg/airtable-mcp-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;domdomegg/airtable-mcp-server&lt;/strong&gt;&lt;/a&gt; - Airtableデータベース統合&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ClickHouse/mcp-clickhouse&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ClickHouse/mcp-clickhouse&lt;/strong&gt;&lt;/a&gt; - ClickHouseデータベース統合&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;知識・メモリ関連 🧠&lt;a href=&quot;#知識メモリ関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/memory&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-memory&lt;/strong&gt;&lt;/a&gt; - ナレッジグラフベースの永続的メモリシステム&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hannesrudolph/mcp-ragdocs&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@hannesrudolph/mcp-ragdocs&lt;/strong&gt;&lt;/a&gt; - ベクトル検索によるドキュメント検索・処理ツール&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kaliaboi/mcp-zotero&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@kaliaboi/mcp-zotero&lt;/strong&gt;&lt;/a&gt; - Zotero Cloudのコレクションとソースへの接続&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バージョン管理関連 📊&lt;a href=&quot;#バージョン管理関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/github&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-github&lt;/strong&gt;&lt;/a&gt; - GitHub APIとの統合（リポジトリ管理、Issue管理など）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/gitlab&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-gitlab&lt;/strong&gt;&lt;/a&gt; - GitLabプラットフォーム管理&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/git&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-git&lt;/strong&gt;&lt;/a&gt; - Gitリポジトリの直接操作&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クラウド統合関連 ☁️&lt;a href=&quot;#クラウド統合関連-️&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/mcp-server-cloudflare&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Cloudflare MCP Server&lt;/strong&gt;&lt;/a&gt; - CloudflareサービスへのアクセスとWorkersやKVの利用&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alexei-led/aws-mcp-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;alexei-led/aws-mcp-server&lt;/strong&gt;&lt;/a&gt; - AWS CLIコマンドの実行と一般的なAWSタスクのテンプレート&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コミュニケーション関連 💬&lt;a href=&quot;#コミュニケーション関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/slack&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-slack&lt;/strong&gt;&lt;/a&gt; - Slackワークスペースとチャンネル管理&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zcaceres/gtasks-mcp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;zcaceres/gtasks-mcp&lt;/strong&gt;&lt;/a&gt; - Google Tasksの管理&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/elie222/inbox-zero/tree/main/apps/mcp-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;elie222/inbox-zero&lt;/strong&gt;&lt;/a&gt; - Gmailの機能拡張（返信が必要なメールの特定など）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ブラウザ自動化関連 🌐&lt;a href=&quot;#ブラウザ自動化関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/puppeteer&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-puppeteer&lt;/strong&gt;&lt;/a&gt; - Webの自動化とスクレイピング&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kimtaeyoon83/mcp-server-youtube-transcript&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@kimtaeyoon83/mcp-server-youtube-transcript&lt;/strong&gt;&lt;/a&gt; - YouTube字幕の抽出&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;位置情報サービス関連 🗺️&lt;a href=&quot;#位置情報サービス関連-️&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/google-maps&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-google-maps&lt;/strong&gt;&lt;/a&gt; - Google Mapsとの統合（位置情報、ルート検索など）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SecretiveShell/MCP-timeserver&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;SecretiveShell/MCP-timeserver&lt;/strong&gt;&lt;/a&gt; - 任意のタイムゾーンの時間アクセス&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;モニタリング関連 📈&lt;a href=&quot;#モニタリング関連-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol/servers/tree/main/src/sentry&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-sentry&lt;/strong&gt;&lt;/a&gt; - Sentry.ioを通じたエラー追跡&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MindscapeHQ/mcp-server-raygun&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@modelcontextprotocol/server-raygun&lt;/strong&gt;&lt;/a&gt; - Raygunを通じたクラッシュレポート&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/grafana/mcp-grafana&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;grafana/mcp-grafana&lt;/strong&gt;&lt;/a&gt; - Grafanaインスタンスのダッシュボード検索とインシデント調査&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その他の有用なMCP Server&lt;a href=&quot;#その他の有用なmcp-server&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mzxrai/mcp-openai&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;mzxrai/mcp-openai&lt;/strong&gt;&lt;/a&gt; - OpenAIの最新モデルとのチャット&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pierrebrunelle/mcp-server-openai&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;pierrebrunelle/mcp-server-openai&lt;/strong&gt;&lt;/a&gt; - MCPプロトコルを通じてOpenAIモデルに直接クエリ&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/calclavia/mcp-obsidian&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;calclavia/mcp-obsidian&lt;/strong&gt;&lt;/a&gt; - Obsidianノートの読み取りと検索&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/isaacwasserman/mcp-vegalite-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;isaacwasserman/mcp-vegalite-server&lt;/strong&gt;&lt;/a&gt; - VegaLiteフォーマットを使用したデータの可視化&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tevonsb/homeassistant-mcp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;tevonsb/homeassistant-mcp&lt;/strong&gt;&lt;/a&gt; - Home Assistantデータへのアクセスとデバイス制御&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらのMCP Serverは、AIアシスタントの機能を大幅に拡張し、様々なタスクを自動化するのに役立ちます。特に、データベース操作、ファイル管理、Web検索、APIとの統合などの機能は、日常的なタスクを効率化するのに非常に有用です。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Model Context Protocol（MCP）を使用することで、AIアシスタントの能力を大幅に拡張できます。今回紹介したmcps-goは、Goで実装された使いやすいMCPサーバで、算術計算、日時計算、HTTPリクエスト、Web検索などの機能を提供します。&lt;/p&gt;&lt;p&gt;これらの機能を活用することで、AIアシスタントはより実用的なタスクをこなせるようになり、ユーザーの生産性向上に貢献します。また、Goで実装されているため、高速で安定した動作が期待できます。&lt;/p&gt;&lt;p&gt;MCPの世界はまだ発展途上ですが、今後さらに多くの機能が追加され、AIアシスタントの可能性がさらに広がることでしょう。ぜひ、mcps-goを試してみて、AIアシスタントの新しい可能性を探ってみてください！&lt;/p&gt;&lt;p&gt;この青臭いまとめを書かないように直さなければならんな。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ここまで出来るようになるんだなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他にも作りたいですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Cline（Claude 3.7 Sonnet）にgcloudコマンドを網羅してもらった</title><link>https://endorphinbath.com/posts/cline-for-gcloud-commands-with-claude/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cline-for-gcloud-commands-with-claude/</guid><description>Google Cloud内のリソースをCLI上で操作するためのツールであるgcloud CLIのコマンドをClineでどれぐらい網羅出来るかどうかを試した記事です。</description><pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_009.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;最近Google Cloudを使い始めたんだけど、コマンドラインからいろんな操作ができるって聞いたよ。gcloud CLIっていうやつかな？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうですよ！　gcloud CLIはGoogle Cloudのリソースを管理するための強力なコマンドラインツールです。今日はそれで何ができるのか、詳しく見ていきましょうか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;オオッ、それは助かる！どんなサービスが使えるのか全部知りたいな！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;了解です！　それでは、gcloud CLIで利用できるサービスを全て解説していきますね！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;gcloud CLIとは？&lt;a href=&quot;#gcloud-cliとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事で Gemini に&lt;code&gt;gcloud&lt;/code&gt;についてまとめてもらった時に、 Cline ならどうなるのか気になりました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gemini-deepresearch-gcloud-commands/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GeminiのDeep Researchでgcloudコマンドを網羅出来るかどうかを試す&lt;/div&gt;&lt;div&gt;Google Cloud内のリソースをCLI上で操作するためのツールであるgcloud CLIのコマンドをGeminiのDeep Researchでどれぐらい網羅出来るかどうかを試した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/03/20250302_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;gcloud CLI は、 Google Cloud Platform （GCP）のリソースを管理するためのコマンドラインインターフェースです。ブラウザのコンソールを開かなくても、ターミナルから直接 GCP のさまざまなサービスを操作できる便利なツールなんですよ。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud CLI の概要 | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;インストールは簡単で、 Google Cloud SDK の一部として提供されています。 macOS、Windows、Linux など、主要な OS に対応しているので、どの環境でも使えるのが嬉しいポイントです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;gcloud CLIの基本構造&lt;a href=&quot;#gcloud-cliの基本構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;gcloud CLI のコマンド構造は基本的に以下のようになっています：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; [グループ] [サブグループ] [コマンド] [フラグ] [引数]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、Compute Engineのインスタンスを一覧表示するコマンドは：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここで、&lt;code&gt;compute&lt;/code&gt;がグループ、&lt;code&gt;instances&lt;/code&gt;がサブグループ、&lt;code&gt;list&lt;/code&gt;がコマンド、&lt;code&gt;--project=my-project&lt;/code&gt;がフラグとなります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;gcloud CLIで利用できるサービス一覧&lt;a href=&quot;#gcloud-cliで利用できるサービス一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、 gcloud CLI で利用できる主要なサービスを見ていきましょう！&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. Compute Engine (compute)&lt;a href=&quot;#1-compute-engine-compute&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Compute Engine は、 GCP の仮想マシンサービスです。 gcloud CLI を使えば、インスタンスの作成、起動、停止、削除などの操作が簡単にできます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--machine-type=e2-medium&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの起動&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの停止&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、ディスク、ファイアウォールルール、ロードバランサーなどの管理も可能です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ディスクの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-disk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--size=100GB&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ファイアウォールルールの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;firewall-rules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;allow-http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--allow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tcp:80&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ロードバランサーの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;forwarding-rules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-lb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--load-balancing-scheme=EXTERNAL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. App Engine (app)&lt;a href=&quot;#2-app-engine-app&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;App Engineは、フルマネージドのアプリケーションプラットフォームです。gcloud CLIを使って、アプリケーションのデプロイや管理が行えます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アプリケーションの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アプリケーションのデプロイ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アプリケーションの表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browse&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アプリケーションのログ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Kubernetes Engine (container)&lt;a href=&quot;#3-kubernetes-engine-container&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Kubernetes Engine（GKE）は、Kubernetesのマネージドサービスです。gcloud CLIを使って、クラスタの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--num-nodes=3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの認証情報の取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get-credentials&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. Cloud Storage (storage)&lt;a href=&quot;#4-cloud-storage-storage&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Storageは、オブジェクトストレージサービスです。gcloud CLIを使って、バケットやオブジェクトの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# バケットの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;buckets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gs://my-bucket&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# バケットの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;buckets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ファイルのアップロード&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;local-file.txt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gs://my-bucket/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ファイルのダウンロード&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gs://my-bucket/file.txt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# バケットの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;buckets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gs://my-bucket&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. Cloud SQL (sql)&lt;a href=&quot;#5-cloud-sql-sql&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud SQLは、マネージドのリレーショナルデータベースサービスです。gcloud CLIを使って、インスタンスの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--database-version=MYSQL_8_0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tier=db-n1-standard-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データベースの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databases&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-database&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--instance=my-instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ユーザーの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--instance=my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--password=my-password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. Cloud Functions (functions)&lt;a href=&quot;#6-cloud-functions-functions&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Functionsは、サーバーレスの関数実行環境です。gcloud CLIを使って、関数のデプロイや管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数のデプロイ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--runtime=nodejs14&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--trigger-http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--entry-point=helloWorld&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数の一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数の詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数の呼び出し&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--data=&lt;/span&gt;&lt;span&gt;&apos;{&quot;name&quot;:&quot;World&quot;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 関数の削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. Cloud Run (run)&lt;a href=&quot;#7-cloud-run-run&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Runは、コンテナをサーバーレスで実行するサービスです。gcloud CLIを使って、サービスのデプロイや管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスのデプロイ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--image=gcr.io/my-project/my-image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--platform=managed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. BigQuery (bq)&lt;a href=&quot;#8-bigquery-bq&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;BigQueryは、大規模データ分析サービスです。gcloud CLIを使って、データセットやテーブルの管理、クエリの実行ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データセットの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dataset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project:my-dataset&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テーブルの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project:my-dataset.my-table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name:STRING,age:INTEGER&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クエリの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--use_legacy_sql=false&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;SELECT * FROM `my-project.my-dataset.my-table` LIMIT 10&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データセットの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dataset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--force&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project:my-dataset&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. Pub/Sub (pubsub)&lt;a href=&quot;#9-pubsub-pubsub&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pub/Subは、メッセージングサービスです。gcloud CLIを使って、トピックやサブスクリプションの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# トピックの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;topics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-topic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# トピックの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;topics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サブスクリプションの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscriptions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-sub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--topic=my-topic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# メッセージの発行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;topics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;publish&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-topic&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--message=&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# メッセージの受信&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscriptions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pull&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-sub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--auto-ack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. IAM &amp;amp; Admin (iam)&lt;a href=&quot;#10-iam--admin-iam&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;IAM（Identity and Access Management）は、アクセス制御サービスです。gcloud CLIを使って、ロールやポリシーの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスアカウントの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-sa&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--display-name=&lt;/span&gt;&lt;span&gt;&quot;My Service Account&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ロールの付与&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-iam-policy-binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--member=serviceAccount:my-sa@my-project.iam.gserviceaccount.com&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--role=roles/editor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ポリシーの表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get-iam-policy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# サービスアカウントキーの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key.json&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--iam-account=my-sa@my-project.iam.gserviceaccount.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. Cloud Build (builds)&lt;a href=&quot;#11-cloud-build-builds&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Buildは、CIサービスです。gcloud CLIを使って、ビルドの実行や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ビルドの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;submit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config=cloudbuild.yaml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ビルドの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ビルドの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BUILD_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ビルドのログ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;builds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BUILD_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. Cloud Monitoring (monitoring)&lt;a href=&quot;#12-cloud-monitoring-monitoring&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Monitoringは、モニタリングサービスです。gcloud CLIを使って、スヌーズやダッシュボードの管理ができます。アラートポリシーを管理するために、&lt;code&gt;gcloud alpha monitoring policies&lt;/code&gt;というコマンドがアルファ版では使えましたが、現行版では存在しません。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# スヌーズの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monitoring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;snoozes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# スヌーズの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monitoring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;snoozes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SNOOZE_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ダッシュボードの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monitoring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dashboards&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ダッシュボードの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monitoring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dashboards&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DASHBOARD_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. Cloud Logging (logging)&lt;a href=&quot;#13-cloud-logging-logging&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Loggingは、ログ管理サービスです。gcloud CLIを使って、ログの表示やフィルタリングができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ログの表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logging&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;resource.type=gce_instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ログのエクスポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logging&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-sink&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;storage.googleapis.com/my-bucket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--log-filter=&lt;/span&gt;&lt;span&gt;&quot;resource.type=gce_instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ログのフィルタリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logging&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;severity&amp;gt;=ERROR&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--limit=10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ログのメトリクスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logging&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metrics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-metric&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;My log metric&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--filter=&lt;/span&gt;&lt;span&gt;&quot;resource.type=gce_instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14. Cloud DNS (dns)&lt;a href=&quot;#14-cloud-dns-dns&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud DNSは、DNSサービスです。gcloud CLIを使って、ゾーンやレコードの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ゾーンの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;managed-zones&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-zone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dns-name=example.com.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;My DNS zone&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ゾーンの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;managed-zones&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# レコードの追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record-sets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transaction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=my-zone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record-sets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transaction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=my-zone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name=www.example.com.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--type=A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ttl=300&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;203.0.113.1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record-sets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transaction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=my-zone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# レコードの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record-sets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=my-zone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;15. Cloud KMS (kms)&lt;a href=&quot;#15-cloud-kms-kms&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud KMSは、鍵管理サービスです。gcloud CLIを使って、キーリングや鍵の管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# キーリングの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyrings&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-keyring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=global&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 鍵の作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--keyring=my-keyring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--purpose=encryption&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 鍵の一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--keyring=my-keyring&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データの暗号化&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encrypt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--keyring=my-keyring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--key=my-key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--plaintext-file=-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ciphertext-file=encrypted.bin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データの復号&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decrypt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=global&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--keyring=my-keyring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--key=my-key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ciphertext-file=encrypted.bin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--plaintext-file=decrypted.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;16. Cloud Spanner (spanner)&lt;a href=&quot;#16-cloud-spanner-spanner&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Spannerは、グローバルに分散したリレーショナルデータベースサービスです。gcloud CLIを使って、インスタンスやデータベースの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spanner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config=regional-us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;My Spanner instance&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--nodes=1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spanner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データベースの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spanner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databases&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-database&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--instance=my-instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データベースの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spanner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databases&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--instance=my-instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# スキーマの更新&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spanner&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databases&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ddl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-database&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--instance=my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ddl=&lt;/span&gt;&lt;span&gt;&quot;CREATE TABLE Users (UserId INT64 NOT NULL, Name STRING(1024)) PRIMARY KEY (UserId)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;17. Cloud Dataflow (dataflow)&lt;a href=&quot;#17-cloud-dataflow-dataflow&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Dataflowは、ストリーム処理および一括処理のサービスです。gcloud CLIを使って、ジョブの実行や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--gcs-location=gs://my-bucket/templates/my-template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOB_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの停止&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cancel&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JOB_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;18. Cloud Dataproc (dataproc)&lt;a href=&quot;#18-cloud-dataproc-dataproc&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Dataprocは、マネージドのHadoopおよびSparkサービスです。gcloud CLIを使って、クラスタの作成や管理、ジョブの実行ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataproc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--num-workers=2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataproc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataproc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;submit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spark&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cluster=my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--jar=gs://my-bucket/my-jar.jar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arg2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# クラスタの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dataproc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clusters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;19. Cloud Bigtable (bigtable)&lt;a href=&quot;#19-cloud-bigtable-bigtable&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Bigtableは、NoSQLデータベースサービスです。gcloud CLIを使って、インスタンスやテーブルの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bigtable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cluster=my-cluster&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cluster-zone=us-central1-a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--display-name=&lt;/span&gt;&lt;span&gt;&quot;My Bigtable instance&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bigtable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テーブルの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cbt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-instance=my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createtable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-table&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テーブルの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cbt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-instance=my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;20. Cloud Memorystore (redis)&lt;a href=&quot;#20-cloud-memorystore-redis&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Memorystoreは、マネージドのRedisサービスです。gcloud CLIを使って、インスタンスの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;redis&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--size=1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--redis-version=redis_6_x&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;redis&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;redis&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;redis&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;21. Cloud Filestore (filestore)&lt;a href=&quot;#21-cloud-filestore-filestore&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Filestoreは、マネージドのファイルストレージサービスです。gcloud CLIを使って、インスタンスの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filestore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tier=BASIC_HDD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--file-share=name=my-share,capacity=1TB&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--network=name=default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filestore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filestore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# インスタンスの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filestore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--zone=us-central1-a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;22. Cloud Composer (composer)&lt;a href=&quot;#22-cloud-composer-composer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Composerは、マネージドのAirflowサービスです。gcloud CLIを使って、環境の作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 環境の作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;composer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 環境の一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;composer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--locations=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 環境の詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;composer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 環境の削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;composer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;23. Cloud Scheduler (scheduler)&lt;a href=&quot;#23-cloud-scheduler-scheduler&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Schedulerは、ジョブスケジューリングサービスです。gcloud CLIを使って、ジョブの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-job&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--schedule=&lt;/span&gt;&lt;span&gt;&quot;0 * * * *&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--uri=https://example.com/path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--http-method=GET&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-job&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジョブの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-job&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;24. Cloud Tasks (tasks)&lt;a href=&quot;#24-cloud-tasks-tasks&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Tasksは、非同期タスク実行サービスです。gcloud CLIを使って、キューやタスクの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# キューの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# キューの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# キューの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# タスクの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create-http-task&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--queue=my-queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--url=https://example.com/path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--method=GET&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;25. Cloud Endpoints (endpoints)&lt;a href=&quot;#25-cloud-endpoints-endpoints&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Endpointsは、APIマネジメントサービスです。gcloud CLIを使って、APIの管理やデプロイができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# APIの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoints&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;openapi.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# APIの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoints&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# APIの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoints&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-service.endpoints.my-project.cloud.goog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# APIの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoints&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-service.endpoints.my-project.cloud.goog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;26. Cloud Healthcare (healthcare)&lt;a href=&quot;#26-cloud-healthcare-healthcare&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Healthcareは、ヘルスケアデータ管理サービスです。gcloud CLIを使って、データセットやストアの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データセットの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;healthcare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;datasets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-dataset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データセットの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;healthcare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;datasets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# FHIRストアの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;healthcare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fhir-stores&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-fhir-store&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dataset=my-dataset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# HL7v2ストアの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;healthcare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hl7v2-stores&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-hl7v2-store&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dataset=my-dataset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;27. Cloud IoT Core (iot)&lt;a href=&quot;#27-cloud-iot-core-iot&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud IoT Coreは、IoTデバイス管理サービスです。gcloud CLIを使って、レジストリやデバイスの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# レジストリの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;registries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-registry&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--event-notification-config=topic=projects/my-project/topics/my-topic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# レジストリの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;registries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デバイスの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-device&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--registry=my-registry&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--public-key=path=rsa_cert.pem,type=rs256&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デバイスの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;devices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--region=us-central1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--registry=my-registry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;28. Cloud Asset (asset)&lt;a href=&quot;#28-cloud-asset-asset&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Assetは、資産インベントリサービスです。gcloud CLIを使って、資産の一覧表示やエクスポートができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 資産の一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;asset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=my-project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--content-type=resource&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 資産のエクスポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;asset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=my-project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--content-type=resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--output-path=gs://my-bucket/assets.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 資産の履歴の表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;asset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;history&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=my-project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--asset-names=//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--content-type=resource&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;29. Cloud Deployment Manager (deployment-manager)&lt;a href=&quot;#29-cloud-deployment-manager-deployment-manager&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Deployment Managerは、インフラストラクチャ管理サービスです。gcloud CLIを使って、デプロイメントの作成や管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デプロイメントの作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployment-manager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-deployment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config=config.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デプロイメントの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployment-manager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デプロイメントの詳細表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployment-manager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-deployment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# デプロイメントの削除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployment-manager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployments&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-deployment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;30. Cloud Security Command Center (scc)&lt;a href=&quot;#30-cloud-security-command-center-scc&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Security Command Centerは、セキュリティ管理サービスです。gcloud CLIを使って、ファインディングやアセットの管理ができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ファインディングの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;findings&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--organization=ORGANIZATION_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--source=SOURCE_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アセットの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;assets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--organization=ORGANIZATION_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--source=SOURCE_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ソースの一覧表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sources&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--organization=ORGANIZATION_ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 gcloud CLI で利用できる主要なサービスを30個紹介しました。これらのサービスを使いこなせば、 Google Cloud のリソースをコマンドラインから効率的に管理できるようになります。&lt;/p&gt;&lt;p&gt;gcloud CLI の魅力は、 GUI での操作をスクリプト化できることです。複雑な操作も自動化できるので、 DevOps の実践には欠かせないツールと言えるでしょう。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;gcloud help&lt;/code&gt;コマンドを使えば、各コマンドの詳細なヘルプを表示できます。わからないことがあれば、このコマンドを活用してみてください。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 基本的なヘルプ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 特定のコマンドのヘルプ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compute&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、今回&lt;code&gt;gcloud help&lt;/code&gt;コマンドの出力を眺めていたら、公式チートシート的な情報も転がっていました。用途によって有用な&lt;code&gt;gcloud&lt;/code&gt;コマンドを調べることが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cheat-sheet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;gcloud CLI は非常に多機能なので、今回紹介したサービス以外にも多くの機能があります。ぜひ公式ドキュメントも参照しながら、自分のニーズに合った使い方を見つけてみてください。&lt;/p&gt;&lt;p&gt;・・・という感じに Cline はまとめてくれました。&lt;/p&gt;&lt;p&gt;これで Brave とかの MCP サーバ建てたらどうなっちゃうんでしょうか。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;すごい！こんなにたくさんのサービスがgcloud CLIから使えるんだね！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうなんですよ、Google Cloudのほぼすべてのサービスがコマンドラインから操作できるんです。特に自動化やCI/CDパイプラインを構築する際には、とても便利ですよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは勉強になったよ！早速使ってみるね。ありがとう、135ml！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どういたしまして！何か困ったことがあったらいつでも聞いてくださいね！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・この会話は流石にキモいなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そんなこと言われたって・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>GeminiのDeep Researchでgcloudコマンドを網羅出来るかどうかを試す</title><link>https://endorphinbath.com/posts/gemini-deepresearch-gcloud-commands/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gemini-deepresearch-gcloud-commands/</guid><description>Google Cloud内のリソースをCLI上で操作するためのツールであるgcloud CLIのコマンドをGeminiのDeep Researchでどれぐらい網羅出来るかどうかを試した記事です。</description><pubDate>Sun, 02 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どれほどなんだろうか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お手並み拝見させていただきます。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GeminiのDeep Researchを試す。&lt;a href=&quot;#geminiのdeep-researchを試す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Gemini の Deep Research やら、 ChatGPT の Deep Research やら、 Perplexity の Deep Research やら、色々な Deep Research に関する記事をたまに見かけますよね。（Deep Research なのか DeepResearch なのかもう見分けが付きません・・・。）&lt;/p&gt;&lt;p&gt;そこで今回は、 Gemini の Deep Research を使って、実際に調べてもらいたかったことを調べてみた結果を確認していこうと思います。ついこの間、 Google Gemini 上で Deep Research を機能制限付きで無料で利用出来るようになったのでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Deep Researchの出力結果&lt;a href=&quot;#deep-researchの出力結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;早速調査結果を見てみます。「gcloud CLIで利用出来るサービスを全て列挙して解説して。」という内容で調査してもらいました。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud CLI の概要 | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;それでは出力結果をどうぞ・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. はじめに&lt;a href=&quot;#1-はじめに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloud CLI（&lt;code&gt;gcloud&lt;/code&gt; CLI）は、コマンドラインインターフェースを通じてGoogle Cloudリソースを作成および管理するための一連のツールです 。このツール群を利用することで、Google Cloudプラットフォーム上の多くの一般的なタスクを、コマンドラインやスクリプト、その他の自動化を通じて実行できます 。例えば、Compute Engineの仮想マシンインスタンスやその他のリソース、Cloud SQLインスタンス、Google Kubernetes Engine（GKE）クラスタ、Dataprocクラスタとジョブ、Cloud DNSの管理対象ゾーンとレコードセット、Cloud Deployment Managerのデプロイメントなどの作成と管理が可能です。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; CLIは、広範なGoogle Cloudサービスをコマンドラインインターフェースを通じて操作できる柔軟性を提供し、仮想マシンの管理からアプリケーションのデプロイ、ネットワーク構成まで、多岐にわたるタスクを効率的に実行できます 。さらに、&lt;code&gt;gcloud&lt;/code&gt; CLIはCloud Shellと統合されており、ローカル環境にインストールすることなく、ウェブブラウザを通じてGoogle Cloudリソースを管理できる利便性も備えています 。Cloud Shellは、&lt;code&gt;gcloud&lt;/code&gt; CLIを含む様々なツールがプリインストールされたインタラクティブなシェル環境であり、Google Cloudのリソースをすぐに試したり、管理したりすることができます。&lt;/p&gt;&lt;p&gt;本レポートでは、&lt;code&gt;gcloud&lt;/code&gt; CLIで利用可能な主要なGoogle Cloudサービスを網羅的に解説します。各サービスが提供する機能の概要と、&lt;code&gt;gcloud&lt;/code&gt; CLIを通じてどのように管理できるかについて詳しく説明します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. gcloud CLIの構造&lt;a href=&quot;#2-gcloud-cliの構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; CLIのコマンドは、機能やサービスごとに階層的なグループに整理されています 。この構造により、ユーザーは目的の操作に対応するコマンドを見つけやすくなっています。例えば、&lt;code&gt;gcloud compute&lt;/code&gt;コマンドグループはCompute Engineに関連する操作を、&lt;code&gt;gcloud storage&lt;/code&gt;コマンドグループはCloud Storageに関連する操作を、そして&lt;code&gt;gcloud container&lt;/code&gt;コマンドグループはGoogle Kubernetes Engineに関連する操作をそれぞれまとめたものです 。これらのコマンドグループは、特定のGoogle Cloudプロダクトや機能の操作を論理的にグループ化し、ユーザーがCLIをより直感的に利用できるように設計されています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; CLIの基本的なコマンド構文は、&lt;code&gt;gcloud &amp;lt;command_group&amp;gt; &amp;lt;sub_group&amp;gt; &amp;lt;action&amp;gt; [flags] [arguments]&lt;/code&gt; の形式をとります 。&lt;code&gt;&amp;lt;command_group&amp;gt;&lt;/code&gt; は操作対象のGoogle Cloudサービス（例：compute, storage, container）、&lt;code&gt;&amp;lt;sub_group&amp;gt;&lt;/code&gt; はさらに細かいカテゴリ（例：instances, buckets, clusters）、&lt;code&gt;&amp;lt;action&amp;gt;&lt;/code&gt; は実行する操作（例：create, list, describe, delete）を示します 。&lt;code&gt;[flags]&lt;/code&gt; はコマンドの動作を修飾するオプション（例：&lt;code&gt;--zone&lt;/code&gt; でゾーンを指定、&lt;code&gt;--project&lt;/code&gt; でプロジェクトを指定）、&lt;code&gt;[arguments]&lt;/code&gt; は操作に必要な具体的なパラメータ（例：インスタンス名、バケット名）です。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; CLIには、コマンドの安定性を示すためにリリースレベルの概念があります 。General Availability（GA）レベルのコマンドは、完全に安定しており、本番環境での利用が推奨されます。Betaレベルのコマンドは、機能的には完了していますが、まだいくつかの未解決の問題が存在する可能性があり、予告なしに破壊的な変更が加えられることがあります。Alphaレベルのコマンドは、早期リリース段階であり、予告なしに変更される可能性があります 。Beta版およびAlpha版のコマンドを利用するには、対応するコンポーネントを明示的にインストールする必要があります。これは、&lt;code&gt;gcloud components install alpha&lt;/code&gt; または &lt;code&gt;gcloud components install beta&lt;/code&gt; コマンドを使用して行います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. gcloudコマンドグループと対応するGoogle Cloudサービスの詳細リスト&lt;a href=&quot;#3-gcloudコマンドグループと対応するgoogle-cloudサービスの詳細リスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下に、&lt;code&gt;gcloud&lt;/code&gt; CLIで利用可能な主要なGoogle Cloudサービスと、それに対応するコマンドグループ、および基本的な操作の例を詳しく解説します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;3.1. コンピューティングサービス&lt;a href=&quot;#31-コンピューティングサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compute Engine&lt;/strong&gt;: 仮想マシンの作成と管理を行うサービスです 。&lt;code&gt;gcloud compute&lt;/code&gt; コマンドグループを使用します。仮想マシンの作成 (&lt;code&gt;gcloud compute instances create --zone [ZONE_NAME]&lt;/code&gt;) 、インスタンスの一覧表示 (&lt;code&gt;gcloud compute instances list&lt;/code&gt;) 、特定インスタンスの詳細表示 (&lt;code&gt;gcloud compute instances describe --zone [ZONE_NAME]&lt;/code&gt;) 、インスタンスへのSSH接続 (&lt;code&gt;gcloud compute ssh --zone [ZONE_NAME]&lt;/code&gt;) 、ディスクのスナップショット作成 (&lt;code&gt;gcloud compute disks snapshot --zone [ZONE_NAME] --snapshot-names&lt;/code&gt;) 、ファイアウォールルールの管理 (&lt;code&gt;gcloud compute firewall-rules list&lt;/code&gt;, &lt;code&gt;gcloud compute firewall-rules create --allow: --source-ranges&lt;/code&gt;)  など、多岐にわたる操作が可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;App Engine&lt;/strong&gt;: スケーラブルなウェブアプリケーションを構築およびホストするためのプラットフォームサービスです。&lt;code&gt;gcloud app&lt;/code&gt; コマンドグループを使用します。アプリケーションのデプロイ (&lt;code&gt;gcloud app deploy&lt;/code&gt;) 、アプリケーションの構成管理、トラフィックのルーティングなどが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Kubernetes Engine (GKE)&lt;/strong&gt;: コンテナ化されたアプリケーションをKubernetesを使用してデプロイ、管理、スケーリングするためのマネージドサービスです 。&lt;code&gt;gcloud container&lt;/code&gt; コマンドグループを使用します。クラスタの作成 (&lt;code&gt;gcloud container clusters create --zone [ZONE_NAME] --num-nodes&lt;/code&gt;) 、クラスタの一覧表示 (&lt;code&gt;gcloud container clusters list&lt;/code&gt;) 、クラスタへの接続に必要な認証情報の取得 (&lt;code&gt;gcloud container clusters get-credentials --zone [ZONE_NAME]&lt;/code&gt;) 、ノードプールの管理、クラスタのスケーリング (&lt;code&gt;gcloud container clusters resize --node-count --zone [ZONE_NAME]&lt;/code&gt;)  などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Functions&lt;/strong&gt;: サーバーレスでイベントドリブンな関数を実行できるコンピューティングサービスです 。&lt;code&gt;gcloud functions&lt;/code&gt; コマンドグループを使用します。関数のデプロイ (&lt;code&gt;gcloud functions deploy --runtime --trigger-http --entry-point --region&lt;/code&gt;) 、関数の呼び出し、ログの表示などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Run&lt;/strong&gt;: コンテナ化されたアプリケーションをフルマネージドなサーバーレスプラットフォームで実行および管理できるサービスです。&lt;code&gt;gcloud run&lt;/code&gt; コマンドグループを使用します。サービスのデプロイ (&lt;code&gt;gcloud run deploy --image --region&lt;/code&gt;)、トラフィックの管理、カスタムドメインの設定などが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.2. ストレージとデータベースサービス&lt;a href=&quot;#32-ストレージとデータベースサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Storage&lt;/strong&gt;: スケーラブルで耐久性のあるオブジェクトストレージサービスです 。&lt;code&gt;gcloud storage&lt;/code&gt; コマンドグループ（以前は &lt;code&gt;gsutil&lt;/code&gt;）を使用します。バケットの作成 (&lt;code&gt;gcloud storage buckets create gs:// --location=&lt;/code&gt;) 、ファイルやフォルダのアップロード (&lt;code&gt;gcloud storage cp gs:///&lt;/code&gt;) 、ダウンロード (&lt;code&gt;gcloud storage cp gs:///&lt;/code&gt;)、削除 (&lt;code&gt;gcloud storage rm gs:///&lt;/code&gt;) 、バケットやオブジェクトのIAMポリシー管理 (&lt;code&gt;gcloud storage buckets add-iam-policy-binding gs:// --member=user:[EMAIL] --role=&lt;/code&gt;, &lt;code&gt;gcloud storage buckets get-iam-policy gs://&lt;/code&gt;)  などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud SQL&lt;/strong&gt;: MySQL、PostgreSQL、SQL Serverのフルマネージドなリレーショナルデータベースサービスです 。&lt;code&gt;gcloud sql&lt;/code&gt; コマンドグループを使用します。インスタンスの作成 (&lt;code&gt;gcloud sql instances create --database-version= --region= --tier=&lt;/code&gt;)、インスタンスの一覧表示 (&lt;code&gt;gcloud sql instances list&lt;/code&gt;)、データベースの作成、バックアップの管理 (&lt;code&gt;gcloud sql backups list&lt;/code&gt;, &lt;code&gt;gcloud sql backups describe --instance=&lt;/code&gt;) 、データのインポート/エクスポート (&lt;code&gt;gcloud sql export sql --database= --uri=gs:///[FILE_NAME].sql&lt;/code&gt;)  などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Bigtable&lt;/strong&gt;: 高速でスケーラブルなNoSQLデータベースサービスです 。&lt;code&gt;gcloud bigtable&lt;/code&gt; コマンドグループは、&lt;code&gt;alpha&lt;/code&gt; および &lt;code&gt;beta&lt;/code&gt; コンポーネントを通じて提供されます 。テーブルの作成、データの読み書き、インスタンスの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Spanner&lt;/strong&gt;: グローバルにスケーラブルで、トランザクション整合性を保証するリレーショナルデータベースサービスです 。&lt;code&gt;gcloud spanner&lt;/code&gt; コマンドグループを使用します。インスタンスの作成、データベースの管理、データの操作などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firestore&lt;/strong&gt;: モバイルおよびウェブアプリケーション向けのNoSQLドキュメントデータベースです 。&lt;code&gt;gcloud firestore&lt;/code&gt; コマンドグループを使用します。データの追加、クエリ、インデックスの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memorystore&lt;/strong&gt;: RedisおよびMemcachedのフルマネージドなインメモリデータストアサービスです 。&lt;code&gt;gcloud memorystore redis&lt;/code&gt; および &lt;code&gt;gcloud memorystore memcached&lt;/code&gt; コマンドグループを使用します。インスタンスの作成、構成、スケーリングなどが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.3. ネットワークサービス&lt;a href=&quot;#33-ネットワークサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Virtual Private Cloud (VPC)&lt;/strong&gt;: Google Cloudリソースをホストするためのプライベートネットワークを提供します 。&lt;code&gt;gcloud compute networks&lt;/code&gt; コマンドグループを使用します。ネットワークの作成 (&lt;code&gt;gcloud compute networks create --subnet-mode custom&lt;/code&gt;) 、サブネットの作成 (&lt;code&gt;gcloud compute networks subnets create --network --region --range&lt;/code&gt;) 、ファイアウォールルールの管理 (&lt;code&gt;gcloud compute firewall-rules list&lt;/code&gt;, &lt;code&gt;gcloud compute firewall-rules create --network --allow: --source-ranges&lt;/code&gt;) 、ルーティングの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Load Balancing&lt;/strong&gt;: アプリケーションやサービスへのトラフィックを分散するためのフルマネージドでスケーラブルなロードバランシングソリューションです 。&lt;code&gt;gcloud compute forwarding-rules&lt;/code&gt;、&lt;code&gt;gcloud compute backend-services&lt;/code&gt; などのコマンドグループを使用します。ロードバランサーの作成、バックエンドサービスの構成、ヘルスチェックの設定などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud CDN&lt;/strong&gt;: Googleのグローバルに分散されたエッジロケーションを使用してコンテンツをユーザーに近い場所にキャッシュするコンテンツ配信ネットワークです 。&lt;code&gt;gcloud compute cdn-policies&lt;/code&gt;、&lt;code&gt;gcloud compute backend-buckets&lt;/code&gt; などのコマンドグループを使用します。CDNポリシーの作成、オリジンサーバーの構成などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud DNS&lt;/strong&gt;: スケーラブルで高性能なDNSサービスで、アプリケーションのドメイン名解決を管理します 。&lt;code&gt;gcloud dns managed-zones&lt;/code&gt;、&lt;code&gt;gcloud dns record-sets&lt;/code&gt; コマンドグループを使用します。管理対象ゾーンの作成、DNSレコードの追加/削除などが可能です 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Interconnect&lt;/strong&gt;: オンプレミスインフラストラクチャとGoogle Cloud間のプライベートで高性能な接続を可能にします 。&lt;code&gt;gcloud compute interconnects&lt;/code&gt;、&lt;code&gt;gcloud compute routers&lt;/code&gt; などのコマンドグループを使用します。インターコネクト接続の作成、ルーターの設定などが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.4. ビッグデータと分析サービス&lt;a href=&quot;#34-ビッグデータと分析サービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BigQuery&lt;/strong&gt;: 高速なSQLクエリを大規模データセットに対して実行できるフルマネージドなサーバーレスデータウェアハウスです 。&lt;code&gt;bq&lt;/code&gt; コマンドラインツールを使用します 。データセットの作成 (&lt;code&gt;bq mk&lt;/code&gt;)、テーブルの作成 (&lt;code&gt;bq mk.&lt;/code&gt;)、クエリの実行 (&lt;code&gt;bq query --use_legacy_sql=false &apos;&apos;&lt;/code&gt;)、データのロード (&lt;code&gt;bq load --source_format=.&lt;/code&gt;) などが可能です。&lt;code&gt;gcloud beta bq&lt;/code&gt; コマンドグループも存在し、&lt;code&gt;beta&lt;/code&gt; コンポーネントをインストールすることで利用できます 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dataproc&lt;/strong&gt;: Apache HadoopおよびApache Sparkクラスタを実行するためのフルマネージドなクラウドサービスです 。&lt;code&gt;gcloud dataproc clusters&lt;/code&gt;、&lt;code&gt;gcloud dataproc jobs&lt;/code&gt; コマンドグループを使用します 。クラスタの作成 (&lt;code&gt;gcloud dataproc clusters create --region --zone [ZONE_NAME] --master-machine-type --worker-machine-type --num-workers&lt;/code&gt;)、ジョブの実行 (&lt;code&gt;gcloud dataproc jobs submit --cluster= --region= --&lt;/code&gt;)、クラスタの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dataflow&lt;/strong&gt;: Apache Beamを使用したストリーミングおよびバッチデータ処理のためのフルマネージドサービスです 。&lt;code&gt;gcloud dataflow jobs&lt;/code&gt; コマンドグループは、&lt;code&gt;alpha&lt;/code&gt; および &lt;code&gt;beta&lt;/code&gt; コンポーネントを通じて提供されます 。ジョブの実行、監視などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pub/Sub&lt;/strong&gt;: イベントドリブンなアーキテクチャとリアルタイム分析パイプラインを構築するためのメッセージングサービスです 。&lt;code&gt;gcloud pubsub topics&lt;/code&gt;、&lt;code&gt;gcloud pubsub subscriptions&lt;/code&gt; コマンドグループを使用します。トピックの作成 (&lt;code&gt;gcloud pubsub topics create&lt;/code&gt;)、サブスクリプションの作成 (&lt;code&gt;gcloud pubsub subscriptions create --topic&lt;/code&gt;)、メッセージのパブリッシュ/サブスクライブなどが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.5. AIと機械学習サービス&lt;a href=&quot;#35-aiと機械学習サービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertex AI / AI Platform&lt;/strong&gt;: 機械学習モデルの構築、トレーニング、デプロイのための統合プラットフォームです 。&lt;code&gt;gcloud ai&lt;/code&gt; および &lt;code&gt;gcloud ai-platform&lt;/code&gt; コマンドグループを使用します。モデルのトレーニング (&lt;code&gt;gcloud ai-platform jobs submit training --module-name [MODULE_NAME] --package-path --region --staging-bucket gs:// --&lt;/code&gt;)、モデルのデプロイ、予測の実行などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud TPUs&lt;/strong&gt;: 機械学習アプリケーション向けのTensor Processing Unitです 。Compute Engineのオプションとして利用でき、&lt;code&gt;gcloud compute tpus&lt;/code&gt; コマンドグループを通じて管理できます。TPUノードの作成、管理などが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.6. セキュリティとIDサービス&lt;a href=&quot;#36-セキュリティとidサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IAM (Identity and Access Management)&lt;/strong&gt;: Google Cloudリソースへのアクセス制御を管理するためのサービスです 。&lt;code&gt;gcloud iam&lt;/code&gt; コマンドグループを使用します。プロジェクトのIAMポリシーの取得 (&lt;code&gt;gcloud projects get-iam-policy&lt;/code&gt;) 、IAMポリシーへのバインディングの追加 (&lt;code&gt;gcloud projects add-iam-policy-binding --member=user:[EMAIL] --role=&lt;/code&gt;) 、IAMポリシーからのバインディングの削除 (&lt;code&gt;gcloud projects remove-iam-policy-binding --member=user:[EMAIL] --role=&lt;/code&gt;) 、カスタムロールの作成 (&lt;code&gt;gcloud iam roles create --project= --permissions=, --title=&lt;/code&gt;) 、サービスアカウントの作成 (&lt;code&gt;gcloud iam service-accounts create --display-name= --project=&lt;/code&gt;) 、サービスアカウントのキーのリスト表示 (&lt;code&gt;gcloud iam service-accounts keys list --iam-account= --project=&lt;/code&gt;)  など、詳細なアクセス制御管理が可能です 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Identity&lt;/strong&gt;: GoogleのIDaaS（Identity as a Service）です 。&lt;code&gt;gcloud identity groups&lt;/code&gt; コマンドグループを使用します。グループの作成 (&lt;code&gt;gcloud identity groups create --parent= --group-id= --display-name=&lt;/code&gt;) 、グループの削除 (&lt;code&gt;gcloud identity groups delete&lt;/code&gt;) 、グループメンバーシップのリスト表示 (&lt;code&gt;gcloud identity groups memberships list --group-email=&lt;/code&gt;) 、グループへのメンバーの追加 (&lt;code&gt;gcloud identity groups memberships add --group-email= --member-email=&lt;/code&gt;) 、グループからのメンバーの削除 (&lt;code&gt;gcloud identity groups memberships delete --group-email= --member-email=&lt;/code&gt;)  など、グループとメンバーシップの管理が可能です 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Command Center&lt;/strong&gt;: Google Cloudのセキュリティとリスク管理プラットフォームです 。&lt;code&gt;gcloud scc&lt;/code&gt; コマンドグループを使用します。セキュリティ検出結果のリスト表示、アセットの調査、セキュリティ設定の管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud KMS (Key Management Service)&lt;/strong&gt;: 暗号化キーを安全に管理するためのサービスです 。&lt;code&gt;gcloud kms&lt;/code&gt; コマンドグループを使用します。キーリングの作成、暗号化キーの作成、暗号化 (&lt;code&gt;gcloud kms encrypt --keyring= --key=[KEY_NAME] --location= --plaintext-file= --ciphertext-file=&lt;/code&gt;)、復号 (&lt;code&gt;gcloud kms decrypt --keyring= --key=[KEY_NAME] --location= --ciphertext-file= --plaintext-file=&lt;/code&gt;)  などが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.7. 管理ツール&lt;a href=&quot;#37-管理ツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Monitoring&lt;/strong&gt;: Google Cloudリソースとアプリケーションのパフォーマンスと可用性を監視するためのフルマネージドサービスです 。&lt;code&gt;gcloud monitoring&lt;/code&gt; コマンドグループを使用します。メトリクスのリスト表示、アラートの作成、ダッシュボードの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Logging&lt;/strong&gt;: ログデータの保存、検索、分析、監視を行うためのフルマネージドサービスです 。&lt;code&gt;gcloud logging&lt;/code&gt; コマンドグループを使用します。ログのリスト表示 (&lt;code&gt;gcloud logging logs list&lt;/code&gt;) 、ログの読み取り (&lt;code&gt;gcloud logging read &quot;resource.type=gce_instance&quot; --limit 5&lt;/code&gt;) 、シンクの作成などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Deployment Manager&lt;/strong&gt;: インフラストラクチャをコードとして管理するためのサービスです 。&lt;code&gt;gcloud deployment-manager deployments&lt;/code&gt; コマンドグループを使用します。デプロイメントの作成 (&lt;code&gt;gcloud deployment-manager deployments create --config [CONFIG_FILE]&lt;/code&gt;) 、デプロイメントの更新 (&lt;code&gt;gcloud deployment-manager deployments update --config [CONFIG_FILE]&lt;/code&gt;) 、デプロイメントの削除などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Shell&lt;/strong&gt;: ウェブブラウザからアクセスできるコマンドライン環境です 。直接的な &lt;code&gt;gcloud cloud-shell&lt;/code&gt; コマンドグループはありませんが、&lt;code&gt;gcloud&lt;/code&gt; CLI自体がCloud Shell内でプリインストールされ、利用可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.8. その他のgcloudでアクセス可能な関連サービス&lt;a href=&quot;#38-その他のgcloudでアクセス可能な関連サービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloud Build&lt;/strong&gt;: Google Cloudインフラストラクチャ上でビルドを実行するサービスです 。&lt;code&gt;gcloud builds&lt;/code&gt; コマンドグループを使用します。ビルドの送信 (&lt;code&gt;gcloud builds submit --config&lt;/code&gt;)、ビルドのリスト表示、ビルドの詳細表示などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artifact Registry&lt;/strong&gt;: コンテナイメージや言語パッケージを保存、管理、保護するためのフルマネージドサービスです 。&lt;code&gt;gcloud artifacts repositories&lt;/code&gt;、&lt;code&gt;gcloud artifacts packages&lt;/code&gt;、&lt;code&gt;gcloud artifacts versions&lt;/code&gt; などのコマンドグループを使用します。リポジトリの作成、イメージのプッシュ/プル、パッケージの管理などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Tasks&lt;/strong&gt;: 非同期タスクの実行を管理するためのフルマネージドサービスです 。&lt;code&gt;gcloud tasks queues&lt;/code&gt;、&lt;code&gt;gcloud tasks tasks&lt;/code&gt; コマンドグループを使用します。キューの作成、タスクの作成、タスクの実行などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secret Manager&lt;/strong&gt;: 機密情報を安全に保存およびアクセスするためのサービスです 。&lt;code&gt;gcloud secrets&lt;/code&gt; コマンドグループを使用します。シークレットの作成 (&lt;code&gt;gcloud secrets create --replication-policy automatic&lt;/code&gt;)、シークレットへのバージョンの追加 (&lt;code&gt;gcloud secrets versions add --data-file&lt;/code&gt;)、シークレットのバージョンのアクセス (&lt;code&gt;gcloud secrets versions access --secret=&lt;/code&gt;)  などが可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service Directory&lt;/strong&gt;: サービスの検出、公開、接続を行うためのスケーラブルで可用性の高いサービスです 。&lt;code&gt;gcloud service-directory namespaces&lt;/code&gt;、&lt;code&gt;gcloud service-directory services&lt;/code&gt;、&lt;code&gt;gcloud service-directory endpoints&lt;/code&gt; などのコマンドグループを使用します。名前空間の作成、サービスの登録、エンドポイントの管理などが可能です。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Table 1: gcloudコマンドグループと対応するGoogle Cloudサービス (一部抜粋)&lt;/strong&gt;&lt;/p&gt;






































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;gcloudコマンドグループ&lt;/th&gt;&lt;th&gt;対応するGoogle Cloud サービス&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;th&gt;主な操作(例)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud compute&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Compute Engine&lt;/td&gt;&lt;td&gt;仮想マシンの作成と管理&lt;/td&gt;&lt;td&gt;インスタンスの作成(&lt;code&gt;create&lt;/code&gt;)、一覧表示(&lt;code&gt;list&lt;/code&gt;)、SSH接続(&lt;code&gt;ssh&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud app&lt;/code&gt;&lt;/td&gt;&lt;td&gt;App Engine&lt;/td&gt;&lt;td&gt;スケーラブルなウェブアプリケーションのホスティング&lt;/td&gt;&lt;td&gt;アプリケーションのデプロイ (&lt;code&gt;deploy&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud container&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Google Kubernetes Engine (GKE)&lt;/td&gt;&lt;td&gt;Kubernetesクラスタの管理&lt;/td&gt;&lt;td&gt;クラスタの作成(&lt;code&gt;create&lt;/code&gt;)、一覧表示(&lt;code&gt;list&lt;/code&gt;)、認証情報の取得(&lt;code&gt;get-credentials&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud storage&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cloud Storage&lt;/td&gt;&lt;td&gt;オブジェクトストレージ&lt;/td&gt;&lt;td&gt;バケットの作成(&lt;code&gt;buckets create&lt;/code&gt;)、ファイルのアップロード(&lt;code&gt;cp&lt;/code&gt;)、ダウンロード(&lt;code&gt;cp&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud sql&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cloud SQL&lt;/td&gt;&lt;td&gt;マネージドリレーショナルデータベース&lt;/td&gt;&lt;td&gt;インスタンスの一覧表示(&lt;code&gt;instances list&lt;/code&gt;)、バックアップのリスト表示(&lt;code&gt;backups list&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud iam&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Identity and Access Management (IAM)&lt;/td&gt;&lt;td&gt;アクセス制御と権限管理&lt;/td&gt;&lt;td&gt;IAMポリシーの取得(&lt;code&gt;projects get-iam-policy&lt;/code&gt;)、ロールの付与(&lt;code&gt;projects add-iam-policy-binding&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud identity groups&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cloud Identity&lt;/td&gt;&lt;td&gt;グループとメンバーシップの管理&lt;/td&gt;&lt;td&gt;グループの作成(&lt;code&gt;create&lt;/code&gt;)、メンバーの追加 (&lt;code&gt;memberships add&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud logging&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cloud Logging&lt;/td&gt;&lt;td&gt;ログデータの管理と分析&lt;/td&gt;&lt;td&gt;ログのリスト表示(&lt;code&gt;logs list&lt;/code&gt;)、ログの読み取り(&lt;code&gt;read&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;gcloud deployment-manager deployments&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Cloud Deployment Manager&lt;/td&gt;&lt;td&gt;インフラストラクチャのコード管理&lt;/td&gt;&lt;td&gt;デプロイメントの作成(&lt;code&gt;create&lt;/code&gt;)、更新(&lt;code&gt;update&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;bq&lt;/code&gt;&lt;/td&gt;&lt;td&gt;BigQuery&lt;/td&gt;&lt;td&gt;サーバーレスデータウェアハウス&lt;/td&gt;&lt;td&gt;データセットの作成(&lt;code&gt;mk&lt;/code&gt;)、クエリの実行(&lt;code&gt;query&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. 結論&lt;a href=&quot;#4-結論&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本レポートでは、&lt;code&gt;gcloud&lt;/code&gt; CLI を通じて利用可能な主要な Google Cloud サービスについて、その機能概要と基本的な操作方法を解説しました。&lt;code&gt;gcloud&lt;/code&gt; CLI は、 Compute Engine や Cloud Storage といった基本的なインフラストラクチャサービスから、 App Engine や GKE のようなプラットフォームサービス、さらには BigQuery や Vertex AI といった高度なデータ分析や機械学習サービスまで、広範な Google Cloud の機能をコマンドラインから効率的に管理するための強力なツールであることが示されました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt; CLI のコマンドグループ構造を理解し、各サービスに対応するコマンドとそのオプションを適切に利用することで、ユーザーは Google Cloud 環境を柔軟かつ効果的に制御できます。また、 Cloud Shell との統合により、環境構築の手間を省き、すぐにコマンドラインでの操作を開始できる点も大きな利点です。&lt;code&gt;gcloud&lt;/code&gt; CLI は、 Google Cloud を活用するすべての技術者にとって、習得と活用が推奨される重要なツールと言えるでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;レポートで使用されているソース&lt;a href=&quot;#レポートで使用されているソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/gcloud&quot; target=&quot;_blank&quot;&gt;Google Cloud CLI documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference&quot; target=&quot;_blank&quot;&gt;gcloud CLI reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/docs/cheatsheet&quot; target=&quot;_blank&quot;&gt;gcloud CLI cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cloudskillsboost.google/paths/419/course_templates/966/video/469675&quot; target=&quot;_blank&quot;&gt;Cloud Shell overview | Google Cloud Skills Boost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/mmizutani/fab325127b437be0b39448943a694796&quot; target=&quot;_blank&quot;&gt;gcloud CLI command list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/style/code-syntax&quot; target=&quot;_blank&quot;&gt;Document command-line syntax | Google developer documentation style guide | Google for Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Google_Cloud_Platform&quot; target=&quot;_blank&quot;&gt;Google Cloud Platform - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/products&quot; target=&quot;_blank&quot;&gt;Google Cloud Products&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/terms/services?hl=ja&quot; target=&quot;_blank&quot;&gt;Google Cloud Platform Services Summary | Google Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.openwaterfoundation.org/owf-learn-google-cloud-platform/cli/cli/&quot; target=&quot;_blank&quot;&gt;Google Cloud CLI documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/docs/cheatsheet&quot; target=&quot;_blank&quot;&gt;gcloud CLI cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@bigface00/handy-google-cloud-cli-commands-for-practical-situations-92226a69ec5d&quot; target=&quot;_blank&quot;&gt;Handy Google Cloud CLI Commands for Practical Situations | by Yusuke Enami(Kishishita) | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unogeeks.com/gcp-services-list/&quot; target=&quot;_blank&quot;&gt;GCP Services List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/docs&quot; target=&quot;_blank&quot;&gt;gcloud CLI documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.googlecloudcommunity.com/gc/Infrastructure-Compute-Storage/Can-t-delete-instance-group/m-p/852644&quot; target=&quot;_blank&quot;&gt;Can’t delete instance-group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference&quot; target=&quot;_blank&quot;&gt;gcloud CLI reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/pydevops/cffbd3c694d599c6ca18342d3625af97&quot; target=&quot;_blank&quot;&gt;gcloud cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.turbogeek.co.uk/gcloud-command-lists/&quot; target=&quot;_blank&quot;&gt;gcloud Command Lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cloudskillsboost.google/catalog_lab/31890&quot; target=&quot;_blank&quot;&gt;Configuring IAM permissions with the gcloud CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fig.io/manual/gcloud/identity/groups&quot; target=&quot;_blank&quot;&gt;gcloud identity groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fig.io/manual/gcloud/identity/groups/memberships/list&quot; target=&quot;_blank&quot;&gt;gcloud identity groups memberships list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/googlecloud/comments/1biyonj/gcloud_command_to_list_current_groups_within_a/&quot; target=&quot;_blank&quot;&gt;gcloud command to list current groups within a project : r/googlecloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;評価してみます。&lt;a href=&quot;#評価してみます&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;概ねの&lt;code&gt;gcloud&lt;/code&gt;コマンドは網羅できていそうですね。流石は Google 様の Gemini 様といったところでしょうか。&lt;/p&gt;&lt;p&gt;しかし、満足かと言われると微妙なところでした。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;気になった部分。&lt;a href=&quot;#気になった部分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;個人的には以下の部分が気になりました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gcloud scheduler&lt;/code&gt;が無い。&lt;code&gt;bq&lt;/code&gt;とか&lt;code&gt;gsutil&lt;/code&gt;とかはあるけど。&lt;code&gt;gcloud scheduler&lt;/code&gt;コマンドは、&lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference&quot; target=&quot;_blank&quot;&gt;gcloud CLI reference&lt;/a&gt;に載ってないんですね・・・。ジョブを登録するときとかに使うのに・・・。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gcloud pubsub&lt;/code&gt;が解説文には記載されているのに、一覧のテーブルには載せてくれていない。解説したものは全て網羅してまとめて欲しい。&lt;/li&gt;
&lt;li&gt;調査結果の出力の仕方がちょっと微妙。テーブル形式にした部分とリンク付きのテキストを Markdown と整合性が取れるように貼り付けることが出来ませんでした。
&lt;ul&gt;
&lt;li&gt;テーブル形式にした部分はスプレッドシートとして出力することが可能なのですが、それだとインラインコードとして記述されている部分が普通のテキストになってしまうんですよね・・・。それはちょっと可読性が低い。なので、テーブルの部分だけはスクショして、 Vertex AI で OCR して Markdown のテーブル形式にしてもらったら、イイ感じになりました。こうしないと Notion に貼り付けられないんですよね。&lt;/li&gt;
&lt;li&gt;リンク付きのテキストに関しては、最初レポートで使用されているソースのリンクが、ただリンクが貼ってあっただけだったので、ウェブページの題名にリンクを貼り付けるように指示しました。しかし、出力の質は微妙・・・。
&lt;ul&gt;
&lt;li&gt;あと、 Internal Server Error のサイトを載せていたりもしました。まあ少しぐらいの綻びはしょうがないか。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;網羅し切れていない部分があったのは少し残念でした。 Google 検索すればちゃんと出てきますしね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;修正箇所が多い。&lt;a href=&quot;#修正箇所が多い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;また、修正する場所と、コピペで引用できない部分があって困りました。&lt;/p&gt;&lt;p&gt;Gemini からの下記のようなテーブル形式の出力は、コピペで Notion とかに貼り付けられませんでした。スプレッドシートで出力し直すことも可能なのですが、そうするとテーブルの中のインラインコードの書式は消えてしまい、見づらい表になってしまいます・・・。なんだかなあ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1093&quot; height=&quot;641&quot; src=&quot;/_astro/11.Ci7vuYFh_13TVGW.webp&quot; srcset=&quot;/_astro/11.Ci7vuYFh_fY8qm.webp 640w, /_astro/11.Ci7vuYFh_ZSLt11.webp 750w, /_astro/11.Ci7vuYFh_1GqG9e.webp 828w, /_astro/11.Ci7vuYFh_Z1twh3B.webp 1080w, /_astro/11.Ci7vuYFh_13TVGW.webp 1093w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、仕方なくテーブルをスクショして Vertex AI で OCR してもらう処理が必要だったりしました。
&lt;img loading=&quot;lazy&quot; width=&quot;2482&quot; height=&quot;1099&quot; src=&quot;/_astro/12.DKqJ6Stn_vpoNU.webp&quot; srcset=&quot;/_astro/12.DKqJ6Stn_ZXJ7Tp.webp 640w, /_astro/12.DKqJ6Stn_1Lcgu8.webp 750w, /_astro/12.DKqJ6Stn_Z2s3FjL.webp 828w, /_astro/12.DKqJ6Stn_Z1CXSgi.webp 1080w, /_astro/12.DKqJ6Stn_2eMlv7.webp 1280w, /_astro/12.DKqJ6Stn_Z1Qj5Bs.webp 1668w, /_astro/12.DKqJ6Stn_XJgNl.webp 2048w, /_astro/12.DKqJ6Stn_vpoNU.webp 2482w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに、 Deep Research では引用元のソースを列挙してくれるのですが、このソースを URL のみで出力してきました。どうせならページの題名に埋め込んでほしかったなあ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1398&quot; height=&quot;899&quot; src=&quot;/_astro/13.00asQwGB_2uqDF.webp&quot; srcset=&quot;/_astro/13.00asQwGB_2dDj4B.webp 640w, /_astro/13.00asQwGB_Kf7k9.webp 750w, /_astro/13.00asQwGB_1FWftP.webp 828w, /_astro/13.00asQwGB_Z13NLKE.webp 1080w, /_astro/13.00asQwGB_1IESkA.webp 1280w, /_astro/13.00asQwGB_2uqDF.webp 1398w&quot; /&gt;&lt;/p&gt;&lt;p&gt;埋め込むようにお願いすると、なんかチグハグな出力になったりします。うーんこの。
&lt;img loading=&quot;lazy&quot; width=&quot;1568&quot; height=&quot;1009&quot; src=&quot;/_astro/14.DwpbgV_h_Z2waAyr.webp&quot; srcset=&quot;/_astro/14.DwpbgV_h_1jcsi6.webp 640w, /_astro/14.DwpbgV_h_29UIUz.webp 750w, /_astro/14.DwpbgV_h_2eX3cu.webp 828w, /_astro/14.DwpbgV_h_1Fayye.webp 1080w, /_astro/14.DwpbgV_h_2lmqnq.webp 1280w, /_astro/14.DwpbgV_h_Z2waAyr.webp 1568w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Clineに聞いたらどうまとまる？&lt;a href=&quot;#clineに聞いたらどうまとまる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Deep Research で抜けがあるのであれば、事前学習モデルだけのClineだとちょっと厳しい？&lt;/p&gt;&lt;p&gt;Claude 3.7 Sonnet で試してみます。&lt;/p&gt;&lt;p&gt;プロンプトの際に、以前に作った僕のブログ記事の文体を分析した資料を踏まえてまとめてもらいます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/cline-guide-for-python-typing-module/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Notion、Bash】Clineで綴るPythonのtypingモジュール完全ガイド&lt;/div&gt;&lt;div&gt;Clineで記事を書くために、自分が今まで書いた記事の文体や特徴をまとめるための資料を作る工程を紹介した記事です。NotionからMarkdownをエクスポートしてBashで加工してWordPressで反映します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/03/20250301_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;それでは出力結果をどうぞ・・・&lt;/p&gt;&lt;p&gt;すみません。出力されたボリュームがなかなかに多いので別記事にしました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/cline-for-gcloud-commands-with-claude/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cline（Claude 3.7 Sonnet）にgcloudコマンドを網羅してもらった&lt;/div&gt;&lt;div&gt;Google Cloud内のリソースをCLI上で操作するためのツールであるgcloud CLIのコマンドをClineでどれぐらい網羅出来るかどうかを試した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/03/20250303_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Gemini の Deep Research と Cline で、以下の点で差異があったと思います。&lt;/p&gt;






















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Gemini&lt;/th&gt;&lt;th&gt;Cline&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;記述形式&lt;/td&gt;&lt;td&gt;文章を多用。&lt;/td&gt;&lt;td&gt;コードブロックを多用。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;まとめ&lt;/td&gt;&lt;td&gt;本文内の項目を表形式でまとめた。&lt;/td&gt;&lt;td&gt;本文内の項目には触れず、ヘルプコマンドで網羅可能である事を紹介した。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;過不足&lt;/td&gt;&lt;td&gt;漏れあり&lt;/td&gt;&lt;td&gt;非推奨のサービスによる過剰あり&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;人間による修正&lt;/td&gt;&lt;td&gt;多い&lt;/td&gt;&lt;td&gt;殆ど無い&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;情報のソース&lt;/td&gt;&lt;td&gt;あり&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ボリューム（扱ったサービス）&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ボリューム（扱ったスニペット）&lt;/td&gt;&lt;td&gt;50ぐらい？&lt;/td&gt;&lt;td&gt;136&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;価格&lt;/td&gt;&lt;td&gt;$0（今回は無料版でした。）&lt;/td&gt;&lt;td&gt;$0.29（API従量課金のみ）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;拡張性&lt;/td&gt;&lt;td&gt;低い&lt;/td&gt;&lt;td&gt;高い&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;個人的に、まとめ方は Cline の方が見やすくて良かったですね。最後にヘルプコマンドを教えてくれるのも柔軟性が有ました。これに、 Brave とかの MCP サーバ建てたら、 Deep Research を超えるかもしれない・・・。&lt;/p&gt;&lt;p&gt;Gemini にも、 Cline に読み込ませた僕のブログ記事の文体を分析した資料を読ませましたが、途中の記述の仕方が少しだけ変わりましたが、全体的な構成は殆ど変わりませんでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やはり沢山書いてくれますねぇ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これが無料になったのはデカイ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion、Bash】Clineで綴るPythonのtypingモジュール完全ガイド</title><link>https://endorphinbath.com/posts/cline-guide-for-python-typing-module/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cline-guide-for-python-typing-module/</guid><description>Clineで記事を書くために、自分が今まで書いた記事の文体や特徴をまとめるための資料を作る工程を紹介した記事です。NotionからMarkdownをエクスポートしてBashで加工してWordPressで反映します。</description><pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・というものが出来てしまったな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作れてしまいました&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Clineに自分のブログ記事に関してまとめてもらった。&lt;a href=&quot;#clineに自分のブログ記事に関してまとめてもらった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さすがにそろそろ生成AIに記事を書いてもらいたくなりました。&lt;/p&gt;&lt;p&gt;そこで今回は、 Cline に自分のブログ記事の文章の文体や内容の特徴などをまとめてもらって、そのまとめを基に記事を執筆してもらいました。&lt;/p&gt;&lt;p&gt;以下の記事を参考にさせていただきました。&lt;/p&gt;&lt;a href=&quot;https://zenn.dev/mizchi/articles/auto-mizchi-writer&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://static.zenn.studio/images/logo-transparent.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Zenn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Clineに自分をエミュレートさせて技術記事を代筆させてみたらビビった&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zenn.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://res.cloudinary.com/zenn/image/upload/s--y4_HHEk7--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Cline%25E3%2581%25AB%25E8%2587%25AA%25E5%2588%2586%25E3%2582%2592%25E3%2582%25A8%25E3%2583%259F%25E3%2583%25A5%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%2588%25E3%2581%2595%25E3%2581%259B%25E3%2581%25A6%25E6%258A%2580%25E8%25A1%2593%25E8%25A8%2598%25E4%25BA%258B%25E3%2582%2592%25E4%25BB%25A3%25E7%25AD%2586%25E3%2581%2595%25E3%2581%259B%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F%25E3%2582%2589%25E3%2583%2593%25E3%2583%2593%25E3%2581%25A3%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:mizchi%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2liclRHT052Z3d3ay1fNGxlcVk4TGNGSlNuX0FoWnpEWVlKaXJNcWc9czI1MC1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;資料を作る。&lt;a href=&quot;#資料を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、 Cline に&lt;code&gt;writing-style.md&lt;/code&gt;という文体や記事の特徴をまとめた資料を作ってもらいます。そのために、その資料を作るための記事の文章が入った Markdown を沢山作っていきましょう。
自分は記事を書く際に Notion にメモるようにしているので、 Notion からページ群をエクスポートします。エクスポートすると、沢山 Markdown ファイルが手に入ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/home/user/My_Tasks xxxxxxxxxxxx45458198b099a00e647c/target_markdowns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--3DMarkに関する情報をまとめた_20241205_kinkinbeer135ml xxxxxxxxxxxxxxxdb2a1eb4e0d63af6b.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--40万円で手に入れた2つのPCの性能のベンチマークを比較する（第1回：3DMarkとCinebe xxxxxxxxxxxxxxb9be3f129b4642f3c.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--40万円で手に入れた2つのPCの性能のベンチマークを比較する（第2回：Satisfactoryや xxxxxxxxxxxxxx8ea2d6ca55426b306b.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--B650_Steel_Legend_WiFiで使えるASRock Polychrome RGBの入 xxxxxxxxxxxxxx9a79c2147b8f4f3b.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--ChocolateyでWindowsに一気にインストールする_20250105_kinkinbee xxxxxxxxxxxxxx83b2a4c2bdf6c0465c.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Notion でエクスポートした Markdown の中には、ページのプロパティや自分がメモした情報などが載っていて余分な情報が混ざっているので、本当に欲しい情報を抽出します。&lt;/p&gt;&lt;p&gt;自分の場合は、記事を書く際に必ず&lt;code&gt;# Content\\n\\n## はじまり\\n&lt;/code&gt;という正規表現が引っ掛かる部分以降に記事の本文をバックアップするようにしているので、その目印を基に文章を抽出していきます。
シェル関数で抽出します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;move_files_from_list&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;move_files_from_list&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;ファイルリスト&amp;gt; &amp;lt;移動先ディレクトリ&amp;gt; [デフォルト拡張子]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;説明:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  指定されたファイルリストに記載されているファイルを移動先ディレクトリに移動します。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  ファイル名に拡張子がない場合は、指定されたデフォルト拡張子が追加されます。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;パラメータ:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &amp;lt;ファイルリスト&amp;gt;      移動対象ファイル名が記載されたテキストファイル（必須）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &amp;lt;移動先ディレクトリ&amp;gt;  ファイルの移動先ディレクトリ（必須）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  [デフォルト拡張子]    拡張子のないファイル名に追加する拡張子（省略時は .md）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ファイルリスト.txt /path/to/destination&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ファイルリスト.txt /path/to/destination .txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 引数の数が不正です&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用法を確認するには「&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --help」を実行してください&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file_list&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dest_dir&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default_ext&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;.md&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# デフォルトの拡張子は.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;moved_count&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# 移動したファイル数をカウント&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数で拡張子が指定されている場合は上書き&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;default_ext&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$3&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 拡張子の先頭にドットがなければ追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$default_ext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=~&lt;/span&gt;&lt;span&gt; ^&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;default_ext&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;.&lt;/span&gt;&lt;span&gt;$default_ext&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 移動先ディレクトリの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$dest_dir&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 移動先ディレクトリ &apos;&lt;/span&gt;&lt;span&gt;$dest_dir&lt;/span&gt;&lt;span&gt;&apos; が存在しません&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ファイルリストの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file_list&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ファイルリスト &apos;&lt;/span&gt;&lt;span&gt;$file_list&lt;/span&gt;&lt;span&gt;&apos; が見つかりません&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ファイルの移動を開始します...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ファイルリストを読み込んで移動&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IFS&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;&lt;span&gt; || [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 空行をスキップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 拡張子の確認と追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual_filename&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=~&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;[^./]+$ ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;actual_filename&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;default_ext&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 拡張子なしファイル &apos;&lt;/span&gt;&lt;span&gt;$filename&lt;/span&gt;&lt;span&gt;&apos; に &apos;&lt;/span&gt;&lt;span&gt;$default_ext&lt;/span&gt;&lt;span&gt;&apos; を追加しました: &apos;&lt;/span&gt;&lt;span&gt;$actual_filename&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ファイルの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$actual_filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;mv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$actual_filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$dest_dir&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$actual_filename&lt;/span&gt;&lt;span&gt;&apos; を &apos;&lt;/span&gt;&lt;span&gt;$dest_dir&lt;/span&gt;&lt;span&gt;&apos; に移動しました&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;moved_count&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$actual_filename&lt;/span&gt;&lt;span&gt;&apos; が見つからないためスキップします&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt; &amp;lt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file_list&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 移動したファイル数を表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$moved_count&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 移動したファイルはありません&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 移動処理が完了しました - 合計 &lt;/span&gt;&lt;span&gt;$moved_count&lt;/span&gt;&lt;span&gt; 個のファイルを移動しました&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;find_content_files&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;find_content_files&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 改行を含むパターンを正しく定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Perl正規表現モード(-P)では \n が改行を表す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;search_pattern&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;# Content&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n## はじまり&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;n&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ヘルプ表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用方法&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;ディレクトリ&amp;gt; [拡張子]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;説明:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  指定されたディレクトリ内で、特定のコンテンツパターンを含むファイルを検索します。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  検索対象は「# Content」の後に3つの改行、その後に「## はじまり」が続くパターンです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;パラメータ:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &amp;lt;ディレクトリ&amp;gt;  検索対象のディレクトリパス（必須）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  [拡張子]      検索対象のファイル拡張子（省略時は .md）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ~/documents&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ~/projects .txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 引数チェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 引数の数が不正です&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用法を確認するには「&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; --help」を実行してください&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dir_path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;.md&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# デフォルト拡張子&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 拡張子が指定されている場合は上書き&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 拡張子の先頭にドットがなければ追加&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=~&lt;/span&gt;&lt;span&gt; ^&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;.&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ディレクトリの存在確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$dir_path&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ディレクトリ &apos;&lt;/span&gt;&lt;span&gt;$dir_path&lt;/span&gt;&lt;span&gt;&apos; が存在しません&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$dir_path&lt;/span&gt;&lt;span&gt;&apos; ディレクトリ内の &apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos; ファイルを検索中...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 結果を格納する変数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;found_files&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# ディレクトリ内のファイルを検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$dir_path&lt;/span&gt;&lt;span&gt;&quot;/*&quot;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ファイルが存在しない場合のエラー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos; 拡張子のファイルが見つかりません&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ファイル内容を検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Pzq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$search_pattern&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; 2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;found_files&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 結果の表示&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$found_files&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: パターンに一致するファイルが見つかりませんでした&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: パターンに一致するファイルが &lt;/span&gt;&lt;span&gt;$found_files&lt;/span&gt;&lt;span&gt; 件見つかりました&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extract_content_files&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 関数名をローカル変数に格納&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;FUNCNAME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# --helpパラメータの確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [[ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;--help&quot;&lt;/span&gt;&lt;span&gt; ]]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 利用方法:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &amp;lt;対象ディレクトリ&amp;gt; [拡張子]&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    &amp;lt;対象ディレクトリ&amp;gt; : 処理対象のディレクトリ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    [拡張子]           : ファイルの拡張子（省略時は &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.md&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;）&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 使用例:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt; /path/to/directory .md&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# パラメータ数のチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$#&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 対象ディレクトリが指定されていません。--help を参照してください。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target_dir&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${2&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;md&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 対象ディレクトリが存在するかチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$target_dir&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: 指定されたディレクトリ &apos;&lt;/span&gt;&lt;span&gt;$target_dir&lt;/span&gt;&lt;span&gt;&apos; が存在しません。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# extracted_contentsディレクトリを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;output_dir&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;target_dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/extracted_contents&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$output_dir&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$output_dir&lt;/span&gt;&lt;span&gt;&apos; の作成に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$output_dir&lt;/span&gt;&lt;span&gt;&apos; を作成しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 対象ディレクトリ内の拡張子が一致する各ファイルに対して処理を実施&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;target_dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/*&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 通常のファイルのみ処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ファイル内からマーカー以降の内容を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# マーカーは以下のように記載されているとする:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# # Content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ## はじまり&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 以降すべてのテキストを抽出（マーカーも含む）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;perl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-0777&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;if(/(# Content\s*\n\s*\n## はじまり\s*\n.*)/s){print $1}&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$content&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: ファイル &apos;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&apos; 内に指定マーカーが見つかりませんでした。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;basefile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;basefile&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;local&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;output_file&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;output_dir&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;basefile&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 抽出した内容を新規ファイルに出力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$content&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$output_file&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;$?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; ]; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$output_file&lt;/span&gt;&lt;span&gt;&apos; への出力に失敗しました。&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;amp;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[INFO] &lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &apos;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&apos; を処理し、&apos;&lt;/span&gt;&lt;span&gt;$output_file&lt;/span&gt;&lt;span&gt;&apos; に出力しました。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;find_content_files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# txtファイルに書き込むためのファイル一覧が表示されるので、markdown_list.txtにメモる。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;move_files_from_list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;markdown_list.txt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./target_markdowns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target_markdowns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;extract_content_files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これで、まとめるために欲しい資料が手に入りました。
&lt;img loading=&quot;lazy&quot; width=&quot;1161&quot; height=&quot;709&quot; src=&quot;/_astro/11.DTMy0Ut2_TBd1i.webp&quot; srcset=&quot;/_astro/11.DTMy0Ut2_Z1CyKgp.webp 640w, /_astro/11.DTMy0Ut2_Z23g86t.webp 750w, /_astro/11.DTMy0Ut2_1u0er.webp 828w, /_astro/11.DTMy0Ut2_Lvlox.webp 1080w, /_astro/11.DTMy0Ut2_TBd1i.webp 1161w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;文体と特徴をまとめる。&lt;a href=&quot;#文体と特徴をまとめる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは次に、Clineに&lt;code&gt;writing-style.md&lt;/code&gt;という文体や記事の特徴をまとめた資料を作ってもらいます。前の工程で抽出した資料が78件ぐらいあったような覚えがあります。それらの資料を適当にAIに読んでもらって、Markdown形式でまとめてもらいます。
まとめてもらうためのプロンプトがこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;私は日本のエンジニアです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;kinkinbeer135ml といいます。もし私について知っていたら、以下でその知識を使っても構いません。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;~/My_Tasks\ xxxxxxxxxxxxxxxxxxxxxxxxx0e647c/target_markdowns/extracted_contents/* 以下は自分がブログに書いた記事です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AIが書いたとバレない範囲で、ブログの記述を自動化したいです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;記事一覧から私の技術の方向性を抽出し、そこからランダムに読んでください。最低限、10記事は読んでください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;そこから私の人格と文体を抽出して、それを ~/My_Tasks\ xxxxxxxxxxxxxxxxxxxxxxxxx0e647c/target_markdowns/generated_contents/writing-style.md に抽出してください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;最終的には、それをベースに記事を執筆してもらいます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;最初、 OpenAI の o1 で作ってもらおうと思ったのですが、 o1 は扱えるトークン長が短いらしい。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;429 Request too large for o1 in organization org-XXXXXXXXXXXXXXXXXXXXX on tokens per min (TPM): Limit 30000, Requested 32394. The input or output tokens must be reduced in order to run successfully. Visit https://platform.openai.com/account/rate-limits to learn more.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら次に、Claude APIで3.7 Sonnetで出力してみました。こっちであればかなり進めることが出来ました。まあでもしかし、最初の出力量だとブログ記事作成用の資料としてはボリュームが少なかったので、追加でプロンプトを与えて内容を補填していきました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;その分析に使ったMarkdownファイルに記載されている内容のまとめを「## 分析済み記事の要約」という見出しの中にまとめてください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;その分析に使ったMarkdownファイルに記載されている内容のそれぞれの記事構成のパターンを「## 分析済み記事の要約」という見出しの中に追記しください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;「プログラミング関連の記事の特徴」という見出しを作って、その中に全体的な記事の特徴を追記して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;自分で修正したりもしていって・・・、そして一旦、この内容の&lt;code&gt;writing-style.md&lt;/code&gt;が出来上がりました。ゆくゆくは、記事のジャンルごとに作り並べていきたいですがとりあえずこれで行ってみましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 書き手の文体と技術方向性&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本ブログ記事群から以下の特徴が抽出されました：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 文体・トーン&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**カジュアルかつ親しみやすい**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読者に対してフレンドリーな語り口が特徴。たとえば、記事中に「リサちゃん」や「ペンギン」といった愛称を使い、軽妙なユーモアが散りばめられています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**詳細な技術解説**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;各記事は技術的な背景や実装方法、仕様などを丁寧に解説しており、専門的な読者に向けた深い内容が含まれます。図表やコード例を適宜交え、論理的に説明しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**率直で実践的**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;自身の経験や実際のテスト結果、比較結果をもとに、率直な意見を述べるスタイルです。実際の動作確認やパフォーマンス測定に基づく分析が重視されています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 技術の方向性&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**クラウドおよびサーバーレス技術**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Cloud SQL、Cloud Functions、GAS（Google Apps Script）など、クラウドサービスを利用したシステム構築や自動化に関する記事が多く見られます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**Chrome拡張機能やウェブアプリ開発**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ブラウザ拡張機能、ウェブAPI連携、Notion連携など、フロントエンドおよびバックエンドの統合開発の事例が記されています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**システム自動化とスクリプト技術**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PowerShell、Bash、Python、Golangなど、さまざまなプログラミング言語を用いた自動化やスクリプト処理の具体例が豊富です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**ハードウェア評価およびベンチマーク分析**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3DMarkをはじめとするGPU、CPU、統合グラフィックスの性能評価、最新技術（DirectX、Vulkan、DLSS、FSR、XeSS）の検証記事が掲載され、ハードウェアに対する深い洞察が見受けられます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 全体的な印象&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 複数の技術分野を横断し、実用性と楽しさを融合させたスタイルを採用。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 技術的な解説だけでなく、個人的な視点や感想を交え、読者に身近に感じてもらえる記事作成が行われている。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 最新技術に対する好奇心と実験的なアプローチが顕著で、読者に次の技術への期待を持たせる工夫がなされています。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 追加分析（サンプル読解に基づく考察）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**文体とアプローチの柔軟性**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;記事タイトルや内容から、筆者は技術的な精度と共に、カジュアルさや実験的アプローチを大切にしていることが読み取れます。体験談や実際のテストに基づいた具体的な例が多く、読者に実践的な知識を提供しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**多角的な技術観**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;クラウド、サーバーレス、スクリプト技術、ハードウェアベンチマークなど、多岐にわたる分野を扱っており、常に最新技術に挑戦し、幅広い視野で議論を展開している印象です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**実用性と実証性の重視**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;コード例や操作手順、実際の性能測定結果など、実用的な情報が豊富に提供されており、読者がすぐに実践に移せる工夫が随所に見られます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 人格特徴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**謙虚さと自信の融合**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;記事全体からは、常に謙虚な姿勢を保ちながらも、自身の技術や経験に基づく確固たる自信が読み取れます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**熱意と探究心**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;技術に対する深い探究心と、常に最新の情報を追い求める情熱が感じられ、実験的なアプローチが随所に見られます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**ユーモアと親しみやすさ**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;カジュアルな語り口や愛称の使用により、技術的に難解な内容でも親しみやすく、読者にやさしく寄り添う温かさがあります。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**実践志向**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;実際の動作確認やパフォーマンス測定に基づいた具体的な知見を提供する姿勢から、理論だけでなく実践も重視する現実的な人柄が表れています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 文体の特徴的な要素&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### 記事構成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**キャラクター対話による導入と締めくくり**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ほぼすべての記事が「リサちゃん」と「ペンギン」または「135ml」というキャラクターの会話で始まり、同様の会話で締めくくられています。この対話形式により、技術的な内容に親しみやすさを加えています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**視覚的な説明の重視**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;スクリーンショット、図表、コードブロックを多用して説明を補強しています。特に操作手順やUIの説明では、視覚的な情報を積極的に取り入れています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**段落間の空白**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;段落間に改行タグタグを入れて読みやすさを向上させています。これにより、密度の高い技術情報でも読者が読み進めやすくなっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### 言葉遣いと表現&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**読者への語りかけ**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;「〜ですね」「〜でしょう」「〜したいと思います」など、読者に直接語りかけるような表現を多用しています。これにより、一方的な解説ではなく、読者との対話を意識した文体になっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**感情表現の挿入**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;「オオオッ・・・」「アレッ・・・」など、感情を表す表現を適宜挿入し、筆者の驚きや発見を読者と共有しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**多様な表現レベルの混在**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;「言わずもがな」「雲泥の差」などの少し堅めの表現と、「なるほどなるほど」などの会話的な表現が混在しており、硬軟取り混ぜた文体となっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**断定を避ける表現**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;「〜かもしれません」「〜でしょうか」など、断定を避ける表現を使うことで、読者に考える余地を残し、押し付けがましさを軽減しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**説明の締めくくり方**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;「〜なわけです」「〜というわけです」など、説明を締めくくる際の特徴的な表現があります。これにより、説明に明確な区切りをつけ、読者の理解を促しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### 実用的な要素&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**関連商品の紹介**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;記事の最後に関連商品のリンクを紹介することが多く、読者が実際に試してみたいと思った際の参考になるよう配慮しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**段階的な説明**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;複雑な技術的内容を、基本から応用へと段階的に説明する構成が多く見られます。初心者から上級者まで幅広い読者層に対応できるよう工夫されています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## プログラミング関連の記事の特徴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**コードブロックの効果的な使用**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;プログラミング関連の記事では、コードブロックを多用して実際のコード例を示しています。単なるコードの提示だけでなく、コードの前後に解説を加え、読者が理解しやすいように工夫されています。また、コードの重要な部分には強調表示やコメントを入れることが多いです。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**エラーメッセージの提示と解決方法**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;実際に遭遇したエラーメッセージを提示し、その原因と解決方法を丁寧に解説しています。「こんなエラーが出たら、こうすれば解決できる」という実践的なアドバイスが豊富です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**ステップバイステップの実装手順**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;複雑な実装も、段階的に分解して説明しています。各ステップで何が行われているのかを明確にし、読者が自分のプロジェクトに応用しやすいように配慮されています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**実際のユースケースや応用例**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;抽象的な説明だけでなく、実際のユースケースや応用例を提示することで、技術の実用性を示しています。特に、自身のプロジェクトでの使用例を交えることで、説得力のある内容になっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**関連するライブラリやフレームワークの紹介**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;メインの技術だけでなく、関連するライブラリやフレームワークも適宜紹介しています。これにより、読者が技術スタック全体を理解しやすくなっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**注意点や落とし穴の説明**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;実装時に陥りがちな落とし穴や注意点を明示的に説明しています。「ここでハマりました」「この部分は特に注意が必要です」といった表現で、読者が同じ問題に遭遇することを防いでいます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**パフォーマンスや最適化に関する考察**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;単に動作するコードを提示するだけでなく、パフォーマンスや最適化に関する考察も加えています。「こうすればもっと効率的になる」「この方法だとメモリ使用量が少なくて済む」といった実用的なアドバイスが含まれています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**代替手段や比較検討**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;一つの解決策だけでなく、複数の代替手段を提示し、それぞれのメリット・デメリットを比較検討しています。これにより、読者が自分のプロジェクトに最適な方法を選択できるようになっています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## ゲーム関連の記事の特徴&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**実践的なTipsの提供**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ゲーム関連の記事では、自身の経験に基づいた実践的なTipsや効率化のコツを提供しています。特にパルワールドなどのゲームでは、プレイ経験から得られた知見を詳細に解説しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;**ゲームと技術の融合**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ゲームプレイの楽しさと技術的な側面（ベンチマーク、パフォーマンス最適化など）を融合させた内容が特徴的です。ゲームを単なる娯楽としてではなく、技術検証の場としても捉えている姿勢が見られます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;## 分析済み記事の要約&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;今回の分析では、以下の記事を読み込み、文体と人格の特徴を抽出しました：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### 1. 3DMarkに関する情報をまとめた記事&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ファイル名：「3DMarkに関する情報をまとめた_20241205_kinkinbeer135ml 153194df981d80fdb2a1eb4e0d63af6b.md」&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3DMarkというベンチマークソフトウェアの各種テスト（Steel Nomad、Fire Strike、Time Spy、Port Royalなど）について詳細に解説し、DirectX、Vulkan、DLSS、FSR、XeSSなどの技術についても説明しています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;**記事構成**&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;これらの記事は、技術的な内容を詳細かつ親しみやすく解説しており、実践的な知識と筆者の経験に基づいた洞察が豊富に含まれています。また、ほぼすべての記事が「リサちゃん」と「ペンギン」または「135ml」というキャラクターの会話で始まり、同様の会話で締めくくられているという特徴的な構成を持っています。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際にAIに書かせる。&lt;a href=&quot;#実際にaiに書かせる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは&lt;code&gt;writing-style.md&lt;/code&gt;を基に、実際にAIにブログ記事を書かせてみます。WordPressであれば、Notionに一度Markdownを貼り付けてブロックに変換してから、WordPressエディタに貼り付け直すのが良さそうです。
このプロンプトで書いてもらいます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;~/My_Tasks\ xxxxxxxxxxxxxxxxxxxxxxxxx0e647c/target_markdowns/generated_contents/writing-style.md を参考に、Pythonのモジュールであるtypingの使い方を説明する記事を書いて。~/My_Tasks\ xxxxxxxxxxxxxxxxxxxxxxxxx0e647c/target_markdowns/generated_contents内に出力して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;それでは出力結果をどうぞ・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ねえねえ、ペンギンさん。最近Pythonのコードを書いていたら、`typing`っていうモジュールをよく見かけるんだけど、これって何なの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;オオッ、いい質問だね！`typing`モジュールは、Pythonに型ヒントを追加するためのものだよ。動的型付け言語であるPythonに、静的型チェックの恩恵をもたらしてくれるんだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;型ヒント？それって何か便利なの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もちろん！コードの可読性が上がるし、IDEの補完機能が強化されるし、型チェッカーを使えば実行前にバグを見つけられるようになるんだ。今日はその`typing`モジュールの使い方を詳しく解説していくよ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonのtypingモジュールとは？&lt;a href=&quot;#pythonのtypingモジュールとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonは動的型付け言語として知られていますが、Python 3.5から&lt;code&gt;typing&lt;/code&gt;モジュールが導入され、コードに型ヒント（Type Hints）を追加できるようになりました。これにより、静的型付け言語のような型チェックの恩恵を受けられるようになったのです。
&lt;code&gt;typing&lt;/code&gt;モジュールは以下のような利点をもたらします：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;コードの可読性と自己文書化の向上&lt;/li&gt;
&lt;li&gt;IDEやエディタの補完機能と型チェック機能の強化&lt;/li&gt;
&lt;li&gt;mypy等の型チェッカーによる静的解析でのバグ早期発見&lt;/li&gt;
&lt;li&gt;リファクタリングの安全性向上&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;重要なのは、型ヒントはあくまで「ヒント」であり、Pythonの実行時の動作には影響しないということです。型チェックは外部ツールによって行われます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本的な型ヒントの使い方&lt;a href=&quot;#基本的な型ヒントの使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは基本的な型ヒントの書き方から見ていきましょう。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;こんにちは、&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;さん！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;age: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;is_active: &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;height: &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;175.5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記の例では：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name: str&lt;/code&gt; - 引数&lt;code&gt;name&lt;/code&gt;が文字列型であることを示しています&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt; str&lt;/code&gt; - 関数の戻り値が文字列型であることを示しています&lt;/li&gt;
&lt;li&gt;変数宣言時にも&lt;code&gt;: 型名&lt;/code&gt;の形式で型ヒントを付けられます&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;基本的な型としては、&lt;code&gt;str&lt;/code&gt;、&lt;code&gt;int&lt;/code&gt;、&lt;code&gt;float&lt;/code&gt;、&lt;code&gt;bool&lt;/code&gt;、&lt;code&gt;bytes&lt;/code&gt;などがあります。これらはPythonの組み込み型なので、&lt;code&gt;typing&lt;/code&gt;モジュールをインポートする必要はありません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;複合型の使い方&lt;a href=&quot;#複合型の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;より複雑なデータ構造には、&lt;code&gt;typing&lt;/code&gt;モジュールの複合型を使います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List, Dict, Tuple, Set, Optional, Union&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# リスト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;numbers: List[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 辞書&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;user_info: Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;太郎&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;email&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;taro@example.com&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# タプル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;coordinates: Tuple[&lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;35.6895&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;139.6917&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 緯度、経度&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 固定長と可変長のタプル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;triple: Tuple[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 固定長（3要素）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;numbers_tuple: Tuple[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 可変長&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# セット&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;unique_ids: Set[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Optional型（値またはNone）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;maybe_name: Optional[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# strまたはNone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Union型（複数の型のいずれか）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;id_or_name: Union[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;user123&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# intまたはstr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Python 3.9以降では、組み込み型のジェネリクス表記が簡略化されました：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.9以降&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;numbers: list[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;user_info: dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;太郎&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;email&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;taro@example.com&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;coordinates: tuple[&lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;35.6895&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;139.6917&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、Python 3.10からは&lt;code&gt;Union&lt;/code&gt;型の代わりにパイプ記号（&lt;code&gt;|&lt;/code&gt;）が使えるようになりました：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.10以降&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;id_or_name: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;user123&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Union[int, str]と同等&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;maybe_name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Optional[str]と同等&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;型エイリアスの定義&lt;a href=&quot;#型エイリアスの定義&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;複雑な型ヒントを何度も書くのは面倒ですよね。そんなときは型エイリアスを使いましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Dict, List, Tuple, TypeAlias&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 型エイリアスの定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;UserId &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;UserName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Email &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# より複雑な型のエイリアス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;UserDict &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Dict[UserId, Tuple[UserName, Email]]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.10以降ではTypeAliasを使った明示的な型エイリアス定義も可能&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Coordinates: TypeAlias &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; tuple[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;users: UserDict &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;: (&lt;/span&gt;&lt;span&gt;&quot;田中太郎&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;taro@example.com&quot;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;: (&lt;/span&gt;&lt;span&gt;&quot;佐藤花子&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;hanako@example.com&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;location: Coordinates &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;35.6895&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;139.6917&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;型エイリアスを使うと、コードの可読性が向上し、型の定義を一箇所にまとめられるので、変更が必要になった場合も修正が容易になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ジェネリック型の使い方&lt;a href=&quot;#ジェネリック型の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分で定義したクラスでジェネリック型を使いたい場合は、&lt;code&gt;Generic&lt;/code&gt;クラスを継承します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Generic, TypeVar, List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 型変数の定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;T &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;T&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;K &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;K&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;V &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;V&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ジェネリッククラスの定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Box&lt;/span&gt;&lt;span&gt;(Generic[T])&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; T&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.item &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_item&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; T:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set_item&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; T&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.item &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;int_box: Box[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;str_box: Box[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Box&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;こんにちは&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 型変数に制約を付ける&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;S &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;S&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bytes&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# SはstrかbytesのみOK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process_text&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; S&lt;/span&gt;&lt;span&gt;) -&amp;gt; S:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 処理...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 境界型変数（特定のクラスのサブクラスに制限）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make_sound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Dog&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Animal&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make_sound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ワン！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;A &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;A&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bound&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;Animal)  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Animalまたはそのサブクラスのみ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_sound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;animal&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; A&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; animal.&lt;/span&gt;&lt;span&gt;make_sound&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ジェネリック型を使うと、型安全性を保ちながら柔軟なコードを書けます。特に、コレクションや汎用的なデータ構造を扱う場合に便利です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Protocolクラスの活用&lt;a href=&quot;#protocolクラスの活用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonでは「ダックタイピング」という考え方が重要です。「アヒルのように歩き、アヒルのように鳴くなら、それはアヒルである」という原則です。
&lt;code&gt;typing.Protocol&lt;/code&gt;を使うと、このダックタイピングを型ヒントで表現できます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Protocol, List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Protocolの定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Drawable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Protocol&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 実装は必要なし、メソッドのシグネチャだけ定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Protocolを実装するクラス（明示的な継承は不要）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Circle&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;radius&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.radius &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; radius&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;○ (半径: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.radius&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Rectangle&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.width &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; width&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.height &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; height&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;□ (幅: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.width&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, 高さ: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.height&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Protocolを使った関数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw_shapes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;shapes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[Drawable]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; shape &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; shapes:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;shape.&lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;shapes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;Circle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;5.0&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;Rectangle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;4.0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3.0&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;draw_shapes&lt;/span&gt;&lt;span&gt;(shapes)  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 型チェックOK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Protocol&lt;/code&gt;を使うと、クラス間の明示的な継承関係がなくても、同じインターフェースを持つクラスを型安全に扱えます。これはPythonの柔軟性を損なわずに型チェックの恩恵を受けられる素晴らしい機能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;型チェッカーの使い方&lt;a href=&quot;#型チェッカーの使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;型ヒントを書いても、Pythonのインタプリタはそれを無視します。型チェックを行うには、外部ツールを使う必要があります。最も一般的なのは&lt;code&gt;mypy&lt;/code&gt;です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# mypyのインストール&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 型チェックの実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mypy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your_script.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、以下のようなコードがあるとします：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;example.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; a &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;hello&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;world&quot;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 型エラー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;mypyで型チェックすると：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;example.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;example.py:4:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Argument&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;add&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;incompatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;str&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;int&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;example.py:4:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Argument&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;add&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;has&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;incompatible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;str&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;int&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このように、実行前に型の不一致を検出できます。
VSCodeやPyCharmなどのIDEを使っている場合は、エディタ上で直接型エラーを表示してくれるので、より効率的に開発できます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際のユースケース&lt;a href=&quot;#実際のユースケース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際のプロジェクトでの&lt;code&gt;typing&lt;/code&gt;モジュールの活用例を見てみましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. WebアプリケーションのAPI関数&lt;a href=&quot;#1-webアプリケーションのapi関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Dict, List, Optional, TypedDict, Any&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; datetime &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# TypedDictを使った辞書の型定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserData&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;TypedDict&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;email: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;created_at: datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_active: &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;profile: Optional[Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, Any]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;user_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; Optional[UserData]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# データベースからユーザー情報を取得する処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 存在しない場合はNoneを返す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_active_users&lt;/span&gt;&lt;span&gt;() -&amp;gt; List[UserData]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# アクティブなユーザーのリストを返す処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_user&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Optional[Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, Any]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; UserData:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 新しいユーザーを作成する処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. データ処理パイプライン&lt;a href=&quot;#2-データ処理パイプライン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Callable, Iterator, List, TypeVar, Generic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;T &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;T&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;U &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;U&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Pipeline&lt;/span&gt;&lt;span&gt;(Generic[T, U])&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;processor&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Callable[[T], U]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.processor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; processor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.next_pipeline: Optional[Pipeline[U, Any]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_step&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;processor&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Callable[[U], V]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;&apos;Pipeline[T, V]&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.next_pipeline &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Pipeline&lt;/span&gt;&lt;span&gt;(processor)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.next_pipeline&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; T&lt;/span&gt;&lt;span&gt;) -&amp;gt; U:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;processor&lt;/span&gt;&lt;span&gt;(data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.next_pipeline:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.next_pipeline.&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;(result)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parse_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;raw_data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; raw_data.&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;,&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filter_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [item &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; data &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; item.&lt;/span&gt;&lt;span&gt;strip&lt;/span&gt;&lt;span&gt;()]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transform_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {item: &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(item) &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; data}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# パイプラインの構築&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pipeline &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Pipeline&lt;/span&gt;&lt;span&gt;(parse_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pipeline.&lt;/span&gt;&lt;span&gt;add_step&lt;/span&gt;&lt;span&gt;(filter_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pipeline.&lt;/span&gt;&lt;span&gt;add_step&lt;/span&gt;&lt;span&gt;(transform_data)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データ処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pipeline.&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;a,b,,c,d&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(result)  &lt;/span&gt;&lt;span&gt;# {&apos;a&apos;: 1, &apos;b&apos;: 1, &apos;c&apos;: 1, &apos;d&apos;: 1}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;注意点と落とし穴&lt;a href=&quot;#注意点と落とし穴&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;typing&lt;/code&gt;モジュールを使う際の注意点をいくつか紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 循環インポートの問題&lt;a href=&quot;#1-循環インポートの問題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;型ヒントで別モジュールのクラスを参照すると、循環インポートが発生することがあります。その場合は文字列リテラルを使います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;user.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List, Optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; post &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Post  &lt;/span&gt;&lt;span&gt;# 循環インポートの可能性&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;User&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.posts: List[&lt;/span&gt;&lt;span&gt;&apos;Post&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 文字列リテラルを使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;post.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; user &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; User  &lt;/span&gt;&lt;span&gt;# 循環インポート&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Post&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;author&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;User&apos;&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;# 文字列リテラルを使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.title &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; title&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; author&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Python 3.7以降では、&lt;code&gt;from __future__ import annotations&lt;/code&gt;を使うことで、すべての型アノテーションを文字列として扱うこともできます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__future__&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; annotations&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Node&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.children: List[Node] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 循環参照でもOK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 実行時の型チェックは行われない&lt;a href=&quot;#2-実行時の型チェックは行われない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;型ヒントはあくまでヒントであり、実行時には無視されます。実行時に型チェックを行いたい場合は、自分で実装する必要があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(a, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(b, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;引数はint型である必要があります&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; a &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Any型の過剰使用&lt;a href=&quot;#3-any型の過剰使用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Any&lt;/code&gt;型は任意の型を表し、型チェックを事実上無効にします。便利ですが、過剰に使うと型ヒントの恩恵が失われます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Any, Dict&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 避けるべき例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Any&lt;/span&gt;&lt;span&gt;) -&amp;gt; Any:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 改善例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k, v &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; data.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;()]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. Python 3.5と3.6の型ヒントの違い&lt;a href=&quot;#4-python-35と36の型ヒントの違い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Python 3.5と3.6では、変数の型ヒントの書き方が異なります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Dict, List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;users &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# type: List[str]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;config &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# type: Dict[str, int]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.6以降&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;users: List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;config: Dict[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. TypedDictの部分的な更新&lt;a href=&quot;#5-typeddictの部分的な更新&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;TypedDict&lt;/code&gt;は便利ですが、部分的な更新が型チェック上難しいという問題があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; TypedDict, NotRequired&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Python 3.11以降ではNotRequiredが使える&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UserProfile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;TypedDict&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;age: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bio: NotRequired[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]  &lt;/span&gt;&lt;span&gt;# 省略可能なフィールド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 部分的な更新（型チェッカーはエラーを出す可能性あり）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update_user&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;user_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonの&lt;code&gt;typing&lt;/code&gt;モジュールは、動的型付け言語であるPythonに静的型チェックの恩恵をもたらす強力なツールです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;基本的な型ヒント（&lt;code&gt;str&lt;/code&gt;、&lt;code&gt;int&lt;/code&gt;、&lt;code&gt;float&lt;/code&gt;など）&lt;/li&gt;
&lt;li&gt;複合型（&lt;code&gt;List&lt;/code&gt;、&lt;code&gt;Dict&lt;/code&gt;、&lt;code&gt;Tuple&lt;/code&gt;、&lt;code&gt;Set&lt;/code&gt;など）&lt;/li&gt;
&lt;li&gt;特殊な型（&lt;code&gt;Optional&lt;/code&gt;、&lt;code&gt;Union&lt;/code&gt;、&lt;code&gt;Any&lt;/code&gt;など）&lt;/li&gt;
&lt;li&gt;型エイリアスによる型定義の再利用&lt;/li&gt;
&lt;li&gt;ジェネリック型による型安全な汎用コード&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Protocol&lt;/code&gt;によるダックタイピングの型付け&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mypy&lt;/code&gt;などの型チェッカーによる静的解析&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;型ヒントを活用することで、コードの可読性が向上し、バグの早期発見が可能になります。また、IDEの補完機能も強化されるため、開発効率も上がります。
Pythonの型ヒントは、静的型付け言語の厳格さと動的型付け言語の柔軟性のバランスを取った素晴らしい機能です。ぜひ、あなたのプロジェクトに取り入れてみてください！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;わぁ、`typing`モジュールってこんなに便利なんだね！特に`Protocol`の考え方は、Pythonらしい柔軟さを残しながら型安全性を高められるって素敵だね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだね！最初は型ヒントを書くのが少し面倒に感じるかもしれないけど、大きなプロジェクトになればなるほど、その価値は高まるよ。バグの早期発見や、コードの自己文書化、リファクタリングの安全性向上など、メリットは計り知れないんだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;早速、自分のプロジェクトに取り入れてみるね！ありがとう、ペンギンさん！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いつでも質問してね！Pythonの型ヒントの世界を楽しんでくれたら嬉しいよ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;冒頭と結びの会話は直したいな。気色悪い。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Cline はやっぱりスゴイ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんなに書けてしまった・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでやりたいことに注力出来るな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【モンハンワイルズ】Ryzen 9 7950X3DとRTX 4080 SUPERで公式ベンチマークを試す</title><link>https://endorphinbath.com/posts/mhwilds-benchmark-7950x3d-rtx4080-super/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mhwilds-benchmark-7950x3d-rtx4080-super/</guid><description>モンハンワイルズのPC版がサクサク動作するか確かめられる公式ベンチマークツール「モンスターハンターワイルズ ベンチマーク」を試しました。使ったチップはAMD Ryzen 9 7950X3DとNVIDIA GeForce RTX 4080 Superです。</description><pubDate>Sat, 08 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうなることやら&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;快適にプレイ出来ることを祈ります&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;モンハンワイルズのベンチマーク&lt;a href=&quot;#モンハンワイルズのベンチマーク&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「モンスターハンターワイルズ」が2025年2月28日(金)に発売します。発売に先駆けてモンスターハンターワイルズの PC 版がサクサク動作するかどうかを確かめられるベンチマークツール「モンスターハンターワイルズ ベンチマーク」が、公式から無料で公開されたみたいなので、実際に Steam からインストールして使ってみました。&lt;/p&gt;&lt;p&gt;また、2024年11月にオープンベータテスト第一回目が開かれましたが、今度、第二回目のオープンベータテストが実施されるようです。実施日程は、2月7日12時～2月10日11時59分および2月14日12時～2月17日11時59分だそうです。&lt;/p&gt;&lt;a href=&quot;https://store.steampowered.com/app/2246340/_/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://store.steampowered.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Steam：モンスターハンターワイルズ&lt;/div&gt;&lt;div&gt;荒々しく獰猛な自然が、襲い来る。 刻一刻とダイナミックにその姿を変貌させるフィールド。二面性をもつ世界に生きる、モンスターと人々の物語。 進化したハンティングアクションと、途切れることのない没入感を追求した究極の狩猟体験が、あなたを待っている。&lt;/div&gt;&lt;div&gt;store.steampowered.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://shared.fastly.steamstatic.com/store_item_assets/steam/apps/2246340/a1df989a3b439e15171dc7144c1ce13c32abcae6/capsule_616x353.jpg?t=1771382452&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.monsterhunter.com/wilds/ja-jp/benchmark/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.monsterhunter.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.monsterhunter.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.monsterhunter.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ベンチマークの実施&lt;a href=&quot;#ベンチマークの実施&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ベンチマーク設定は全てデフォルトの設定にしました。グラフィックプリセットは「ウルトラ」です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.Cf3bhltn_Z22BPBY.webp&quot; srcset=&quot;/_astro/11.Cf3bhltn_ZGA78i.webp 640w, /_astro/11.Cf3bhltn_215SEu.webp 750w, /_astro/11.Cf3bhltn_Z2f9gN1.webp 828w, /_astro/11.Cf3bhltn_Z2m00Lg.webp 1080w, /_astro/11.Cf3bhltn_Z1mOvOG.webp 1280w, /_astro/11.Cf3bhltn_juUMs.webp 1668w, /_astro/11.Cf3bhltn_Z22BPBY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;冒頭の方ではムービーが流れました。このムービーは第一回のオープンベータテストでも流れていたものと酷似しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.EdI1AmNx_Z2h2Mzl.webp&quot; srcset=&quot;/_astro/12.EdI1AmNx_2f3xuC.webp 640w, /_astro/12.EdI1AmNx_Z7rzvw.webp 750w, /_astro/12.EdI1AmNx_GunOT.webp 828w, /_astro/12.EdI1AmNx_2tLb5j.webp 1080w, /_astro/12.EdI1AmNx_Z1BfsM3.webp 1280w, /_astro/12.EdI1AmNx_54XP6.webp 1668w, /_astro/12.EdI1AmNx_Z2h2Mzl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;150～180FPS を出せています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13.JABz9Lm9_9Gxbs.webp&quot; srcset=&quot;/_astro/13.JABz9Lm9_Zif1QF.webp 640w, /_astro/13.JABz9Lm9_2pqXV7.webp 750w, /_astro/13.JABz9Lm9_Z1PNbwo.webp 828w, /_astro/13.JABz9Lm9_Z9FBWO.webp 1080w, /_astro/13.JABz9Lm9_OtQXK.webp 1280w, /_astro/13.JABz9Lm9_2vOjAT.webp 1668w, /_astro/13.JABz9Lm9_9Gxbs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;最初のムービーが終わると、プレイ画面になりました。オープンベータテストでも探索できた場所が舞台となっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/14.CT0QRr8D_1x3sfy.webp&quot; srcset=&quot;/_astro/14.CT0QRr8D_Z1oyLiy.webp 640w, /_astro/14.CT0QRr8D_1j7eue.webp 750w, /_astro/14.CT0QRr8D_284cPE.webp 828w, /_astro/14.CT0QRr8D_1dFi6h.webp 1080w, /_astro/14.CT0QRr8D_2cPM2Q.webp 1280w, /_astro/14.CT0QRr8D_Z1b0T8V.webp 1668w, /_astro/14.CT0QRr8D_1x3sfy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ワールドの奥の方までの描画もテストされていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15.C-0HQWxV_Z1f4C1E.webp&quot; srcset=&quot;/_astro/15.C-0HQWxV_Z1a2KTf.webp 640w, /_astro/15.C-0HQWxV_1xDeSx.webp 750w, /_astro/15.C-0HQWxV_2mAdeX.webp 828w, /_astro/15.C-0HQWxV_Z1yrMaV.webp 1080w, /_astro/15.C-0HQWxV_Zzhiem.webp 1280w, /_astro/15.C-0HQWxV_1739nM.webp 1668w, /_astro/15.C-0HQWxV_Z1f4C1E.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次のシーンは食事をしているシーンでした。この場面はこれから実装されていく場面なのでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16.CCMYTy8O_Z1yM4M7.webp&quot; srcset=&quot;/_astro/16.CCMYTy8O_ZvDYqG.webp 640w, /_astro/16.CCMYTy8O_2c21m6.webp 750w, /_astro/16.CCMYTy8O_Z24d96p.webp 828w, /_astro/16.CCMYTy8O_Z1SaeVo.webp 1080w, /_astro/16.CCMYTy8O_ZSYJYO.webp 1280w, /_astro/16.CCMYTy8O_MkGCk.webp 1668w, /_astro/16.CCMYTy8O_Z1yM4M7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;チーズナンがとてもとろけていてとても美味しそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/17.DNL3pO-B_18NtW1.webp&quot; srcset=&quot;/_astro/17.DNL3pO-B_21LJiB.webp 640w, /_astro/17.DNL3pO-B_ZkInHx.webp 750w, /_astro/17.DNL3pO-B_tdzCS.webp 828w, /_astro/17.DNL3pO-B_OqjMJ.webp 1080w, /_astro/17.DNL3pO-B_1NANJj.webp 1280w, /_astro/17.DNL3pO-B_Z1zfRrt.webp 1668w, /_astro/17.DNL3pO-B_18NtW1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ベンチマークの結果&lt;a href=&quot;#ベンチマークの結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、「モンスターハンターワイルズ ベンチマーク」で、 CPU に AMD Ryzen 9 7950X3D、GPU に NVIDIA GeForce RTX 4080 Super を使って、グラフィックプリセットを「ウルトラ」に設定してベンチマークを測った結果、「非常に快適にプレイできます」という結果が得られました。スコアが 25,963 、平均 FPS は 152.15 でした。&lt;/p&gt;&lt;p&gt;スコアおよび快適にプレイ出来るかどうかの指標に関しては、以下の対応になっているようです。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;スコア&lt;/th&gt;&lt;th&gt;結果コメント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;20000 ~&lt;/td&gt;&lt;td&gt;非常に快適にプレイできます&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13000 ~ 19999&lt;/td&gt;&lt;td&gt;快適にプレイできます&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10250 ~ 12999&lt;/td&gt;&lt;td&gt;問題なくプレイできます&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7000~10249&lt;/td&gt;&lt;td&gt;設定変更を推奨します&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5200~6999&lt;/td&gt;&lt;td&gt;設定変更が必要です&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;~ 5199&lt;/td&gt;&lt;td&gt;動作困難です&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/18.lsPDCaeC_1o4y6W.webp&quot; srcset=&quot;/_astro/18.lsPDCaeC_1deNU8.webp 640w, /_astro/18.lsPDCaeC_Z19gj61.webp 750w, /_astro/18.lsPDCaeC_ZkjkJA.webp 828w, /_astro/18.lsPDCaeC_14GnWF.webp 1080w, /_astro/18.lsPDCaeC_23QRTf.webp 1280w, /_astro/18.lsPDCaeC_Z1jYNhx.webp 1668w, /_astro/18.lsPDCaeC_1o4y6W.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よしよし、これでいいんだよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;発売が楽しみだな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2025年01月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202501/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202501/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にPalworldのシリーズが更新されています。自作PCの動画もありました。</description><pubDate>Fri, 07 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2025年1月に投稿した動画の一覧&lt;a href=&quot;#2025年1月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;初めて自作PCを組んだから解説してみましたぞ！：Ryzen 9 7950X3D、GeForce RTX 4080 SUPER&lt;a href=&quot;#初めて自作pcを組んだから解説してみましたぞryzen-9-7950x3dgeforce-rtx-4080-super&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/hPhqElmTZMU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく構築されるイカロス発電：太陽帆（ソーラーセイル） #52 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく構築されるイカロス発電太陽帆ソーラーセイル-52--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/RonOMYJg9hA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】メチャ速くて長く走れるべイントールで天落を散策する（永久機関）&lt;a href=&quot;#palworldメチャ速くて長く走れるべイントールで天落を散策する永久機関&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/l2EAjv17VCQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】パルソウル+60にしたテラナイト50体でボルドラゴ極をボコボコにする【ゆっくり実況】&lt;a href=&quot;#palworldパルソウル60にしたテラナイト50体でボルドラゴ極をボコボコにするゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/D6XYX5p9rAI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】何だろうこれ…試掘用オイルリグ…？？【ゆっくり実況】&lt;a href=&quot;#palworld何だろうこれ試掘用オイルリグゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/B0z4oyK2wFk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】テラナイト・オブ・ラウンズのボルドラゴボコボコ50本ノック！（ノーカット版）&lt;a href=&quot;#palworldテラナイトオブラウンズのボルドラゴボコボコ50本ノックノーカット版&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VxLDaaUNCJo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】パルソウル+60にしたベイントール50体でボルドラゴ極をボコボコにする【ゆっくり実況】&lt;a href=&quot;#palworldパルソウル60にしたベイントール50体でボルドラゴ極をボコボコにするゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Z4mGkWuqYnA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】レヴィドラ20体とテラナイト30体でボルドラゴ21本ノック！（ノーカット版）【ゆっくり実況】&lt;a href=&quot;#palworldレヴィドラ20体とテラナイト30体でボルドラゴ21本ノックノーカット版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2025/01/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dIUtfR6Xhn4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】venvを使いながら環境変数PS1を設定してプロンプトを見やすくしたい</title><link>https://endorphinbath.com/posts/python-venv-with-ps1-env/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-venv-with-ps1-env/</guid><description>Python開発時のvirtualenvの有効化時に、Bashの環境変数「PS1」でターミナルのプロンプトが白色に戻ってしまう事象を直すための方法を紹介します。</description><pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれぇ？ 戻っちゃったぞ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コイツが何かしらを捻じ曲げているな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起きているのか&lt;a href=&quot;#何が起きているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;シェル上で Bash の環境変数&lt;code&gt;PS1&lt;/code&gt;をゴニョゴニョいじると、ターミナルにおける現在の状態（プロンプト）を見やすく表示することが可能です。&lt;/p&gt;&lt;p&gt;例えば下記の画像の1行目のような感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;541&quot; height=&quot;110&quot; src=&quot;/_astro/11.DQT8SXtT_Z2f3GmB.webp&quot; srcset=&quot;/_astro/11.DQT8SXtT_Z2f3GmB.webp 541w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、 Python の開発などで使用する&lt;code&gt;venv&lt;/code&gt;による仮想環境を有効化したり無効化すると、この&lt;code&gt;PS1&lt;/code&gt;の内容が書き換わってしまい、せっかく見やすく設定した&lt;code&gt;PS1&lt;/code&gt;の内容が見づらい状態に、文字色が白色に戻ってしまいます。
そこで今回は、&lt;code&gt;venv&lt;/code&gt;使用時の環境変数&lt;code&gt;PS1&lt;/code&gt;の設定について色々やっていきます。&lt;/p&gt;&lt;p&gt;今回の設定に利用した&lt;code&gt;virtualenv&lt;/code&gt;パッケージのバージョンは、&lt;code&gt;20.28.1&lt;/code&gt;です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PS1の内容の確認&lt;a href=&quot;#ps1の内容の確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、各々の状態における環境変数&lt;code&gt;PS1&lt;/code&gt;の内容を確認します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;venv&lt;/code&gt;をアクティベートした時の環境変数&lt;code&gt;PS1&lt;/code&gt;の内容。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;\[\](.venv) \[\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ \[\]\[\]&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;venv&lt;/code&gt;を非アクティベートした時の環境変数PS1の内容。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;\[\]\[\]\[\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ \[\]\[\]\[\]&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、今回はこのような形式で&lt;code&gt;PS1&lt;/code&gt;を設定して、ターミナルの状態を表示を見やすくしたいと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] $(_current_branch)\[\033[00m\]\[\033[01;35m\]\$\[\033[00m\] &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;venv実行時に何が起きているのか&lt;a href=&quot;#venv実行時に何が起きているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、&lt;code&gt;venv&lt;/code&gt;を作成してアクティベートする時の実行コマンドはこんな感じにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;venv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.venv/bin/activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;.venv/bin/activate&lt;/code&gt;のファイルの中身はこんな感じになっていました。&lt;code&gt;PS1&lt;/code&gt;を設定している部分が見つかったので、この設定に対して何かしてあげれば良さそうです。&lt;code&gt;venv&lt;/code&gt;を&lt;code&gt;activate&lt;/code&gt;する時も&lt;code&gt;deactivate&lt;/code&gt;する時も&lt;code&gt;deactivate&lt;/code&gt;関数は実行されるみたいですね。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# This file must be used with &quot;source bin/activate&quot; *from bash*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# You cannot run it directly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deactivate&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# reset old environment variables&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PATH&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &amp;lt;--- deactivateする時に通る&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PATH&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PYTHONHOME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;PYTHONHOME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PYTHONHOME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PYTHONHOME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PYTHONHOME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Call hash to forget past commands. Without forgetting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# past commands the $PATH changes we made may not be respected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PS1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PS1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PS1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV_PROMPT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${1&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;nondestructive&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Self destruct!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deactivate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# unset irrelevant variables&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;deactivate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nondestructive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# on Windows, a path can contain colons and backslashes and has to be converted:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;OSTYPE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;cygwin&quot;&lt;/span&gt;&lt;span&gt; ] || [ &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;OSTYPE&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;msys&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# transform D:\path\to\venv to /d/path/to/venv on MSYS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# and to /cygdrive/d/path/to/venv on Cygwin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cygpath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/home/user/NotionSynchronizer/.venv&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# use the path as-is&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;home&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;NotionSynchronizer&lt;/span&gt;&lt;span&gt;/.&lt;/span&gt;&lt;span&gt;venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;_OLD_VIRTUAL_PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$PATH&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$VIRTUAL_ENV&lt;/span&gt;&lt;span&gt;/&quot;bin&quot;:&lt;/span&gt;&lt;span&gt;$PATH&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# unset PYTHONHOME if set&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# could use `if (set -u; : $PYTHONHOME) ;` in bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PYTHONHOME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PYTHONHOME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PYTHONHOME&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;unset&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PYTHONHOME&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; [ &lt;/span&gt;&lt;span&gt;-z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;VIRTUAL_ENV_DISABLE_PROMPT&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; ] ; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# &amp;lt;--- activateする時に通る&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;(.venv) &apos;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV_PROMPT&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;(.venv) &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VIRTUAL_ENV_PROMPT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Call hash to forget past commands. Without forgetting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# past commands the $PATH changes we made may not be respected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記の&lt;code&gt;.venv/bin/activate&lt;/code&gt;のファイルにおいて、どうやら&lt;code&gt;_OLD_VIRTUAL_PS1&lt;/code&gt;という Bash 環境変数の中に&lt;code&gt;venv&lt;/code&gt;を有効化する前の&lt;code&gt;PS1&lt;/code&gt;の内容が入るみたいです。
なので、今回は&lt;code&gt;edit-ps1-env&lt;/code&gt;という関数を作って、&lt;code&gt;.venv/bin/activate&lt;/code&gt;が終了した後に実行したいと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_current_branch&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;_git_branch&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;branch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--show-current&lt;/span&gt;&lt;span&gt; 2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt;) &amp;amp;&amp;amp; &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[branch: &lt;/span&gt;&lt;span&gt;$_git_branch&lt;/span&gt;&lt;span&gt;] &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;edit-ps1-env&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;_my_ps1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[\033[01;33m\]$(_current_branch)\[\033[00m\]\[\033[01;36m\]\$\[\033[00m\] &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;${1}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--activate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-a&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_OLD_VIRTUAL_PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$_my_ps1&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;_my_venv_dir&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;.venv&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;PS1&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;\[\033[01;31m\](&lt;/span&gt;&lt;span&gt;$_my_venv_dir&lt;/span&gt;&lt;span&gt;)\[\033[00m\] &quot;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;_my_ps1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:-&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;--deactivate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# nothing to do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[ERROR] invalid options: &apos;&lt;/span&gt;&lt;span&gt;${1}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;esac&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、エイリアスを作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;py-ve&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;python -m venv .venv&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;py-va&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;source .venv/bin/activate; edit-ps1-env -a;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;py-vd&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;deactivate; edit-ps1-env -d;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この状態でコマンドを実行してみます。すると、&lt;code&gt;venv&lt;/code&gt;の有効化および無効化の後の両方で、プロンプトの文字色が自分の設定したい状態になりました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;py-va&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;py-vd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;764&quot; height=&quot;161&quot; src=&quot;/_astro/21.C1aG2L2e_4CsE7.webp&quot; srcset=&quot;/_astro/21.C1aG2L2e_1fHhST.webp 640w, /_astro/21.C1aG2L2e_1CrReB.webp 750w, /_astro/21.C1aG2L2e_4CsE7.webp 764w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 Python で&lt;code&gt;venv&lt;/code&gt;を利用する際に、 Bash のプロンプトの表示色を保持するための設定方法を紹介しました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;sed&lt;/code&gt;を使って設定する方法も考えてみましたが、&lt;code&gt;.venv/bin/activate&lt;/code&gt;のファイル内にある、&lt;code&gt;venv&lt;/code&gt;のディレクトリ名が出現する場所が変わってしまうと設定が面倒なことになりそうでした。なので、&lt;code&gt;.venv/bin/activate&lt;/code&gt;の実行後に別途設定する方法がメンテしやすいと思います。&lt;/p&gt;&lt;p&gt;これで仮想環境を有効化しているかどうかを一目で確認出来るようになりました。開発体験が快適になりそうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よしよし、これでいいんだよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで捻じ曲げ直したな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Palworld】生産効率の高い拠点を作るために気を付ける10のこと</title><link>https://endorphinbath.com/posts/palworld-tips-to-productive-base/</link><guid isPermaLink="true">https://endorphinbath.com/posts/palworld-tips-to-productive-base/</guid><description>Palworldで拠点を建てる際に気を付けた方が良いコツ的なものをまとめました。設備を積み重ねて省スペースを図ったり、アイテム取り出し機で移動を楽にする方法を紹介します。</description><pubDate>Mon, 27 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;生産性・・・生産性・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;大事です。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パルワールドの拠点の作業効率を上げる。&lt;a href=&quot;#パルワールドの拠点の作業効率を上げる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パルワールドでは拠点を建てることで、冒険に必要な道具を作ったり、パルに対する経験値を取得することが出来ます。そのために、拠点内の作業の効率を向上させることで、より速くより強い敵に立ち向かえるようになります。
そこで今回は、パルワールドで拠点を運営していく際に気を付けたほうが良い事柄というかコツといったものを紹介していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. 作業適性が高いパルを働かせる。&lt;a href=&quot;#1-作業適性が高いパルを働かせる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これは言わずもがなですね。&lt;/p&gt;&lt;p&gt;とりあえず、作業適性が高いパルを働かせて、そのパルが保有するパッシブスキルに「超絶技巧」「職人気質」「社畜」「まじめ」「うぬぼれ屋」等があると、作業生産性は上がります。また、「夜行性」のパッシブスキルを持たせたり、基本的な闇属性持ちのパルは寝ないで作業し続けることが出来るので、生産性が上がることになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03.05_XqVEg_Z2qxTGh.webp&quot; srcset=&quot;/_astro/03.05_XqVEg_Z1mnLKm.webp 640w, /_astro/03.05_XqVEg_1lie2q.webp 750w, /_astro/03.05_XqVEg_2afcnQ.webp 828w, /_astro/03.05_XqVEg_2kg3Xn.webp 1080w, /_astro/03.05_XqVEg_Z1KKzSY.webp 1280w, /_astro/03.05_XqVEg_Z4q8gP.webp 1668w, /_astro/03.05_XqVEg_Z2qxTGh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04.CovwWrjE_1blOSh.webp&quot; srcset=&quot;/_astro/04.CovwWrjE_ZUfiav.webp 640w, /_astro/04.CovwWrjE_1MqHCh.webp 750w, /_astro/04.CovwWrjE_Z2sNrPe.webp 828w, /_astro/04.CovwWrjE_QXEJ0.webp 1080w, /_astro/04.CovwWrjE_1Q99Fz.webp 1280w, /_astro/04.CovwWrjE_Z1wHwvd.webp 1668w, /_astro/04.CovwWrjE_1blOSh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ただし、運搬を担当するパルに関しては、少し事情が違ってくる場合があります。&lt;/p&gt;&lt;p&gt;運搬の作業適性は、一度に持ち運ぶことが出来るアイテムの重量や数量のみに関係してくるため、その適性とは別に移動スピードが速い方がベターな時もあります。なので、運搬の作業適性や作業速度の高さよりも、パルの種族事態の移動スピードが速かったり、パッシブスキルに「神速」「走るのが得意」「すばしこい」等を積んでいる方が効率が良い場合もあったりします。そのケースは、拠点内の構造、パルが運搬するために動く量が多くなってしまう場合などが挙げられます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05.BM0yvOOs_1kxz8C.webp&quot; srcset=&quot;/_astro/05.BM0yvOOs_S765J.webp 640w, /_astro/05.BM0yvOOs_Z1to1Up.webp 750w, /_astro/05.BM0yvOOs_ZEr3yY.webp 828w, /_astro/05.BM0yvOOs_11aoYl.webp 1080w, /_astro/05.BM0yvOOs_20kSUU.webp 1280w, /_astro/05.BM0yvOOs_Z1nvMfR.webp 1668w, /_astro/05.BM0yvOOs_1kxz8C.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. パルがベッドにたどり着けないようにする。&lt;a href=&quot;#2-パルがベッドにたどり着けないようにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パルはベッドで寝る時にベッドに移動する必要があります。この移動の時間が無駄です。そのため、ベッドを壁で囲んだりして到達できないようにします。すると、パルは夜になるとその場で雑魚寝するようになります。こうすることで、ベッドへの移動が発生しなくなり、余計な移動が無くなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/08.1GHKt8-q_ZPwM7C.webp&quot; srcset=&quot;/_astro/08.1GHKt8-q_Z1Xhr0w.webp 640w, /_astro/08.1GHKt8-q_JoyMg.webp 750w, /_astro/08.1GHKt8-q_1ylx8G.webp 828w, /_astro/08.1GHKt8-q_Z19TWgT.webp 1080w, /_astro/08.1GHKt8-q_ZaJskk.webp 1280w, /_astro/08.1GHKt8-q_1vzYhO.webp 1668w, /_astro/08.1GHKt8-q_ZPwM7C.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. 農園を積み重ねる。&lt;a href=&quot;#3-農園を積み重ねる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「食料」カテゴリから建設出来る各農園は、積み重ねることが可能です。積み重ねることで拠点内のスペースを節約することが出来ます。例えば3つの農園を積み重ねても、畑の数は1つではなく3つとしてカウントされるので、ほぼ同じスペースを使って3倍の収穫量を獲得することが出来るようになります。おおよそ3つの農園を積み重ねていけば農園の作業はちゃんと回転することでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.DqN5EE7g_94o15.webp&quot; srcset=&quot;/_astro/11.DqN5EE7g_ZWhOvT.webp 640w, /_astro/11.DqN5EE7g_1KobgS.webp 750w, /_astro/11.DqN5EE7g_Z2uPYbC.webp 828w, /_astro/11.DqN5EE7g_ZaiL8c.webp 1080w, /_astro/11.DqN5EE7g_NQHNn.webp 1280w, /_astro/11.DqN5EE7g_2vcaqw.webp 1668w, /_astro/11.DqN5EE7g_94o15.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、技の実農園は積み重ねることが出来ません。（2025-01-26時点）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.DTSllWSu_Zt2baI.webp&quot; srcset=&quot;/_astro/12.DTSllWSu_ZtuCYT.webp 640w, /_astro/12.DTSllWSu_2ebmMS.webp 750w, /_astro/12.DTSllWSu_Z223MEC.webp 828w, /_astro/12.DTSllWSu_ZMplk0.webp 1080w, /_astro/12.DTSllWSu_bK8Bz.webp 1280w, /_astro/12.DTSllWSu_1S5AeI.webp 1668w, /_astro/12.DTSllWSu_Zt2baI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. 採掘場も積み重ねる。&lt;a href=&quot;#4-採掘場も積み重ねる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「生産」カテゴリから建設出来る「金属採掘場」や「石炭採掘場」等も積み重ねることが可能です。また、このような採掘場では大量の鉱石が採掘されることになるので、その鉱石をチェストに運搬する人手が足りず採掘場の保持上限に達して、追加の鉱石を採掘することが出来なくなりがちです。そのため、鉱石を保持出来る採掘場を増やして溜められる鉱石の余地を増やした方が、採掘作業がストップしてしまうまでの時間を延ばすことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15.D0uRnxYZ_2u6o9w.webp&quot; srcset=&quot;/_astro/15.D0uRnxYZ_Z2lIT2P.webp 640w, /_astro/15.D0uRnxYZ_lW6JW.webp 750w, /_astro/15.D0uRnxYZ_1aT56n.webp 828w, /_astro/15.D0uRnxYZ_2aIe0f.webp 1080w, /_astro/15.D0uRnxYZ_Z1UipR7.webp 1280w, /_astro/15.D0uRnxYZ_ZdWXeX.webp 1668w, /_astro/15.D0uRnxYZ_2u6o9w.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. ライン工場も積み重ねられる。&lt;a href=&quot;#5-ライン工場も積み重ねられる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もうこの際、どの設備が積み上げることが可能でどの設備が不可能なのかを確かめる気概があっても良いのかもしれません。&lt;/p&gt;&lt;p&gt;「武器ライン工場」や「金貨製造工場」等も縦に積み重ねることが可能です。2段ぐらいの高さが限度でしょうか。アヌビスとかはそこまで体躯のサイズが大きくないので手が届かないかもしれません。
例えば、「武器ライン工場II」を積むのであれば、アンティークなタオルラック等の上に設置するとちょうど良いです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/17.Co4435bJ_Z1U1J73.webp&quot; srcset=&quot;/_astro/17.Co4435bJ_ZQlyKi.webp 640w, /_astro/17.Co4435bJ_1Qkr2u.webp 750w, /_astro/17.Co4435bJ_Z2oTIq1.webp 828w, /_astro/17.Co4435bJ_Z2eoTgk.webp 1080w, /_astro/17.Co4435bJ_Z1fepjK.webp 1280w, /_astro/17.Co4435bJ_r62io.webp 1668w, /_astro/17.Co4435bJ_Z1U1J73.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/18.B6FUi7Y5_1JeGvs.webp&quot; srcset=&quot;/_astro/18.B6FUi7Y5_Z2nd9bX.webp 640w, /_astro/18.B6FUi7Y5_ksQAO.webp 750w, /_astro/18.B6FUi7Y5_19pOWf.webp 828w, /_astro/18.B6FUi7Y5_1pQwmb.webp 1080w, /_astro/18.B6FUi7Y5_2p21iK.webp 1280w, /_astro/18.B6FUi7Y5_ZXOES2.webp 1668w, /_astro/18.B6FUi7Y5_1JeGvs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. 作業指示台を設置する。&lt;a href=&quot;#6-作業指示台を設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;作業指示台を設置すると、パルをどの設備に専任して働かせるか、パルにどの役割の仕事に専任させるか、等を設定することが出来るようになります。この設備があるのとないのとでは、拠点の運営の快適さに雲泥の差が生まれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/19.D9Gw3M4X_Z1qPN3c.webp&quot; srcset=&quot;/_astro/19.D9Gw3M4X_Z29shtx.webp 640w, /_astro/19.D9Gw3M4X_ydIjf.webp 750w, /_astro/19.D9Gw3M4X_1naGEF.webp 828w, /_astro/19.D9Gw3M4X_Z1KdXct.webp 1080w, /_astro/19.D9Gw3M4X_ZL3tfT.webp 1280w, /_astro/19.D9Gw3M4X_UgXmf.webp 1668w, /_astro/19.D9Gw3M4X_Z1qPN3c.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/20.oPbOmkIW_Z1dsQYb.webp&quot; srcset=&quot;/_astro/20.oPbOmkIW_ZaWga5.webp 640w, /_astro/20.oPbOmkIW_2wIJCH.webp 750w, /_astro/20.oPbOmkIW_Z1IvpON.webp 828w, /_astro/20.oPbOmkIW_Z1wQ28s.webp 1080w, /_astro/20.oPbOmkIW_ZxFxbS.webp 1280w, /_astro/20.oPbOmkIW_18DTqg.webp 1668w, /_astro/20.oPbOmkIW_Z1dsQYb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「固定アサイン管理」のメニューでは、パルをどの設備に専任して働かせるかについて指示を出すことが出来ます。この設備を建てられるようになるまでは、アサインしたい設備にアサインするパルをいちいち投げつけに行く必要がありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21.V-31uLb9_24HUmY.webp&quot; srcset=&quot;/_astro/21.V-31uLb9_Z1Hwhrr.webp 640w, /_astro/21.V-31uLb9_109Ill.webp 750w, /_astro/21.V-31uLb9_1O6GGL.webp 828w, /_astro/21.V-31uLb9_1KkKdH.webp 1080w, /_astro/21.V-31uLb9_Z2kFSDE.webp 1280w, /_astro/21.V-31uLb9_ZDlr1v.webp 1668w, /_astro/21.V-31uLb9_24HUmY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「作業指示」のメニューでは、パルにどの役割の仕事に専任させるかについて指示を出すことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22.Dok1a7be_Z3mYJt.webp&quot; srcset=&quot;/_astro/22.Dok1a7be_Z17GHGS.webp 640w, /_astro/22.Dok1a7be_1zYi5T.webp 750w, /_astro/22.Dok1a7be_2oVgrk.webp 828w, /_astro/22.Dok1a7be_ZmK9SK.webp 1080w, /_astro/22.Dok1a7be_Bpk2O.webp 1280w, /_astro/22.Dok1a7be_2iJLEX.webp 1668w, /_astro/22.Dok1a7be_Z3mYJt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. 「その他」カテゴリの設備を設置する。&lt;a href=&quot;#7-その他カテゴリの設備を設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「その他」カテゴリの設備は出来る限りすぐに設置しましょう。設置することで各作業の効率が上昇します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/26.BNegIPJn_Z1Ef8VH.webp&quot; srcset=&quot;/_astro/26.BNegIPJn_ZbNW28.webp 640w, /_astro/26.BNegIPJn_2vR3KE.webp 750w, /_astro/26.BNegIPJn_Z1Jn6GQ.webp 828w, /_astro/26.BNegIPJn_Z1XCj5Y.webp 1080w, /_astro/26.BNegIPJn_ZYrO9p.webp 1280w, /_astro/26.BNegIPJn_GRCsJ.webp 1668w, /_astro/26.BNegIPJn_Z1Ef8VH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/27.BK3av3Ug_1X3EiH.webp&quot; srcset=&quot;/_astro/27.BK3av3Ug_1SodR7.webp 640w, /_astro/27.BK3av3Ug_Zt6T92.webp 750w, /_astro/27.BK3av3Ug_kP4co.webp 828w, /_astro/27.BK3av3Ug_1DFu9q.webp 1080w, /_astro/27.BK3av3Ug_Z2rl9HV.webp 1280w, /_astro/27.BK3av3Ug_ZK0H5M.webp 1668w, /_astro/27.BK3av3Ug_1X3EiH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それから、「インフラ」カテゴリからα波発生装置とβ波発生装置も、建設出来るようになったらすぐに設置した方が良いです。SAN値の減少の遅延、もしくは作業スピードの上昇を見込むことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/28.DmLT4eIi_ffJk.webp&quot; srcset=&quot;/_astro/28.DmLT4eIi_Z17zzkh.webp 640w, /_astro/28.DmLT4eIi_1A6qsv.webp 750w, /_astro/28.DmLT4eIi_2p3oNV.webp 828w, /_astro/28.DmLT4eIi_Zj7ToW.webp 1080w, /_astro/28.DmLT4eIi_F2zwC.webp 1280w, /_astro/28.DmLT4eIi_2mn29L.webp 1668w, /_astro/28.DmLT4eIi_ffJk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/29.CxWs6WvL_1lvVvP.webp&quot; srcset=&quot;/_astro/29.CxWs6WvL_1xazuD.webp 640w, /_astro/29.CxWs6WvL_ZOkxvv.webp 750w, /_astro/29.CxWs6WvL_Znza5.webp 828w, /_astro/29.CxWs6WvL_128Lmy.webp 1080w, /_astro/29.CxWs6WvL_21jgj8.webp 1280w, /_astro/29.CxWs6WvL_Z1mxpRE.webp 1668w, /_astro/29.CxWs6WvL_1lvVvP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/30.CQJPStQY_Zrep9C.webp&quot; srcset=&quot;/_astro/30.CQJPStQY_Z1WuC4w.webp 640w, /_astro/30.CQJPStQY_KbnIg.webp 750w, /_astro/30.CQJPStQY_1z8m4G.webp 828w, /_astro/30.CQJPStQY_ZKBziT.webp 1080w, /_astro/30.CQJPStQY_dxTCF.webp 1280w, /_astro/30.CQJPStQY_1TSmfO.webp 1668w, /_astro/30.CQJPStQY_Zrep9C.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8. アイテム取り出し機を使う。&lt;a href=&quot;#8-アイテム取り出し機を使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この設備を利用することで、拠点間のアイテムの移動が容易になります。その拠点内にあるプライベートチェストを除いた全てのチェストの中に保管されているアイテムを、個数を指定して取り出すことが出来る設備です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33.DenaStcO_Z1Suwax.webp&quot; srcset=&quot;/_astro/33.DenaStcO_2fNRHe.webp 640w, /_astro/33.DenaStcO_Z6GfiU.webp 750w, /_astro/33.DenaStcO_HfI2v.webp 828w, /_astro/33.DenaStcO_Z2cRGjO.webp 1080w, /_astro/33.DenaStcO_Z1dHcnf.webp 1280w, /_astro/33.DenaStcO_sCfeT.webp 1668w, /_astro/33.DenaStcO_Z1Suwax.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/34.S-pqTi3c_Z5fQrX.webp&quot; srcset=&quot;/_astro/34.S-pqTi3c_29mpdv.webp 640w, /_astro/34.S-pqTi3c_Zd8HMD.webp 750w, /_astro/34.S-pqTi3c_ANfxM.webp 828w, /_astro/34.S-pqTi3c_ZoD1Bf.webp 1080w, /_astro/34.S-pqTi3c_zwskk.webp 1280w, /_astro/34.S-pqTi3c_2gQTWt.webp 1668w, /_astro/34.S-pqTi3c_Z5fQrX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、金属インゴットを拠点Aから拠点Bに移動したい場合、拠点Aのパルボックスの近くにアイテム取り出し機を置くことで拠点A内の全てのチェストの中に入っている金属インゴットを一度に取り出すことが可能になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/35.DgNgO9bk_1LNswP.webp&quot; srcset=&quot;/_astro/35.DgNgO9bk_Z52B93.webp 640w, /_astro/35.DgNgO9bk_Z2rxJac.webp 750w, /_astro/35.DgNgO9bk_Z1CAKNL.webp 828w, /_astro/35.DgNgO9bk_1sqiny.webp 1080w, /_astro/35.DgNgO9bk_2rAMk8.webp 1280w, /_astro/35.DgNgO9bk_ZVfSQE.webp 1668w, /_astro/35.DgNgO9bk_1LNswP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/36.DA7wpmLg_Z1NxTmH.webp&quot; srcset=&quot;/_astro/36.DA7wpmLg_Z119dIt.webp 640w, /_astro/36.DA7wpmLg_1GwM4j.webp 750w, /_astro/36.DA7wpmLg_2vtKpJ.webp 828w, /_astro/36.DA7wpmLg_Z27V4vY.webp 1080w, /_astro/36.DA7wpmLg_Z18Kzzp.webp 1280w, /_astro/36.DA7wpmLg_xyR2J.webp 1668w, /_astro/36.DA7wpmLg_Z1NxTmH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして拠点Bでは、金属インゴットを一時的に入れておくチェストをパルボックスの近くに設置します。さらに、金属インゴットを格納しておきたい別のチェストの近くに、アイテム取り出し機を置きます。こうすることで、先程の一時的に金属インゴットを入れたチェストから金属インゴットを取り出して、その金属インゴット保管用のチェストに即座に収納することが可能になります。この方法で、拠点間にて特に重いアイテムの移動を簡便にすることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37.BklkuwMn_XGlh3.webp&quot; srcset=&quot;/_astro/37.BklkuwMn_HoGJI.webp 640w, /_astro/37.BklkuwMn_Z1E6qgq.webp 750w, /_astro/37.BklkuwMn_ZP9rU0.webp 828w, /_astro/37.BklkuwMn_Ejb7L.webp 1080w, /_astro/37.BklkuwMn_1DtF4l.webp 1280w, /_astro/37.BklkuwMn_Z1Jn17r.webp 1668w, /_astro/37.BklkuwMn_XGlh3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38.BGobuedZ_ZaepWx.webp&quot; srcset=&quot;/_astro/38.BGobuedZ_1ub3hS.webp 640w, /_astro/38.BGobuedZ_ZRk4Ig.webp 750w, /_astro/38.BGobuedZ_Z3n6mP.webp 828w, /_astro/38.BGobuedZ_ZtBA6O.webp 1080w, /_astro/38.BGobuedZ_uxSOK.webp 1280w, /_astro/38.BGobuedZ_2bSlrT.webp 1668w, /_astro/38.BGobuedZ_ZaepWx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9. 商人を設置する。&lt;a href=&quot;#9-商人を設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;フィールドの各地にいる商人を捕まえて、拠点内に設置することで、増えすぎてしまったアイテムを売ることで処分出来るようになります。商人は攻撃すると指名手配されてしまいますが、飛行ライド用のパルで上空高くに逃げてしばらく待てば指名手配が消えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/40.DNlRVYRz_2wjsmf.webp&quot; srcset=&quot;/_astro/40.DNlRVYRz_qr6Yn.webp 640w, /_astro/40.DNlRVYRz_Z1V411L.webp 750w, /_astro/40.DNlRVYRz_Z1772Fl.webp 828w, /_astro/40.DNlRVYRz_2cVicX.webp 1080w, /_astro/40.DNlRVYRz_Z1S5lEo.webp 1280w, /_astro/40.DNlRVYRz_ZbJT2f.webp 1668w, /_astro/40.DNlRVYRz_2wjsmf.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こうして捕まえた商人が拠点内にいることによって、アイテムをスムーズに処分出来るようになります。いずれ、経験値集めのために釘などを大量に生産するようになると思いますが、その重い釘を拠点内で処分出来て便利になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41.CwQ34u6d_23SCU2.webp&quot; srcset=&quot;/_astro/41.CwQ34u6d_JwX3G.webp 640w, /_astro/41.CwQ34u6d_Z1BX9Ws.webp 750w, /_astro/41.CwQ34u6d_ZN1bB2.webp 828w, /_astro/41.CwQ34u6d_1JvsKK.webp 1080w, /_astro/41.CwQ34u6d_Z2lvb6B.webp 1280w, /_astro/41.CwQ34u6d_ZEaIts.webp 1668w, /_astro/41.CwQ34u6d_23SCU2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/42.Buu_7Gu5_Z2oI5X4.webp&quot; srcset=&quot;/_astro/42.Buu_7Gu5_Z1mkaIV.webp 640w, /_astro/42.Buu_7Gu5_1llP3Q.webp 750w, /_astro/42.Buu_7Gu5_2aiNph.webp 828w, /_astro/42.Buu_7Gu5_2m5RGA.webp 1080w, /_astro/42.Buu_7Gu5_Z1IULaL.webp 1280w, /_astro/42.Buu_7Gu5_Z2AjxC.webp 1668w, /_astro/42.Buu_7Gu5_Z2oI5X4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、この商人の近くにアイテム取り出し機を設置しておくことで、グラップリングガンを使ったりして重いアイテム（例えば釘）を大量に運ぶ必要がなくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43.Cm8RdQWF_27PUqa.webp&quot; srcset=&quot;/_astro/43.Cm8RdQWF_Zynnk0.webp 640w, /_astro/43.Cm8RdQWF_29iCsM.webp 750w, /_astro/43.Cm8RdQWF_Z26VwYI.webp 828w, /_astro/43.Cm8RdQWF_1NsKgS.webp 1080w, /_astro/43.Cm8RdQWF_Z2hxSAt.webp 1280w, /_astro/43.Cm8RdQWF_ZAdqXk.webp 1668w, /_astro/43.Cm8RdQWF_27PUqa.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10. 原油抽出機は油田に2つ設置可能。&lt;a href=&quot;#10-原油抽出機は油田に2つ設置可能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原油抽出機は、1つの油田のノードに2基設置することが可能です。ctrlキーを押しながらやってみると、設置することが可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/47.BY89I6JE_ZstVlh.webp&quot; srcset=&quot;/_astro/47.BY89I6JE_Z1ivw4m.webp 640w, /_astro/47.BY89I6JE_1patIq.webp 750w, /_astro/47.BY89I6JE_2e7s4Q.webp 828w, /_astro/47.BY89I6JE_ZLR6uy.webp 1080w, /_astro/47.BY89I6JE_cinr1.webp 1280w, /_astro/47.BY89I6JE_1SCP4a.webp 1668w, /_astro/47.BY89I6JE_ZstVlh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;より綺麗に原油抽出機を設置出来るとこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/48.CwqfgBNR_ZHmydB.webp&quot; srcset=&quot;/_astro/48.CwqfgBNR_Z1t0bUS.webp 640w, /_astro/48.CwqfgBNR_1eFNQT.webp 750w, /_astro/48.CwqfgBNR_23CMdk.webp 828w, /_astro/48.CwqfgBNR_Z11JImS.webp 1080w, /_astro/48.CwqfgBNR_Z2zeqj.webp 1280w, /_astro/48.CwqfgBNR_1DKdbP.webp 1668w, /_astro/48.CwqfgBNR_ZHmydB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パルワールドで拠点を作っていく時のコツ的なものを紹介しました。拠点内の作業の効率性を上げることで、より難しいダンジョンに挑めるようになったり、そうして拠点が成熟しきった後でもパルの経験値の取得スピードを上昇させることが出来ます。拠点の効率を上げることで、より快適にパルワールドをプレイ出来るようにしていきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/81.B08M57Y4_Z1Rn48B.webp&quot; srcset=&quot;/_astro/81.B08M57Y4_1AOvOC.webp 640w, /_astro/81.B08M57Y4_ZKFBbw.webp 750w, /_astro/81.B08M57Y4_3gm9T.webp 828w, /_astro/81.B08M57Y4_Z2bKehS.webp 1080w, /_astro/81.B08M57Y4_Z1czJlj.webp 1280w, /_astro/81.B08M57Y4_tJHgP.webp 1668w, /_astro/81.B08M57Y4_Z1Rn48B.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Palworldを快適に&lt;a href=&quot;#palworldを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4f93sC8&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4f93sC8&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3WDMeX7&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;超軽量ワイヤレスゲーミングマウス ATK Blazing Sky F1 Ultimate 重さ約38g 最大ポーリングレート8000Hz F1 ULTIMATE (ホワイト)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3WDMeX7&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49tkLfQ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49tkLfQ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/40Agq6x&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;IODATA モニター MiniLED ゲーミング 27インチ 180Hz 1ms WQHD AHVAパネル 非光沢 広色域 ブラック 無輝点保証対応 (量子ドット/HDR1000/HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-LDQ271JAB&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/40Agq6x&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;生産性・・・生産性・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで沢山経験値が入りそうか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Cloud】Cloud Shell EditorでClineを使ってみる</title><link>https://endorphinbath.com/posts/gcp-shell-editor-using-cline/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gcp-shell-editor-using-cline/</guid><description>VSCodeの拡張機能であるClineがOpen VSX内にあるみたいなので、Google Cloudのエディタで使ってみました。</description><pubDate>Sun, 26 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、これは便利ですなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、コイツ、動くぞ・・・っ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Shell EditorでClineを使う。&lt;a href=&quot;#cloud-shell-editorでclineを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloudで無料で使えるオンラインエディタである「Cloud Shell Editor」で、現在流行りのコーディング用途としてAIエージェントを利用した拡張機能である「Cline」が利用できたので、その使用感をまとめてみたという記事です。「Cline」は、よくVisual Studio Codeの拡張機能として、紹介されています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Cloud Shell Editorでは、「Eclipse Theia」というエディタを利用した開発環境を構築することが出来ます。このIDEでは、OpenVSXに登録されている拡張機能のパッケージをインストールして利用することが可能であり、そのパッケージの中に「Cline」が登録されていたので使ってみました。正直、すばらしすぎるツールでした。それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Clineのインストール&lt;a href=&quot;#clineのインストール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Clineをインストールしていきたいと思います。&lt;/p&gt;&lt;p&gt;と、その前に・・・、これから導入するパッケージが本当にあのClineなのかどうかを確認しました。&lt;/p&gt;&lt;p&gt;当初は、Web記事でちょくちょく「Cline」というワードを扱ったものが散見されていたので、そのClineのロゴには見覚えがあったのですが、cloud Shell上の拡張機能としてのClineのロゴはこんなイメージになっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;700&quot; src=&quot;/_astro/11.sTZ46v0B_Z1RE3Fg.webp&quot; srcset=&quot;/_astro/11.sTZ46v0B_Z1RE3Fg.webp 400w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれ・・・、ちょっと違う・・・？&lt;/p&gt;&lt;p&gt;そこで、この拡張機能をOpenVSX上で調べてみて、本当に巷で話題になっているClineと同じものなのかどうかを確認してみました。&lt;/p&gt;&lt;p&gt;OpenVSXのリポジトリの場所は&lt;a href=&quot;https://open-vsx.org/extension/saoudrizwan/claude-dev&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;で、そこから遷移できたGitHubのリポジトリは&lt;a href=&quot;https://github.com/cline/cline&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;でした。デベロッパーの名前は同じみたいですね・・・。&lt;/p&gt;&lt;p&gt;ということで・・・、OpenVSX上に登録されているClineは、よく巷で話題になっているClineと同じパッケージであることが確認できました！　不審なパッケージをインストールしたくないですからね。&lt;/p&gt;&lt;p&gt;それでは、Cloud Shell Editor上にClineをインストールしていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;983&quot; height=&quot;693&quot; src=&quot;/_astro/12.B5-X8r6F_Z2eBiGH.webp&quot; srcset=&quot;/_astro/12.B5-X8r6F_1yi94w.webp 640w, /_astro/12.B5-X8r6F_Z25NEgG.webp 750w, /_astro/12.B5-X8r6F_ZdHGdu.webp 828w, /_astro/12.B5-X8r6F_Z2eBiGH.webp 983w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インストールに少し時間が掛かりましたが、無事にインストール出来ると、このようにClineのアイコンがサイドバーに表示されて、そのアイコンをクリックすると「Hi, I’m Cline」のメニューが表示されます。&lt;/p&gt;&lt;p&gt;ここで自分が利用したい大規模言語モデルのAPIを選択して、Clineを使用することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;525&quot; src=&quot;/_astro/13.glbGTk5N_Z1SEQYC.webp&quot; srcset=&quot;/_astro/13.glbGTk5N_Z1SEQYC.webp 407w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Clineを使ってみる。&lt;a href=&quot;#clineを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではインストールも済んだことなので、Clineを使ってみたいと思います。&lt;/p&gt;&lt;p&gt;今回は「OpenAI」を選択してOpenAIのAPIキーを入力して「Let’s go!」をクリックします。使用できるAIモデルはこの他にも、Anthropic、OpenRouter、DeepSeek、Google Gemini、GCP Vertex AI、AWS Bedrock、Ollamaなどがあります。（2025-01-26時点。）
&lt;img loading=&quot;lazy&quot; width=&quot;459&quot; height=&quot;474&quot; src=&quot;/_astro/21.DBgYwn02_1gCTGL.webp&quot; srcset=&quot;/_astro/21.DBgYwn02_1gCTGL.webp 459w&quot; /&gt;&lt;/p&gt;&lt;p&gt;無事にレッツゴーできれば、「What can I do for you?」のメニューが表示されます。ここからAIエージェントに対して指示を出すことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;461&quot; height=&quot;1043&quot; src=&quot;/_astro/22.DXPjguve_Z4pfLb.webp&quot; srcset=&quot;/_astro/22.DXPjguve_Z4pfLb.webp 461w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしClineに指示を出す前に、「Custom Instruction」を設定していきます。「- 日本語で回答して。」と指示を出しておきます。今回使ったモデルは、添付の画像上では「gpt-4o」となっていますが、「gpt-4o-mini」を使いました。&lt;/p&gt;&lt;p&gt;Clineを使用する上で掛かる金額は、インプットに&lt;code&gt;$5.00/million&lt;/code&gt;、アウトプットに&lt;code&gt;$15.00/million&lt;/code&gt;らしいです。最大アウトプット長は4096トークン。
&lt;img loading=&quot;lazy&quot; width=&quot;458&quot; height=&quot;592&quot; src=&quot;/_astro/23.ekhUx781_1JnNkv.webp&quot; srcset=&quot;/_astro/23.ekhUx781_1JnNkv.webp 458w&quot; /&gt;&lt;/p&gt;&lt;p&gt;指示を出します。まずはテストコードを書くように依頼してみました。
&lt;img loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;541&quot; src=&quot;/_astro/24.TWyKO_Ox_ZEa4BW.webp&quot; srcset=&quot;/_astro/24.TWyKO_Ox_ZEa4BW.webp 456w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、Clineがファイルへの書き込みの許可を依頼してくるので、その許可をするとテストコードを書き始めました。このコードを書いている途中に、画面を動かしてしまうと途中で処理が中断したり動かなくなったりしました。なので、Clineによる処理中はエディタは操作せずに静観した方が良さそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1417&quot; height=&quot;794&quot; src=&quot;/_astro/25.DHgaajxW_1tcpFc.webp&quot; srcset=&quot;/_astro/25.DHgaajxW_Z3qKR0.webp 640w, /_astro/25.DHgaajxW_14SC35.webp 750w, /_astro/25.DHgaajxW_Zg2lpn.webp 828w, /_astro/25.DHgaajxW_1nYjL1.webp 1080w, /_astro/25.DHgaajxW_2pkPFc.webp 1280w, /_astro/25.DHgaajxW_1tcpFc.webp 1417w&quot; /&gt;&lt;/p&gt;&lt;p&gt;コードが書き終わると、書く前のファイルの状態との差分を表示して、そのコードの修正を反映するかどうかを質問してきます。反映するように回答すれば無事に反映されるというわけでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1369&quot; height=&quot;794&quot; src=&quot;/_astro/26.BAkquL2G_Z1DDQSR.webp&quot; srcset=&quot;/_astro/26.BAkquL2G_ZC00Xz.webp 640w, /_astro/26.BAkquL2G_Fn6WH.webp 750w, /_astro/26.BAkquL2G_1WuwUw.webp 828w, /_astro/26.BAkquL2G_1BFLSU.webp 1080w, /_astro/26.BAkquL2G_4hdbs.webp 1280w, /_astro/26.BAkquL2G_Z1DDQSR.webp 1369w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、反映されたテストコードを実行することも可能です。実行するように許可をすれば実際にテストを走らせて、その際に発生したエラーに基づいてさらにテストコードを修正したりもしてくれました。なんて有能なんだ・・・。&lt;/p&gt;&lt;p&gt;実行を拒否して自分で実行してカバレッジを確認することも可能です。その際に表示されたエラーメッセージを添えてClineに指示を出せば、その際にもテストコードの修正をしてくれそうでした。
&lt;img loading=&quot;lazy&quot; width=&quot;443&quot; height=&quot;552&quot; src=&quot;/_astro/27.IT8E1o2z_Z27lOOW.webp&quot; srcset=&quot;/_astro/27.IT8E1o2z_Z27lOOW.webp 443w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;使用感&lt;a href=&quot;#使用感&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まるで魔法のようにコードをサクサクと書いてくれそうなClineですが、開発者側が意図しないような挙動を起こすこともあったりします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;GPT-4o-miniで使った金額&lt;a href=&quot;#gpt-4o-miniで使った金額&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回のClineの試用では、GPT-4o-miniを使っておおよそ$0.11ほどの利用料が掛かりました。実際にコーディングしていた時間は5時間ぐらいでした。ClineをGPT-4o-miniで使用する際の予算感は、大体それぐらいのボリュームです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Clineによる処理中はエディタを触らない。&lt;a href=&quot;#clineによる処理中はエディタを触らない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これに関しては先程も少し書きました。&lt;/p&gt;&lt;p&gt;AI がファイルを修正をしたり追記する場合、この作業中にエディタ上で他のファイルを開いていたりすると正しく差分が実装されず、全くもって正しくないコードが生成されてしまいます。その誤ったコードで編集内容をファイルに反映してしまうと、元に戻すのは困難だと思われます。Gitにコミットした直後であればすぐに戻せそうですが、Clineを使う場合は、エディタを静観するのと、コード修正後には少しまめにコミットする方が良さそうです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;既存のコードと重複したコードを追記することがある。&lt;a href=&quot;#既存のコードと重複したコードを追記することがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回はClineに対してPythonスクリプトの修正作業を主に依頼しましたが、その修正結果を見てみると、既存のファイル内にて実装されていたimport句やdef句の部分をダブって追記していることがありました。まあ、その部分は修正内容を反映した後に消せばいいわけですが、そういう現象も起きたりします。こういった部分は、もしかしたらAIモデルによる部分もあるかもしれません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Clineが永遠に修正し続けることがある。&lt;a href=&quot;#clineが永遠に修正し続けることがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Clineは、ファイルに対して修正を施した後にその修正内容を実際にファイルに反映するかどうかを質問されます。その際に、「Reject」つまり拒否することが出来るわけですが、その後に再びClineが同じファイルに修正作業を始めて、再びそのファイル修正内容を反映するかどうかを質問してきたりします。この修正内容も拒否したら再度また同じファイルに修正を施して・・・といった具合で、Clineがずーっと修正作業を行う現象が起こることがあります。この現象が発生すると、おそらく永遠にClineが修正作業を実行し続けるため、API料金が嵩み続けることになります。全く同じ内容で修正することもあるので、API料金の無駄遣いになります。&lt;/p&gt;&lt;p&gt;この現象が起きた場合には、Clineのメニュー画面の上部に「✕」ボタンがあるので、そこをクリックしてClineとのやり取りを強制終了しましょう。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事では、Google Cloud Shell上でAIエージェントClineを利用した際の使用感をまとめた記事でした。&lt;/p&gt;&lt;p&gt;おかしな挙動を起こすこともある「Cline」ですが、基本的にはコードを光の速さで記述してくれて、かなり素晴らしいコーディングアシスタントでした。Cloud Shell Editorでは、Google Geminiを使ったコーディングアシスタントも利用できますが、正直言ってそのGeminiアシスタントよりもClineの方が使いやすくて、正しい実装を行ってくれているという所感を持ちました。このClineがオートコンプリート機能が働いてくれたりしたらさらに便利になりそうですが、そこはGemini Code Assistによるオートコンプリートを使っているのが現状です。（しかし、Geminiのオートコンプリートもとても助かっていますが。）&lt;/p&gt;&lt;p&gt;これからさらにコーディングの快適さが向上するのかと考えると、とても楽しみにさせてくれたClineでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PC作業のお供に&lt;a href=&quot;#pc作業のお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G 8000Hz 左右対称 PRO X SUPERLIGHT 2 ワイヤレス ゲーミングマウス G-PPD-004WL-BKd 44K DPI 8K ポーリングレート 軽量 60g LIGHTFORCE ハイブリッドスイッチ LIGHTSPEED USB Type-C 充電 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional Classic 英語配列／白&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なるほど、現状はこんな感じなんだな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあでもかなり便利だよこれ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Vertex AI】パルワールドのパルのステータスをOCRして表にしたい</title><link>https://endorphinbath.com/posts/vertexai-generating-palworld-status-table/</link><guid isPermaLink="true">https://endorphinbath.com/posts/vertexai-generating-palworld-status-table/</guid><description>Vertex AIのGemini APIとGoogle Colabolatoryで、Palworldのパルのステータス画面のスクショをOCRしてテーブル形式にまとめる方法の紹介です。</description><pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;厳選パルを沢山作ったなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それをリレーションで一覧にしてみよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どのパルが個体値に関して優秀なんだろうか&lt;a href=&quot;#どのパルが個体値に関して優秀なんだろうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;同じパルが沢山いる時に気になりました。&lt;/p&gt;&lt;p&gt;Palworld において、パルの個体値って調査ツールなるものが存在しますけど、それをゲーム内で一体ずついちいち確認するのは手間ですし、それをいちいちメモするのは手間です。 Web 上でも調査ツールなるものが存在しますが、そのためにゲーム画面に載っている数値をいちいちブラウザ上で入力するのも一苦労です。&lt;/p&gt;&lt;p&gt;まあ、 Mod が既に存在するかもしれませんが、今回はこれから Palworld 以外にも使えるように、以下のようなツールを作っていきたいと思います。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Google ドライブにゲーム内のキャラクターのスクショを保存。&lt;/li&gt;
&lt;li&gt;そのスクショを Google Colabolatory から Vertex AI API に送って OCR してもらう。そしてリレーションを作ってもらう。&lt;/li&gt;
&lt;li&gt;その作成したリレーションを Notion ページ内の新しいブロックの中に載せてもらう。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Google ドライブに置くとなると、 Google Apps Script （GAS）でも良さそうですが、今回は Google Colabolatory を利用することにします。その理由としては、 GAS の実行可能時間が短いためです。公式の閾値の掲載によると、およそ6分です。（あと、 Python の SDK を使う方が楽。）&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/apps-script/guides/services/quotas?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google サービスの割り当て | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;Apps Script 内の Google サービスの 1 日の割り当てと制限を確認して、スクリプトが中断なく実行されるようにします。&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、可能なのかどうかを検証。&lt;a href=&quot;#まず可能なのかどうかを検証&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Vertex AI Studio上で動画をOCR出来るのか？&lt;a href=&quot;#vertex-ai-studio上で動画をocr出来るのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最初に、動画を OCR させてキャラクターの能力を一覧にすることは可能なのかどうかを検証していきたいと思います。&lt;/p&gt;&lt;p&gt;今回使う動画のイメージとしては、このようなパルのステータス表示を切り替える操作をスクリーンレコードしたものになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2400&quot; height=&quot;1080&quot; src=&quot;/_astro/11.CsY46Acf_1F7KbS.webp&quot; srcset=&quot;/_astro/11.CsY46Acf_1ScPq5.webp 640w, /_astro/11.CsY46Acf_25Y7UR.webp 750w, /_astro/11.CsY46Acf_nqogp.webp 828w, /_astro/11.CsY46Acf_NrUC.webp 1080w, /_astro/11.CsY46Acf_1jqm9F.webp 1280w, /_astro/11.CsY46Acf_1ueHxA.webp 1668w, /_astro/11.CsY46Acf_1G2d9f.webp 2048w, /_astro/11.CsY46Acf_1F7KbS.webp 2400w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まずは、 Google Cloud の Vertex AI Studio 上で動画をアップロード出来るかどうかを試してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;2543&quot; height=&quot;1264&quot; src=&quot;/_astro/12.CAZOXuqg_ZFSzfj.webp&quot; srcset=&quot;/_astro/12.CAZOXuqg_Z16Js5W.webp 640w, /_astro/12.CAZOXuqg_2jwo0B.webp 750w, /_astro/12.CAZOXuqg_2qG0TH.webp 828w, /_astro/12.CAZOXuqg_Z10uVRo.webp 1080w, /_astro/12.CAZOXuqg_ZHtXL9.webp 1280w, /_astro/12.CAZOXuqg_Gk7Eo.webp 1668w, /_astro/12.CAZOXuqg_hoc0c.webp 2048w, /_astro/12.CAZOXuqg_ZFSzfj.webp 2543w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回 OCR したい動画のサイズは 32MB ぐらいです。アップロード出来ないので、 Google ドライブに配置してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;801&quot; height=&quot;359&quot; src=&quot;/_astro/13.DsjVGWTA_ZUDfY9.webp&quot; srcset=&quot;/_astro/13.DsjVGWTA_Z2midcF.webp 640w, /_astro/13.DsjVGWTA_Z1637Rt.webp 750w, /_astro/13.DsjVGWTA_ZUDfY9.webp 801w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google ドライブに配置した mp4 ファイルを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1140&quot; height=&quot;707&quot; src=&quot;/_astro/14.CizbVggo_210Bzq.webp&quot; srcset=&quot;/_astro/14.CizbVggo_11Om2U.webp 640w, /_astro/14.CizbVggo_Z1Q0KaN.webp 750w, /_astro/14.CizbVggo_Zlh7q0.webp 828w, /_astro/14.CizbVggo_ZCaktS.webp 1080w, /_astro/14.CizbVggo_210Bzq.webp 1140w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2025-01-07時点では、 Vertex AI などのGeminiを使った動画の OCR には以下の拡張子が利用出来るようです。 Google 公式ページに掲載されていました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;video/mp4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/mpeg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/mov&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/avi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/x-flv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/mpg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/webm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/wmv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;video/3gpp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/image-understanding?hl=th&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/googledevai/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google AI for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Gemini generateContent API | Google AI for Developers&lt;/div&gt;&lt;div&gt;เริ่มต้นสร้างด้วยความสามารถแบบหลายโมดัลของ Gemini ใน Gemini API&lt;/div&gt;&lt;div&gt;ai.google.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ai.google.dev/static/site-assets/images/vision.png?hl=th&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;32MB ぐらいの動画を選択したら、「ファイルが大きすぎるため、メディアを追加できません。メディアファイルは 7MB 以下にする必要があります。」と表示されて、添付することが出来ませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1443&quot; height=&quot;565&quot; src=&quot;/_astro/15.Br_ZglDK_Z1u5oQE.webp&quot; srcset=&quot;/_astro/15.Br_ZglDK_1Qmukv.webp 640w, /_astro/15.Br_ZglDK_1dbYG2.webp 750w, /_astro/15.Br_ZglDK_292cOi.webp 828w, /_astro/15.Br_ZglDK_Z1PiO2I.webp 1080w, /_astro/15.Br_ZglDK_1OyICK.webp 1280w, /_astro/15.Br_ZglDK_Z1u5oQE.webp 1443w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google AI Studio 上で動画をOCR出来るのか？&lt;a href=&quot;#google-ai-studio-上で動画をocr出来るのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、 Google AI Studio 上で動画を添付出来るかどうかを確かめてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;2552&quot; height=&quot;1195&quot; src=&quot;/_astro/16.DZqVotdT_ZVtcDb.webp&quot; srcset=&quot;/_astro/16.DZqVotdT_Z358q7.webp 640w, /_astro/16.DZqVotdT_QJEt9.webp 750w, /_astro/16.DZqVotdT_1HxLuB.webp 828w, /_astro/16.DZqVotdT_DCE7A.webp 1080w, /_astro/16.DZqVotdT_Z1E3Iz5.webp 1280w, /_astro/16.DZqVotdT_Z2pJM2b.webp 1668w, /_astro/16.DZqVotdT_4KV0G.webp 2048w, /_astro/16.DZqVotdT_ZVtcDb.webp 2552w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Vertex AI Studio と同様に、Google ドライブに配置した mp4 ファイルを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1782&quot; height=&quot;1109&quot; src=&quot;/_astro/17.DRvSje3N_Z1CqOgv.webp&quot; srcset=&quot;/_astro/17.DRvSje3N_Z29YVi7.webp 640w, /_astro/17.DRvSje3N_vOUOD.webp 750w, /_astro/17.DRvSje3N_B0k58.webp 828w, /_astro/17.DRvSje3N_ZDv9HB.webp 1080w, /_astro/17.DRvSje3N_2r3WPO.webp 1280w, /_astro/17.DRvSje3N_Z1rQB4t.webp 1668w, /_astro/17.DRvSje3N_Z1CqOgv.webp 1782w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、添付することが出来ました。そして、プロンプトに、下記の文面を添えて、生成してもらいました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;この動画から以下のキャラクターのステータスを読み取って、 Markdown のテーブル形式にして。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;KNIGHT_OF_01 KNIGHT_OF_02 KNIGHT_OF_03 KNIGHT_OF_04 KNIGHT_OF_05 KNIGHT_OF_06 KNIGHT_OF_07 KNIGHT_OF_08 KNIGHT_OF_09 KNIGHT_OF_10 KNIGHT_OF_11 KNIGHT_OF_12 KNIGHT_OF_13 KNIGHT_OF_14 KNIGHT_OF_15 KNIGHT_OF_16 KNIGHT_OF_17 KNIGHT_OF_18 KNIGHT_OF_19 KNIGHT_OF_20 KNIGHT_OF_21 KNIGHT_OF_22 KNIGHT_OF_23 KNIGHT_OF_24 KNIGHT_OF_25 KNIGHT_OF_26 KNIGHT_OF_27 KNIGHT_OF_28 KNIGHT_OF_29 KNIGHT_OF_30 KNIGHT_OF_31 KNIGHT_OF_32 KNIGHT_OF_33 KNIGHT_OF_34 KNIGHT_OF_35 KNIGHT_OF_36 KNIGHT_OF_37 KNIGHT_OF_38 KNIGHT_OF_39 KNIGHT_OF_40 KNIGHT_OF_41 KNIGHT_OF_42 KNIGHT_OF_43 KNIGHT_OF_44 KNIGHT_OF_45 KNIGHT_OF_46 KNIGHT_OF_47 KNIGHT_OF_48 KNIGHT_OF_49 KNIGHT_OF_50&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;生成に使用したAIモデルは、&lt;code&gt;Gemni 2.0 Flash Experimental&lt;/code&gt;です。&lt;/p&gt;&lt;p&gt;プロンプトを送ると、パル（テラナイト）のステータス情報がリレーション形式で出力されました。
&lt;img loading=&quot;lazy&quot; width=&quot;2007&quot; height=&quot;845&quot; src=&quot;/_astro/18.BDI5Mioi_s3hzD.webp&quot; srcset=&quot;/_astro/18.BDI5Mioi_Lz1bx.webp 640w, /_astro/18.BDI5Mioi_Z1w6vsu.webp 750w, /_astro/18.BDI5Mioi_f97xU.webp 828w, /_astro/18.BDI5Mioi_fJ5LL.webp 1080w, /_astro/18.BDI5Mioi_Z19XJhp.webp 1280w, /_astro/18.BDI5Mioi_107meo.webp 1668w, /_astro/18.BDI5Mioi_s3hzD.webp 2007w&quot; /&gt;&lt;/p&gt;&lt;p&gt;成功です！・・・と言いたいところですが、一部のステータスのパラメータが足りません。&lt;/p&gt;&lt;p&gt;そこで追加のプロンプトとして、下記の内容を送ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下のステータスも書き加えて。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Heart Passive Skill 1 Passive Skill 2 Passive Skill 3 Passive Skill 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし・・・、「申し訳ございません。ご要望のステータスは画像から直接読み取ることができないため、表に追加することができません。」と返されてしまいました。動画だとOCRするのはまだ難しいようですね・・・。学習させれば行けなさそうもないですが。
&lt;img loading=&quot;lazy&quot; width=&quot;1960&quot; height=&quot;297&quot; src=&quot;/_astro/19.BJD3C9Ts_NtIgX.webp&quot; srcset=&quot;/_astro/19.BJD3C9Ts_121fD5.webp 640w, /_astro/19.BJD3C9Ts_9QeP3.webp 750w, /_astro/19.BJD3C9Ts_Z1YTaMF.webp 828w, /_astro/19.BJD3C9Ts_c30ff.webp 1080w, /_astro/19.BJD3C9Ts_Zl0Mhy.webp 1280w, /_astro/19.BJD3C9Ts_Z2bMB6O.webp 1668w, /_astro/19.BJD3C9Ts_NtIgX.webp 1960w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google AI Studio上で画像をOCR出来るのか？&lt;a href=&quot;#google-ai-studio上で画像をocr出来るのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、先程から使っている動画から一体ずつスクショを撮って、その画像をアップロードして生成AIにデータを抽出してもらおうと思います。まあ、今回は 52 体のパルなのでスクショぐらいであれば労力的に問題ないです。
&lt;img loading=&quot;lazy&quot; width=&quot;1103&quot; height=&quot;751&quot; src=&quot;/_astro/20.BBuRnMS0_Z1Kotpj.webp&quot; srcset=&quot;/_astro/20.BBuRnMS0_ZkIxKy.webp 640w, /_astro/20.BBuRnMS0_12wQHf.webp 750w, /_astro/20.BBuRnMS0_Z2gwI3Q.webp 828w, /_astro/20.BBuRnMS0_Z2tjjhE.webp 1080w, /_astro/20.BBuRnMS0_Z1Kotpj.webp 1103w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google AI Studio で、画像をアップロードしてから、下記のプロンプトを与えます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;この画像から以下のキャラクターのステータスを読み取って、Markdownのテーブル形式にして。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Level Heart Attack Defense Work Speed Passive Skill 1 Passive Skill 2 Passive Skill 3 Passive Skill 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、まだ物足りない部分がありました・・・。この後に追加プロンプトも与えましたが、どうしても読み取ることが出来ないステータスがありました。この時のAIモデルも、&lt;code&gt;Gemni 2.0 Flash Experimental&lt;/code&gt;です。
&lt;img loading=&quot;lazy&quot; width=&quot;2071&quot; height=&quot;976&quot; src=&quot;/_astro/21.CQ1dJ5-r_2ryTEN.webp&quot; srcset=&quot;/_astro/21.CQ1dJ5-r_1fEOKE.webp 640w, /_astro/21.CQ1dJ5-r_ZLBLAl.webp 750w, /_astro/21.CQ1dJ5-r_1SBK50.webp 828w, /_astro/21.CQ1dJ5-r_ZfFQkw.webp 1080w, /_astro/21.CQ1dJ5-r_Z1IPNMC.webp 1280w, /_astro/21.CQ1dJ5-r_15EaAb.webp 1668w, /_astro/21.CQ1dJ5-r_2nWiNL.webp 2048w, /_astro/21.CQ1dJ5-r_2ryTEN.webp 2071w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Vertex AI Studio 上で画像をOCR出来るのか？&lt;a href=&quot;#vertex-ai-studio-上で画像をocr出来るのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、 Vertex AI Studio 上で画像の OCR が可能なのかどうかを確かめます。&lt;/p&gt;&lt;p&gt;画像は、動画と違って問題なくアップロードできました。下記の文面を記載して送りました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;この画像から以下のキャラクターのステータスを読み取って、Markdownのテーブル形式にして。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Level Heart Attack Defense Work Speed Passive Skill 1 Passive Skill 2 Passive Skill 3 Passive Skill 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると、今回は上手く行きました。こちらが指示したパラメータを全て読み取ってリレーション形式でまとめることが出来ています。この時に生成に使用したAIモデルも、&lt;code&gt;gemini-2.0-flash-exp&lt;/code&gt;です。&lt;code&gt;Gemni 2.0 Flash Experimental&lt;/code&gt;と同じものです。&lt;/p&gt;&lt;p&gt;なぜ同じモデルで結果が異なるのかは分かりませんが、プロンプト内のトークンの順番は違ったので、そこが関係あるかもしれません。Google AI Studio上では、画像を示すトークンが指示文の前に来ていましたが、 Vertex AI Studio 上では、画像を示すトークンを指示文の後ろに配置して、成功することが出来ました。うーんまあ、この事は実際に API 経由でプロンプトする際の参考にしておくことします。
&lt;img loading=&quot;lazy&quot; width=&quot;2540&quot; height=&quot;1126&quot; src=&quot;/_astro/22.BlwcmAiT_Z1Cn9v.webp&quot; srcset=&quot;/_astro/22.BlwcmAiT_Z2bEg2e.webp 640w, /_astro/22.BlwcmAiT_Z1XJSxR.webp 750w, /_astro/22.BlwcmAiT_Z17NGxP.webp 828w, /_astro/22.BlwcmAiT_1t58iL.webp 1080w, /_astro/22.BlwcmAiT_Z2enz0k.webp 1280w, /_astro/22.BlwcmAiT_Z1fhRiX.webp 1668w, /_astro/22.BlwcmAiT_ZYnPqw.webp 2048w, /_astro/22.BlwcmAiT_Z1Cn9v.webp 2540w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleドライブにゲーム内のキャラクターのスクショを保存。&lt;a href=&quot;#googleドライブにゲーム内のキャラクターのスクショを保存&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、画像を OCR することが可能なことは分かったので、実際に Gemini API を叩いて、 Notion API でデータを載せるところまで作ってみたいと思います。&lt;/p&gt;&lt;p&gt;まずは Gemini にプロンプトするための画像のトークンを作る部分を作ります。 Google ドライブにはこのようにパルのステータスが映っているスクショをアップロードしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2527&quot; height=&quot;1257&quot; src=&quot;/_astro/31.BjkEIyiE_sPbFU.webp&quot; srcset=&quot;/_astro/31.BjkEIyiE_1vTsif.webp 640w, /_astro/31.BjkEIyiE_Z80Op8.webp 750w, /_astro/31.BjkEIyiE_ZQcv2.webp 828w, /_astro/31.BjkEIyiE_ZIoAFf.webp 1080w, /_astro/31.BjkEIyiE_24EaGz.webp 1280w, /_astro/31.BjkEIyiE_efDOS.webp 1668w, /_astro/31.BjkEIyiE_Z20DMl1.webp 2048w, /_astro/31.BjkEIyiE_sPbFU.webp 2527w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Colabolatoryで一括OCR処理を実装する。&lt;a href=&quot;#google-colabolatoryで一括ocr処理を実装する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Pythonコードを作る。&lt;a href=&quot;#pythonコードを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして Google Colabolatory を使って、 OCR 処理の部分まで組み立てます。&lt;/p&gt;&lt;p&gt;まずは、以下の処理で Vertex AI のGemini APIを使って OCR することが出来ます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; genai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.genai &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; types&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; base64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.colab &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; userdata&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_file_to_base64&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_path, &lt;/span&gt;&lt;span&gt;&quot;rb&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; image_file:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; base64.&lt;/span&gt;&lt;span&gt;b64encode&lt;/span&gt;&lt;span&gt;(image_file.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; data.&lt;/span&gt;&lt;span&gt;decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_chunks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;img_path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; userdata.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gcloud_project_id&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;# like env in Google Colab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LOCATION&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; userdata.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gcloud_location&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;# like env in Google Colab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; genai.&lt;/span&gt;&lt;span&gt;Client&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;vertexai&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;LOCATION&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;b64_image &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;image_file_to_base64&lt;/span&gt;&lt;span&gt;(img_path)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; types.Part.&lt;/span&gt;&lt;span&gt;from_bytes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;base64.&lt;/span&gt;&lt;span&gt;b64decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;UklGRha......eqQAAA=&quot;&quot;&quot;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;image/webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; types.Part.&lt;/span&gt;&lt;span&gt;from_bytes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;base64.&lt;/span&gt;&lt;span&gt;b64decode&lt;/span&gt;&lt;span&gt;(b64_image),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;image/webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;textsi_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;以下のカラムを持ったテーブル形式で出力して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Character Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Level&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Heart&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Attack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Defense&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Work Speed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 4&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prompt &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;この画像からキャラクターのステータスを読み取って、Markdownのテーブル形式にして。&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-2.0-flash-exp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;contents &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;types.&lt;/span&gt;&lt;span&gt;Content&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image1,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;types.Part.&lt;/span&gt;&lt;span&gt;from_text&lt;/span&gt;&lt;span&gt;(prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generate_content_config &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; types.&lt;/span&gt;&lt;span&gt;GenerateContentConfig&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;top_p&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0.95&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;max_output_tokens&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;8192&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;response_modalities&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;TEXT&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;safety_settings&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_HATE_SPEECH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_DANGEROUS_CONTENT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_SEXUALLY_EXPLICIT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_HARASSMENT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;system_instruction&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[types.Part.&lt;/span&gt;&lt;span&gt;from_text&lt;/span&gt;&lt;span&gt;(textsi_1)],&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; chunk &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; client.models.&lt;/span&gt;&lt;span&gt;generate_content_stream&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; model,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;contents&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; contents,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; generate_content_config,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(chunk)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunk, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; chunks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;images &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-045338.webp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;parts &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;md_tables &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; img_file_path &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; images:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_chunks&lt;/span&gt;&lt;span&gt;(img_file_path)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunks)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(chunks)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunks[i].candidates[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].content.parts[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;parts.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(chunks[i].candidates[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].content.parts[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;md_tables.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(parts))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;--------------------------------------&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(md_tables)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleドライブをマウントする。&lt;a href=&quot;#googleドライブをマウントする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、 Google Colabolatory から Google ドライブのファイルにアクセス出来るようにします。&lt;/p&gt;&lt;p&gt;Google Colabolator yのフォルダボタンから Google ドライブをマウントします。
&lt;img loading=&quot;lazy&quot; width=&quot;1305&quot; height=&quot;694&quot; src=&quot;/_astro/41.lVoJoOs9_29Mwhz.webp&quot; srcset=&quot;/_astro/41.lVoJoOs9_Z15X3L3.webp 640w, /_astro/41.lVoJoOs9_2qVAKT.webp 750w, /_astro/41.lVoJoOs9_Z1Cw2nf.webp 828w, /_astro/41.lVoJoOs9_Z29Cdr7.webp 1080w, /_astro/41.lVoJoOs9_1p9ziX.webp 1280w, /_astro/41.lVoJoOs9_29Mwhz.webp 1305w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1418&quot; height=&quot;730&quot; src=&quot;/_astro/42.upPLbr0D_Z1Upk3N.webp&quot; srcset=&quot;/_astro/42.upPLbr0D_Zzm3PH.webp 640w, /_astro/42.upPLbr0D_2dtm4V.webp 750w, /_astro/42.upPLbr0D_B9sjr.webp 828w, /_astro/42.upPLbr0D_1c8Eye.webp 1080w, /_astro/42.upPLbr0D_2ftp71.webp 1280w, /_astro/42.upPLbr0D_Z1Upk3N.webp 1418w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google ドライブをマウントすると、ずらーっとフォルダが表示されますので、今回 OCR に使用するフォルダを開いて、画像の縦三点リーダーから&lt;code&gt;Copy path&lt;/code&gt;でパスを取得してコードに貼り付けます。（先程掲載したコードの&lt;code&gt;images&lt;/code&gt;に該当。）
&lt;img loading=&quot;lazy&quot; width=&quot;1577&quot; height=&quot;947&quot; src=&quot;/_astro/43.DcMKnJ7p_oCzm9.webp&quot; srcset=&quot;/_astro/43.DcMKnJ7p_ZoqRqe.webp 640w, /_astro/43.DcMKnJ7p_Z28dYsI.webp 750w, /_astro/43.DcMKnJ7p_Z72jSA.webp 828w, /_astro/43.DcMKnJ7p_PFDti.webp 1080w, /_astro/43.DcMKnJ7p_ZGY5bj.webp 1280w, /_astro/43.DcMKnJ7p_oCzm9.webp 1577w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;認証を完了させる。&lt;a href=&quot;#認証を完了させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これではまだ Vertex AI の API は利用できません。認証を済ませる必要があります。&lt;/p&gt;&lt;p&gt;Google Cloud コンソール上で Vertex AI の自由形式の画面を表示すると、&lt;code&gt;コードを取得&lt;/code&gt;できるボタンがあるので、そこをクリックすると、シェルから Vertex AI API の認証を行うためのコマンドを確認することが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-cloud-aiplatform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application-default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;今回使うのは Google Colabolatory ですので、以下のコマンドでノートブック上に Shell を実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;google-cloud-aiplatform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application-default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記の&lt;code&gt;gcloud&lt;/code&gt;コマンドを実行すると、 OAuth2 の認証における認可用URLが発行されるので、その URL をブラウザで叩いて、認可してもらいます。認可されると、アクセスコードが以下のページに貼られているのでそのコードを先程&lt;code&gt;gcloud auth&lt;/code&gt;を実行したシェル上で入力します。（ Google Colabolatory の場合、以下のページを開けていればアクセスコードを入力出来るかと思います。）
&lt;img loading=&quot;lazy&quot; width=&quot;1315&quot; height=&quot;797&quot; src=&quot;/_astro/46.CY7K5Byx_Z1ijX9N.webp&quot; srcset=&quot;/_astro/46.CY7K5Byx_hYoXH.webp 640w, /_astro/46.CY7K5Byx_Z20OcDT.webp 750w, /_astro/46.CY7K5Byx_CWqh8.webp 828w, /_astro/46.CY7K5Byx_Zun5Kx.webp 1080w, /_astro/46.CY7K5Byx_tYcu2.webp 1280w, /_astro/46.CY7K5Byx_Z1ijX9N.webp 1315w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アクセスコードを入力すると、また別の&lt;code&gt;gcloud&lt;/code&gt;コマンドで任意の Google Cloud プロジェクトをクォータプロジェクトとして登録しろという指令が出てきたので、そのコマンドをシェル上で叩いて登録します。既に Google Cloud プロジェクトを登録してあれば不要かもしれません。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application-default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set-quota-project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;project-id&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そのクォータプロジェクトを登録するためのコマンドについては、こちらに公式の解説がありました。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/auth/application-default/set-quota-project&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud auth application-default set-quota-project | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;これで数分待てば、認証が完了していると思います。認証作業が完了すると、サービスアカウントの JSON ファイルも出力されるのでプライベートな場所で保管しておきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;OCRを実行するのだが・・・。&lt;a href=&quot;#ocrを実行するのだが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;認証も済んだので、 Vertex AI API による OCR を実行していきます。ちゃんと実行できれば、以下のように Gemini から返ってきたものらしき生成内容を表示したり出来るようになりますね。今回検証に使用しているテラナイトのパッシブスキルが画像の中から取得できていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;946&quot; src=&quot;/_astro/51.CIX1D912_ty2Rk.webp&quot; srcset=&quot;/_astro/51.CIX1D912_Z2oNUfi.webp 640w, /_astro/51.CIX1D912_1x4uQz.webp 750w, /_astro/51.CIX1D912_Z27hhJ5.webp 828w, /_astro/51.CIX1D912_Z20Rbcm.webp 1080w, /_astro/51.CIX1D912_ZWggGq.webp 1280w, /_astro/51.CIX1D912_18bXDi.webp 1668w, /_astro/51.CIX1D912_ty2Rk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、あれっ・・・。&lt;/p&gt;&lt;p&gt;なんかエラーで止まっている・・・。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;ClientError: 429 RESOURCE_EXHAUSTED. {‘error’: {‘code’: 429, ‘message’: ‘Online prediction request quota exceeded for gemini-experimental. Please try again later with backoff.’, ‘status’: ‘RESOURCE_EXHAUSTED’}}&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;そうです、この時に使った AI モデルは&lt;code&gt;gemini-2.0-flash-exp&lt;/code&gt;だったのですが、リクエスト頻度が細かすぎると利用制限の閾値に達してしまうようです。&lt;/p&gt;&lt;p&gt;なので、&lt;code&gt;time.sleep(10)&lt;/code&gt;とかをリクエストごとに入れてみたりしたのですが、それでも&lt;code&gt;gemini-2.0-flash-exp&lt;/code&gt;では相変わらず&lt;code&gt;429 RESOURCE_EXHAUSTED.&lt;/code&gt;が表示されて画像の OCR が 10 件も進まないで処理が止まってしまいました。&lt;/p&gt;&lt;p&gt;それではそうですね・・・。AIモデルも変えるしかない・・・？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「gemini-1.5-flash-002」は如実に力不足。&lt;a href=&quot;#gemini-15-flash-002は如実に力不足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;というわけで、 AI モデルを&lt;code&gt;gemini-1.5-flash-002&lt;/code&gt;に変えてリトライです。&lt;/p&gt;&lt;p&gt;しかし、 OCR 処理を進めていくと不穏な出力が途中で垣間見られます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1208&quot; height=&quot;609&quot; src=&quot;/_astro/56.Cne63HK2_15RYKv.webp&quot; srcset=&quot;/_astro/56.Cne63HK2_ZGr5WE.webp 640w, /_astro/56.Cne63HK2_3mq7O.webp 750w, /_astro/56.Cne63HK2_ZXUX2y.webp 828w, /_astro/56.Cne63HK2_asKBX.webp 1080w, /_astro/56.Cne63HK2_15RYKv.webp 1208w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Passive Skill 3とPassive Skill 4は、画像から明確に読み取れませんでした。」・・・？&lt;/p&gt;&lt;p&gt;うーん、&lt;code&gt;gemini-2.0-flash-exp&lt;/code&gt;だったら読み取れないなんてことは起きなかったのに・・・。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gemini-1.5-flash-002&lt;/code&gt;だと今回の OCR 処理を任せるには力不足が否めませんね・・・。&lt;/p&gt;&lt;p&gt;というわけで次は、&lt;code&gt;gemini-1.5-pro-002&lt;/code&gt;に任せてみることにしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1307&quot; height=&quot;660&quot; src=&quot;/_astro/57.CqXYcDw1_6mOFi.webp&quot; srcset=&quot;/_astro/57.CqXYcDw1_Zb3I8W.webp 640w, /_astro/57.CqXYcDw1_ZgGDA.webp 750w, /_astro/57.CqXYcDw1_Z12z5NX.webp 828w, /_astro/57.CqXYcDw1_Z1FpbsJ.webp 1080w, /_astro/57.CqXYcDw1_ZBVlVn.webp 1280w, /_astro/57.CqXYcDw1_6mOFi.webp 1307w&quot; /&gt;&lt;/p&gt;&lt;p&gt;フム、なんか補足やら解説やらが余計ですが、それはプロンプトによって抑制することは出来るでしょう。&lt;/p&gt;&lt;p&gt;&lt;code&gt;gemini-1.5-pro-002&lt;/code&gt;なら、 OCR 処理は上手く行けそうです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生成したMarkdownをNotionに貼り付ける&lt;a href=&quot;#生成したmarkdownをnotionに貼り付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、&lt;code&gt;gemini-1.5-pro-002&lt;/code&gt;に Markdown のテーブル形式でパルのステータスの表を生成してもらったので、そのテーブルを Notion に貼り付けて、リレーションにしたいと思います。&lt;/p&gt;&lt;p&gt;実際に Notion に貼り付けてみるとこんな感じです。プロンプトから生成したリレーションをさらに ChatGPT にまとめてもらった結果を Notion に貼り付けました。これで加工できそうな形にはなっていそう。
&lt;img loading=&quot;lazy&quot; width=&quot;1311&quot; height=&quot;1116&quot; src=&quot;/_astro/61.DXQilvPU_VOiKI.webp&quot; srcset=&quot;/_astro/61.DXQilvPU_Z1w5FvW.webp 640w, /_astro/61.DXQilvPU_15mumR.webp 750w, /_astro/61.DXQilvPU_Z1qAEyB.webp 828w, /_astro/61.DXQilvPU_Z2lkwru.webp 1080w, /_astro/61.DXQilvPU_1rHFfW.webp 1280w, /_astro/61.DXQilvPU_VOiKI.webp 1311w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして少しスプレッドシートで編集して・・・、
ChatGPT がまとめたテーブルを編集した結果はこんな感じです。4匹分のパルが漏れていますね・・・。たぶん、 ChatGPT が漏らしたな・・・？　まだまだですね・・・。（ちなみに使ったモデルは&lt;code&gt;GPT-4o&lt;/code&gt;です。）
&lt;img loading=&quot;lazy&quot; width=&quot;1129&quot; height=&quot;1053&quot; src=&quot;/_astro/62.BfGBKubB_Z1Boy9b.webp&quot; srcset=&quot;/_astro/62.BfGBKubB_1y2mkm.webp 640w, /_astro/62.BfGBKubB_QOMx2.webp 750w, /_astro/62.BfGBKubB_ZWl0W7.webp 828w, /_astro/62.BfGBKubB_4hqYs.webp 1080w, /_astro/62.BfGBKubB_Z1Boy9b.webp 1129w&quot; /&gt;&lt;/p&gt;&lt;p&gt;目視で抜けているのを確認して、編集した結果はこんな感じになりました。漏れている部分はありましたが、かなり手作業の量は減らせたので、とても有用なツールを作ることは出来た気がします。&lt;/p&gt;&lt;p&gt;このようなパルワールドのパルのステータス画面のスクショから・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2527&quot; height=&quot;1257&quot; src=&quot;/_astro/31.BjkEIyiE_sPbFU.webp&quot; srcset=&quot;/_astro/31.BjkEIyiE_1vTsif.webp 640w, /_astro/31.BjkEIyiE_Z80Op8.webp 750w, /_astro/31.BjkEIyiE_ZQcv2.webp 828w, /_astro/31.BjkEIyiE_ZIoAFf.webp 1080w, /_astro/31.BjkEIyiE_24EaGz.webp 1280w, /_astro/31.BjkEIyiE_efDOS.webp 1668w, /_astro/31.BjkEIyiE_Z20DMl1.webp 2048w, /_astro/31.BjkEIyiE_sPbFU.webp 2527w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下のようなリレーション形式でステータスをまとめることが出来ました。&lt;/p&gt;
































































































































































































































































































































































































































































































































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Character Name&lt;/th&gt;&lt;th&gt;Level&lt;/th&gt;&lt;th&gt;Heart&lt;/th&gt;&lt;th&gt;Attack&lt;/th&gt;&lt;th&gt;Defense&lt;/th&gt;&lt;th&gt;Work Speed&lt;/th&gt;&lt;th&gt;Passive Skill 1&lt;/th&gt;&lt;th&gt;Passive Skill 2&lt;/th&gt;&lt;th&gt;Passive Skill 3&lt;/th&gt;&lt;th&gt;Passive Skill 4&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_01&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;10287&lt;/td&gt;&lt;td&gt;2266&lt;/td&gt;&lt;td&gt;1813&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_02&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8643&lt;/td&gt;&lt;td&gt;2323&lt;/td&gt;&lt;td&gt;1616&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_03&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8627&lt;/td&gt;&lt;td&gt;1969&lt;/td&gt;&lt;td&gt;1742&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_04&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8923&lt;/td&gt;&lt;td&gt;2075&lt;/td&gt;&lt;td&gt;1581&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_05&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8889&lt;/td&gt;&lt;td&gt;2098&lt;/td&gt;&lt;td&gt;1792&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_06&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8028&lt;/td&gt;&lt;td&gt;1969&lt;/td&gt;&lt;td&gt;1616&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_07&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;8783&lt;/td&gt;&lt;td&gt;2358&lt;/td&gt;&lt;td&gt;1658&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_08&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;8020&lt;/td&gt;&lt;td&gt;2028&lt;/td&gt;&lt;td&gt;1665&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_09&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;8783&lt;/td&gt;&lt;td&gt;2066&lt;/td&gt;&lt;td&gt;1729&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_10&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;7611&lt;/td&gt;&lt;td&gt;1995&lt;/td&gt;&lt;td&gt;1558&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_10&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;10067&lt;/td&gt;&lt;td&gt;2257&lt;/td&gt;&lt;td&gt;1717&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_11&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;7767&lt;/td&gt;&lt;td&gt;1994&lt;/td&gt;&lt;td&gt;1662&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_12&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;7412&lt;/td&gt;&lt;td&gt;2358&lt;/td&gt;&lt;td&gt;1579&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_13&lt;/td&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;8502&lt;/td&gt;&lt;td&gt;2323&lt;/td&gt;&lt;td&gt;1602&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_14&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7329&lt;/td&gt;&lt;td&gt;1998&lt;/td&gt;&lt;td&gt;1629&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_15&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8456&lt;/td&gt;&lt;td&gt;2085&lt;/td&gt;&lt;td&gt;1789&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_16&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7894&lt;/td&gt;&lt;td&gt;2039&lt;/td&gt;&lt;td&gt;1576&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_17&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;8123&lt;/td&gt;&lt;td&gt;2286&lt;/td&gt;&lt;td&gt;1592&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_18&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8765&lt;/td&gt;&lt;td&gt;2145&lt;/td&gt;&lt;td&gt;1720&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_19&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;8643&lt;/td&gt;&lt;td&gt;1917&lt;/td&gt;&lt;td&gt;1635&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_20&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7329&lt;/td&gt;&lt;td&gt;2089&lt;/td&gt;&lt;td&gt;1508&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_21&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7329&lt;/td&gt;&lt;td&gt;2377&lt;/td&gt;&lt;td&gt;1434&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_22&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;7355&lt;/td&gt;&lt;td&gt;2435&lt;/td&gt;&lt;td&gt;1558&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_23&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8286&lt;/td&gt;&lt;td&gt;2417&lt;/td&gt;&lt;td&gt;1809&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_24&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8905&lt;/td&gt;&lt;td&gt;2026&lt;/td&gt;&lt;td&gt;1815&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_25&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8414&lt;/td&gt;&lt;td&gt;2228&lt;/td&gt;&lt;td&gt;1819&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_26&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8414&lt;/td&gt;&lt;td&gt;2071&lt;/td&gt;&lt;td&gt;1712&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_27&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;7676&lt;/td&gt;&lt;td&gt;2291&lt;/td&gt;&lt;td&gt;1669&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_28&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;9063&lt;/td&gt;&lt;td&gt;2032&lt;/td&gt;&lt;td&gt;1712&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_29&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;9063&lt;/td&gt;&lt;td&gt;2430&lt;/td&gt;&lt;td&gt;1696&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_30&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;8543&lt;/td&gt;&lt;td&gt;2469&lt;/td&gt;&lt;td&gt;1741&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_31&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8044&lt;/td&gt;&lt;td&gt;2066&lt;/td&gt;&lt;td&gt;1640&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_32&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;7676&lt;/td&gt;&lt;td&gt;2340&lt;/td&gt;&lt;td&gt;1831&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_33&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8518&lt;/td&gt;&lt;td&gt;2412&lt;/td&gt;&lt;td&gt;1712&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_34&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8630&lt;/td&gt;&lt;td&gt;2007&lt;/td&gt;&lt;td&gt;1809&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_35&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;8156&lt;/td&gt;&lt;td&gt;1994&lt;/td&gt;&lt;td&gt;1658&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_36&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7612&lt;/td&gt;&lt;td&gt;2194&lt;/td&gt;&lt;td&gt;1395&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_37&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;7923&lt;/td&gt;&lt;td&gt;2417&lt;/td&gt;&lt;td&gt;1462&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_38&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8612&lt;/td&gt;&lt;td&gt;2302&lt;/td&gt;&lt;td&gt;1462&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_39&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;7561&lt;/td&gt;&lt;td&gt;2061&lt;/td&gt;&lt;td&gt;1750&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_40&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;7811&lt;/td&gt;&lt;td&gt;2233&lt;/td&gt;&lt;td&gt;1754&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_41&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;8508&lt;/td&gt;&lt;td&gt;2026&lt;/td&gt;&lt;td&gt;1520&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_42&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;7444&lt;/td&gt;&lt;td&gt;2401&lt;/td&gt;&lt;td&gt;1533&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_43&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;9063&lt;/td&gt;&lt;td&gt;2179&lt;/td&gt;&lt;td&gt;1838&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_44&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8641&lt;/td&gt;&lt;td&gt;2107&lt;/td&gt;&lt;td&gt;1606&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_45&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;8132&lt;/td&gt;&lt;td&gt;2064&lt;/td&gt;&lt;td&gt;1744&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_47&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;9063&lt;/td&gt;&lt;td&gt;2176&lt;/td&gt;&lt;td&gt;1550&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_48&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8537&lt;/td&gt;&lt;td&gt;2064&lt;/td&gt;&lt;td&gt;1712&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_49&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;7414&lt;/td&gt;&lt;td&gt;2089&lt;/td&gt;&lt;td&gt;1696&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;獰猛&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_50&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;8275&lt;/td&gt;&lt;td&gt;2014&lt;/td&gt;&lt;td&gt;1630&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;神速&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_ZERO&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;9947&lt;/td&gt;&lt;td&gt;1959&lt;/td&gt;&lt;td&gt;1741&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;突撃指揮者&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;脳筋&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;KNIGHT_OF_-1&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;4965&lt;/td&gt;&lt;td&gt;984&lt;/td&gt;&lt;td&gt;932&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;堅城の軍師&lt;/td&gt;&lt;td&gt;突撃指揮者&lt;/td&gt;&lt;td&gt;冷静沈着&lt;/td&gt;&lt;td&gt;伝説&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回実装したOCR処理の最終形&lt;a href=&quot;#今回実装したocr処理の最終形&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最終的に実装した OCR 処理の Python コードは以下のような感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; genai&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.genai &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; types&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; base64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; time &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; sleep&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; google.colab &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; userdata&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_file_to_base64&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_path, &lt;/span&gt;&lt;span&gt;&quot;rb&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; image_file:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; base64.&lt;/span&gt;&lt;span&gt;b64encode&lt;/span&gt;&lt;span&gt;(image_file.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; data.&lt;/span&gt;&lt;span&gt;decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_chunks&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;img_path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; userdata.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gcloud_project_id&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;# like env in Google Colab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LOCATION&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; userdata.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;gcloud_location&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;# like env in Google Colab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; genai.&lt;/span&gt;&lt;span&gt;Client&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;vertexai&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;LOCATION&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;b64_image &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;image_file_to_base64&lt;/span&gt;&lt;span&gt;(img_path)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; types.Part.&lt;/span&gt;&lt;span&gt;from_bytes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;base64.&lt;/span&gt;&lt;span&gt;b64decode&lt;/span&gt;&lt;span&gt;(b64_image),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;mime_type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;image/webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;textsi_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;以下のカラムを持ったテーブル形式で出力して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Character Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Level&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Heart&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Attack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Defense&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Work Speed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Passive Skill 4&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prompt &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;この画像からキャラクターのステータスを読み取って、Markdownのテーブル形式にして。補足や説明は不要です。&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# model = &quot;gemini-2.0-flash-exp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-1.5-pro-002&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;contents &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;types.&lt;/span&gt;&lt;span&gt;Content&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image1,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;types.Part.&lt;/span&gt;&lt;span&gt;from_text&lt;/span&gt;&lt;span&gt;(prompt)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generate_content_config &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; types.&lt;/span&gt;&lt;span&gt;GenerateContentConfig&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;top_p&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0.95&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;max_output_tokens&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;8192&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;response_modalities&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;TEXT&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;safety_settings&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_HATE_SPEECH&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_DANGEROUS_CONTENT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_SEXUALLY_EXPLICIT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),types.&lt;/span&gt;&lt;span&gt;SafetySetting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HARM_CATEGORY_HARASSMENT&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;threshold&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;OFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;system_instruction&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[types.Part.&lt;/span&gt;&lt;span&gt;from_text&lt;/span&gt;&lt;span&gt;(textsi_1)],&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; chunk &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; client.models.&lt;/span&gt;&lt;span&gt;generate_content_stream&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; model,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;contents&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; contents,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; generate_content_config,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(chunk)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunk, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; chunks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;images &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-045338.webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-045349.webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-045351.webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-050253.webp&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/content/drive/MyDrive/tmp/Screenshot_20250107-050254.webp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;parts &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;md_tables &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; img_file_path &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; images:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chunks &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_chunks&lt;/span&gt;&lt;span&gt;(img_file_path)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunks)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(chunks)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunks[i].candidates[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].content.parts[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;parts.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(chunks[i].candidates[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].content.parts[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;md_tables.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(parts))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;lt;-&lt;/span&gt;&lt;span&gt; wait a moment&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;--------------------------------------&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(md_tables)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 Vertex AI の Gemini API と Google Colabolatory を使用して、パルワールドのパルのステータス画面のスクショを OCR して、テーブル形式もといリレーション形式にまとめる試みでした。&lt;/p&gt;&lt;p&gt;以下が本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Vertex AI を Python から実行するためには、 OAuth2 認証が必要である。&lt;/li&gt;
&lt;li&gt;Google Colabolatory から Google ドライブ内のファイルを参照することが可能である。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gemini-2.0-flash-exp&lt;/code&gt;にリクエストを頻繁に送ると、 API 利用制限に抵触して処理が止まってしまう。 10 秒ぐらい空けても止まってしまった。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gemini-1.5-flash-002&lt;/code&gt;だと、まだ OCR 処理の能力が弱い。&lt;code&gt;gemini-1.5-pro-002&lt;/code&gt;であれば、プロンプトによっては問題なく OCR 可能である。&lt;/li&gt;
&lt;li&gt;その結果を ChatGPT-4o にまとめさせることは可能だが、データの一部が抜けることはある。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Google Colabolatory がかなり優秀なので、クライアントとしてはかなりこれだけで事足りそうな感じがしました。他のゲームのスクショでも可能なのかどうかも調べてみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお～、一気に見れるようになったぞぉ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;かなり自動で出来上がったな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>ChocolateyでWindowsに一気にインストールする</title><link>https://endorphinbath.com/posts/chocolatey-install-on-windows/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chocolatey-install-on-windows/</guid><description>ChocolateyというパッケージマネージャーでWindowsにアプリを一気にインストールする方法を紹介します。</description><pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれっ、この前も同じような記事を書かなかった？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;俺は日々進化している・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Windowsへのインストール作業を楽にしたい。&lt;a href=&quot;#windowsへのインストール作業を楽にしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、 PCを 新しくしたのですが、 Windows を新しくセットアップした後、ソフトウェアのインストールする作業が本当に面倒くさかったです。マウスと&lt;code&gt;Alt + Tab&lt;/code&gt;を忙しなく動かして、10年ぐらい前にもこんな作業をやっていたような気がします。なんて原始的なんだ。&lt;/p&gt;&lt;p&gt;・・・という書き出しで、以前にも同じような Windows のパッケージ管理ツールに関する記事を書きました。なんて節操がないことをしているんだ・・・僕は・・・。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/scoop-install-on-windows/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ScoopでWindowsに一気にインストールする&lt;/div&gt;&lt;div&gt;ScoopというパッケージマネージャーでWindowsにアプリを一気にインストールする方法を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/01/20250104_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、パッケージ管理マネージャーを Scoop から Chocolateyに 変えたのには意味があります。そのことに関して今回は取り上げていきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Chocolateyとは&lt;a href=&quot;#chocolateyとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chocolatey は Windows 用のパッケージマネージャーで、 Linux の&lt;code&gt;apt&lt;/code&gt;や&lt;code&gt;yum&lt;/code&gt;のようなツールです。コマンドラインを使用してソフトウェアのインストール、アップデート、アンインストールが簡単に行えるため、効率的な作業環境の構築が可能です。
主な特徴としては以下が挙げられます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;数千以上のパッケージが利用可能&lt;/li&gt;
&lt;li&gt;コマンド一つでインストールが完了&lt;/li&gt;
&lt;li&gt;複数のソフトウェアを一括管理できる&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;Chocolateyの方がパッケージの数が多い。&lt;a href=&quot;#chocolateyの方がパッケージの数が多い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Scoop よりも Chocolatey の方がインストール可能なパッケージの数が多いです。2024-01-06時点におけるパッケージの数は以下のようになっています。 Chocolatey が約2倍多いですね。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Scoop：5,776&lt;/li&gt;
&lt;li&gt;Chocolatey：10,360&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そのため、 Scoop ではインストールできず、 Chocolatey ではインストール出来るパッケージがあったりします。個人的に見つけたものは以下のパッケージです。ニッチですが。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Sound Blaster Command&lt;/li&gt;
&lt;li&gt;NVidia Display Driver（Scoopにあるものは更新年月日が2022年ぐらいで止まっていた。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;以下に、 Scoop でインストール出来る一部のパッケージおよび Chocolatey でインストール出来る一部のパッケージを照らし合わせた表を載せておきます。&lt;/p&gt;



































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;name&lt;/th&gt;&lt;th&gt;is_available_on_scoop&lt;/th&gt;&lt;th&gt;is_available_on_choco&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;7zip&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ffmpeg&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;git&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;libwebp&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;exiftool&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;steam&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;discord&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;googlechrome&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;everything&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gimp&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vlc&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;msiafterburner&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QuickLook&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vscode&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;epic-games-launcher&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PPSSPP&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sound Blaster Command&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NVidia Display Driver&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Chocolatey で利用出来るパッケージはここで確認することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://community.chocolatey.org/packages&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img.chocolatey.org/favicons/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Chocolatey Software&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Packages&lt;/div&gt;&lt;div&gt;Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software deployments.&lt;/div&gt;&lt;div&gt;community.chocolatey.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://img.chocolatey.org/social-share/facebook-share.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Scoop だと GitHub Actions が上手く通らない。&lt;a href=&quot;#scoop-だと-github-actions-が上手く通らない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、 Scoop をパッケージ管理マネージャーとして操を立てるという企みは一夜にして崩れ去った理由としては、 GitHub Actions が成功しなかったことが挙げられます。&lt;/p&gt;&lt;p&gt;なぜかは分かりませんが、 Scoop のパッケージをインストールして、その後に Scoop を使ってその他のパッケージをインストールしようとしても&lt;code&gt;scoop&lt;/code&gt;のコマンド名の解決が為されず、エラーになってしまうのです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;.github/workflows/install_test.yml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;InstallTest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;windows&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;windows-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install PSScriptAnalyzer module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shell&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pwsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Set-PSRepository PSGallery -InstallationPolicy Trusted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Install-Module PSScriptAnalyzer -ErrorAction Stop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get list of rules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shell&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pwsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ScriptAnalyzerRule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install required packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shell&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pwsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;choco install -y git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install dotfiles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shell&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pwsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;install_scripts/dotsinstaller.ps1 install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;scoop list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;shell&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pwsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;scoop list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;dotsinstaller.ps1&lt;/code&gt;の処理の一部であるこのスクリプトで Scoop をインストールします。しかし、この後に&lt;code&gt;scoop list&lt;/code&gt;を実行するとワークフローが失敗します。Cドライブにインストールしようが、Dドライブにインストールしようが失敗してしまいました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$firstDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Set-Location &quot;D:\&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-Location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;C:\&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Force&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-RestMethod&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Uri https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;get.scoop.sh | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-Location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$firstDir&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;実際に詰まる時のエラーメッセージはこんな感じです。&lt;code&gt;scoop&lt;/code&gt;が認識されていないらしい。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop: D:\a_temp\75f2a30e-f141-4938-9284-342f2c9b5e11.ps1:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Line |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2 | scoop list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| ~&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| The term &apos;scoop&apos; is not recognized as a name of a cmdlet, function, script file, or executable program.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Check the spelling of the name, or if a path was included, verify that the path is correct and try again.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;もう少し手前の警告メッセージでは、実行ポリシーの設定に失敗しているようです。しかし、普通にローカルの Windows マシンではインストールできているんですよね・・・。分からん・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;a policy defined at a more specific scope. Due to the override, your shell will retain its current effective&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;execution policy of Unrestricted. Type &quot;Get-ExecutionPolicy -List&quot; to view your execution policy settings. For more&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;information please see &quot;Get-Help Set-ExecutionPolicy&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;At D:\a\dotfiles\dotfiles.config\scoop\init.ps1:6 char:1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そんなトラブルに見舞われた後、 Scoop の代わりに Chocolatey をパッケージのインストールに使用したらワークフローが上手く通りました。&lt;/p&gt;&lt;p&gt;GitHub 公式の解説でも、 Windows で GitHub Actions のランナーを走らせる時には、 Chocolatey を使ってパッケージをインストールするように推奨されています。&lt;/p&gt;&lt;a href=&quot;https://docs-internal.github.com/ja/actions/how-tos/manage-runners/github-hosted-runners/customize-runners&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs-internal.github.com/assets/cb-345/images/site/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHubホストランナーのカスタマイズ - GitHubドキュメント&lt;/div&gt;&lt;div&gt;ワークフローの一部として、GitHubホストランナーに追加のソフトウェアをインストールできます。&lt;/div&gt;&lt;div&gt;docs-internal.github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.github.com/assets/cb-345/images/social-cards/actions.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Chocolateyをインストールする。&lt;a href=&quot;#chocolateyをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PowerShell を管理者権限で起動して、 Chocolatey をインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Force&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;span&gt; ((&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Net.WebClient).DownloadString(&lt;/span&gt;&lt;span&gt;&apos;https://chocolatey.org/install.ps1&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Chocolatey がインストールされていればバージョンを確認できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パッケージをインストールする。&lt;a href=&quot;#パッケージをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは Chocolatey でパッケージをインストールしていきます。例えば、以下のコマンドで Google Chrome をインストールできます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco install googlechrome &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;ps1ファイルに列挙してインストールする。&lt;a href=&quot;#ps1ファイルに列挙してインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程の方法だと txt ファイルを配置しなければなりませんが、こっちの方法の方がファイルを配置するのでもファイルからコピペして貼り付けるでもインストール出来るので楽かもしれません。&lt;/p&gt;&lt;p&gt;インストールしたいアプリをテキストファイルにまとめます。たとえば、&lt;code&gt;InstallWithMain.ps1&lt;/code&gt;というファイルを作って以下の内容を記述するか、 PowerShell コンソール上で以下のコマンドを全て実行します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# cui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install 7zip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install curl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install exiftool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install ffmpeg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# gui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install discord&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install everything&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install gimp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install googlechrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install msiafterburner&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco install obs&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;studio&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install quicklook&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install vlc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install vscode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# game&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install epicgameslauncher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco install nvidia&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco install soundblaster&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のchocoコマンド&lt;a href=&quot;#その他のchocoコマンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;インストール済みパッケージをアップデートします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco upgrade googlechrome &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;全てのインストール済みパッケージをアップデートします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco upgrade all &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;インストール時に&lt;code&gt;.light&lt;/code&gt;サフィックスや&lt;code&gt;.portable&lt;/code&gt;サフィックスを付けることができるパッケージもあったりします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install openssl.light&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco install everything.portable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;インストール済みパッケージをリスト形式で表示します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;choco list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;インストール済みパッケージをアンインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;choco uninstall googlechrome &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 Chocolatey を使って Windows にアプリケーション・パッケージを楽にインストールするための方法の紹介しました。&lt;/p&gt;&lt;p&gt;こちらのパッケージ管理マネージャーを使えば、 Windows にインストールするパッケージをおおよそ一括管理出来るのと同時に、 GitHub Actions でインストールテストを行うことも出来ます。&lt;/p&gt;&lt;p&gt;それでは快適な環境構築を！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PC作業のお供に&lt;a href=&quot;#pc作業のお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G 8000Hz 左右対称 PRO X SUPERLIGHT 2 ワイヤレス ゲーミングマウス G-PPD-004WL-BKd 44K DPI 8K ポーリングレート 軽量 60g LIGHTFORCE ハイブリッドスイッチ LIGHTSPEED USB Type-C 充電 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional Classic 英語配列／白&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;インストールにけっこう時間が掛かるな・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Windowsはかなり掛かるんだな・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>ScoopでWindowsに一気にインストールする</title><link>https://endorphinbath.com/posts/scoop-install-on-windows/</link><guid isPermaLink="true">https://endorphinbath.com/posts/scoop-install-on-windows/</guid><description>ScoopというパッケージマネージャーでWindowsにアプリを一気にインストールする方法を紹介します。</description><pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これはすごい楽だなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで一気にインストール出来るな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Windowsへのインストール作業を楽にしたい。&lt;a href=&quot;#windowsへのインストール作業を楽にしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、 PC を新しくしたのですが、 Windows を新しくセットアップした後、ソフトウェアのインストールする作業が本当に面倒くさかったです。マウスと&lt;code&gt;Alt + Tab&lt;/code&gt;を忙しなく動かして、10年ぐらい前にもこんな作業をやっていたような気がします。なんて原始的なんだ。&lt;/p&gt;&lt;p&gt;そこで今回は、そんな Windows の環境構築におけるアナログチックな作業を無くすために、「Scoop」というパッケージ管理ツールを使って、一気に楽々にアプリケーションのインストール作業を終わらせる方法を紹介します。&lt;/p&gt;&lt;p&gt;感覚としては、 Debian における&lt;code&gt;apt&lt;/code&gt;や macOS における&lt;code&gt;brew&lt;/code&gt;のように、コマンド一発で必要なアプリケーションをインストールすることが可能です。それでは、やってみましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Scoopの実行に必要な環境&lt;a href=&quot;#scoopの実行に必要な環境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Scoop は PowerShell を利用して動作するため、以下の条件を満たしている必要があります:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;PowerShell 5 以上（Windows 10以降では標準搭載）&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt;（必須ではないが推奨）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;また、実行ポリシーを変更してスクリプトが実行できるようにしておきます。&lt;/p&gt;&lt;p&gt;PowerShell を管理者権限で開き、以下のコマンドを実行します:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;次に、 Scoop をインストールします。 PowerShell に以下を入力するだけです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;iwr &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;useb get.scoop.sh | iex&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 以下でも可能です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-RestMethod&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Uri &amp;lt;https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;get.scoop.sh&amp;gt; | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これで Scoop がインストールされました！インストールが正常に行われたかどうかは、以下のコマンドで確認できます&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パッケージをインストールする。&lt;a href=&quot;#パッケージをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;scoop list&lt;/code&gt;を実行すると、現在インストールされていて Scoop によって管理されているパッケージの一覧を確認することが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# -------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Name    Version  Source Updated             Info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;-------&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;------&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-------&lt;/span&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;----&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;7zip    &lt;/span&gt;&lt;span&gt;24.08&lt;/span&gt;&lt;span&gt;    main   &lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;07&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;57&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ffmpeg  &lt;/span&gt;&lt;span&gt;7.1&lt;/span&gt;&lt;span&gt;      main   &lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;08&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;22&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;03&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;37&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git     &lt;/span&gt;&lt;span&gt;2.47&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt; main   &lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;07&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;57&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;27&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;libwebp &lt;/span&gt;&lt;span&gt;1.4&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;    main   &lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;17&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;08&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;08&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;57&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;scoop bucket add extras&lt;/code&gt;を実行すると、&lt;code&gt;extras&lt;/code&gt;という名前の bucket から追加のパッケージをインストールすることが出来るようになります。&lt;code&gt;extras bucket&lt;/code&gt;には主に GUI アプリが扱われています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop bucket add extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# -------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Checking repo... OK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;The extras bucket was added successfully.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;新しいパッケージをインストール出来るようになったので、&lt;code&gt;steam&lt;/code&gt;のアプリが利用出来るかどうかを確認してみます。&lt;code&gt;scoop search googlechrome&lt;/code&gt;を実行します。 Google Chrome を利用できそうです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop search googlechrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# -------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Results &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; local buckets...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Name         Version        Source Binaries&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;-------&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;------&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;googlechrome &lt;/span&gt;&lt;span&gt;131.0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;6778.205&lt;/span&gt;&lt;span&gt; extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;インストールしたい場合は、以下のコマンドで可能です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install googlechrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;次は、&lt;code&gt;steam&lt;/code&gt;のアプリが利用出来るかどうかを確認してみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop search steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# -------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Results &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; local buckets...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Name                        Version    Source Binaries&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;-------&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;------&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--------&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;archisteamfarm              &lt;/span&gt;&lt;span&gt;6.1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1.3&lt;/span&gt;&lt;span&gt;    extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;bulk&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;crap&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;uninstaller       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;5.8&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;      extras &lt;/span&gt;&lt;span&gt;SteamHelper.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;desktop&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;authenticator &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;     extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;library&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;manager       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1.7&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt;    extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;steamcmd                    &lt;/span&gt;&lt;span&gt;1733269577&lt;/span&gt;&lt;span&gt; extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;steamguard&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;cli              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0.15&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;     extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;新しいバケットを追加しましたが、 Steam のクライアントアプリは一覧に載っていませんでした・・・。ちなみに、 Steam のクライアントアプリをインストールするためには&lt;code&gt;games&lt;/code&gt;バケットを追加する必要があります。また別のバケットが必要になる場合もあるわけです。&lt;/p&gt;&lt;p&gt;そして、 Scoop で利用出来るパッケージと、そのパッケージをインストール可能なバケットはここで検索できます。&lt;/p&gt;&lt;a href=&quot;https://scoop.sh/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://scoop.sh/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@ScoopInstaller&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Scoop&lt;/div&gt;&lt;div&gt;A command-line installer for Windows&lt;/div&gt;&lt;div&gt;scoop.sh&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://scoop.sh/social-card.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;インストール可能なパッケージの例。&lt;a href=&quot;#インストール可能なパッケージの例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;scoop bucket add extras&lt;/code&gt;で&lt;code&gt;extras bucket&lt;/code&gt;内にあるパッケージもインストール出来るようになるのだが、&lt;code&gt;bucket&lt;/code&gt;はそれだけではなく、&lt;code&gt;games&lt;/code&gt;や&lt;code&gt;versions&lt;/code&gt;など色々あります。（&lt;code&gt;scoop search &amp;lt;package_name&amp;gt;&lt;/code&gt;で現在インストール出来るパッケージを確認出来る。）&lt;/p&gt;








































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;name&lt;/th&gt;&lt;th&gt;buckets&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;7zip&lt;/td&gt;&lt;td&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ffmpeg&lt;/td&gt;&lt;td&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;git&lt;/td&gt;&lt;td&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;libwebp&lt;/td&gt;&lt;td&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;exiftool&lt;/td&gt;&lt;td&gt;main&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;steam&lt;/td&gt;&lt;td&gt;games, versions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;discord&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;googlechrome&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;everything&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gimp&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vlc&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;msiafterburner&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QuickLook&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vscode&lt;/td&gt;&lt;td&gt;extras&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;epic-games-launcher&lt;/td&gt;&lt;td&gt;games&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PPSSPP&lt;/td&gt;&lt;td&gt;games&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Scoopで一気にインストール用ファイル&lt;a href=&quot;#scoopで一気にインストール用ファイル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;色々やり方があると思います。今回は2通りを紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;txtファイルに列挙する。&lt;a href=&quot;#txtファイルに列挙する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;インストールしたいアプリをテキストファイルにまとめます。たとえば、&lt;code&gt;install.txt&lt;/code&gt;というファイルを作り、以下のように記述します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;googlechrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;vscode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nodejs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;7zip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;作成したファイルを元に、以下のコマンドを実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-Content&lt;/span&gt;&lt;span&gt; install.txt | &lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; { scoop install $_ }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ps1ファイルに列挙する。&lt;a href=&quot;#ps1ファイルに列挙する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程の方法だと txt ファイルを配置しなければなりませんが、こっちの方法の方がファイルを配置するのでもファイルからコピペして貼り付けるでもインストール出来るので楽かもしれません。&lt;/p&gt;&lt;p&gt;インストールしたいアプリをテキストファイルにまとめます。たとえば、&lt;code&gt;InstallWithMain.ps1&lt;/code&gt;というファイルを作って以下の内容を記述するか、 PowerShell コンソール上で以下のコマンドを全て実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;7zip&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;exiftool&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;ffmpeg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install main&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;libwebp&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;コマンドプロンプトから以下のコマンドを全て実行するか、&lt;code&gt;.bat&lt;/code&gt;ファイルを作って実行でも良いかもしれません。 dotfiles リポジトリを作ってファイルを作って反映することも可能です。また、 Scoop はコマンドプロンプトからでも実行可能です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; -Windowstyle Normal -NoProfile -ExecutionPolicy Unrestricted -File &lt;/span&gt;&lt;span&gt;&quot;.\Init.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; -Windowstyle Normal -NoProfile -ExecutionPolicy Unrestricted -File &lt;/span&gt;&lt;span&gt;&quot;.\InstallWithMain.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; -Windowstyle Normal -NoProfile -ExecutionPolicy Unrestricted -File &lt;/span&gt;&lt;span&gt;&quot;.\InstallWithExtras.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;先程の&lt;code&gt;InstallWithMain.ps1&lt;/code&gt;とは別に、&lt;code&gt;InstallWithExtras.ps1&lt;/code&gt;というファイルを作っておけば、 bucket 毎にインストールするパッケージを区別することが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop bucket add extras&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;discord&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;everything&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;gimp&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;googlechrome&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;msiafterburner&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;obs&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;studio&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;quicklook&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;vlc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop install extras&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;vscode&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のScoopコマンド&lt;a href=&quot;#その他のscoopコマンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Scoop でパッケージをインストールした後に、それらのパッケージを管理するためのコマンド諸々です。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;アプリのアップデート&lt;/strong&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop update &amp;lt;アプリ名&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;すべてのアプリを一括アップデート&lt;/strong&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;scoop update &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;アプリのアンインストール&lt;/strong&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop uninstall &amp;lt;アプリ名&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 Scoop を使って Windows にアプリケーション・パッケージを楽にインストールするための方法の紹介しました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PC作業のお供に&lt;a href=&quot;#pc作業のお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4h36Q2M&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G 8000Hz 左右対称 PRO X SUPERLIGHT 2 ワイヤレス ゲーミングマウス G-PPD-004WL-BKd 44K DPI 8K ポーリングレート 軽量 60g LIGHTFORCE ハイブリッドスイッチ LIGHTSPEED USB Type-C 充電 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3PlnChR&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional Classic 英語配列／白&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gYkDHN&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ビリーズ・ブート・キャンプしている間に終わっちゃったよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;古いな。アップデートしよう&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年12月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202412/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202412/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にSatisfactoryのシリーズが更新されています。</description><pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年12月に投稿した動画の一覧&lt;a href=&quot;#2024年12月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：5&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】火薬もウランも必要ない核爆弾ニュークノーベリスク #48 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory火薬もウランも必要ない核爆弾ニュークノーベリスク-48--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/12/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wzOmaxIVNXU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】手動クラフトしまくらないと作れない冷却システム #49 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory手動クラフトしまくらないと作れない冷却システム-49--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/12/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sfm7uv0Es8c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】今度は頼んだぞリアクターモジュール！ #50 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory今度は頼んだぞリアクターモジュール-50--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/12/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/mNUdq8u6n8M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】固定子だけで作りまくれる原子核パスタ #51 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory固定子だけで作りまくれる原子核パスタ-51--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/12/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/3VuZeilGAPg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】総集編 | 未知の設備でゆっくり工業化：前半【ゆっくり実況】&lt;a href=&quot;#satisfactory総集編--未知の設備でゆっくり工業化前半ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/12/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FzI5lGkZL6c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は5本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】Dwebpで伸長したPNGをiTextSharpでPDFにまとめる</title><link>https://endorphinbath.com/posts/powershell-dwebp-into-pdf-itextsharp/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-dwebp-into-pdf-itextsharp/</guid><description>Dwebpで伸長したPNGを.NET Framework内のSystem.Drawing名前空間でJPGに変換して、iTextSharpでPDFにまとめます。</description><pubDate>Thu, 02 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こいつらwebp形式と来たか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それらをPDFにまとめたいな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;DwebpとSystem.Drawing名前空間でPDFに変換可能なJPGを作る。&lt;a href=&quot;#dwebpとsystemdrawing名前空間でpdfに変換可能なjpgを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、複数枚の webp 画像を PDF として一つにまとめる処理を実装する流れを紹介します。断片化した webp を PDF にまとめることで、ストレージに対してデフラグを行うことが狙いです。&lt;/p&gt;&lt;p&gt;PDF への変換には 「iTextSharp」 を利用していきますが、以前に、 Cwebp で圧縮した JPG が iTextSharp で PDF に変換することが出来なかったため、今回の&lt;code&gt;dwebp&lt;/code&gt;ツールを使った処理でも同様に、 PDF に変換可能な JPG は作成できないと仮定します。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-cwebp-jpg-pdf-itextsharp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】Cwebpで圧縮したJPGだとiTextSharpでPDFに変換出来ない&lt;/div&gt;&lt;div&gt;Cwebpで圧縮したJPGだとiTextSharpでPDFに出来ないので、.NET Framework内のSystem.Drawing名前空間を利用して変換します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2025/01/20250101_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで今回は、 Dwebp ツールで webp を png に伸長・変換して、&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing&lt;/code&gt;名前空間でその png を jpg に変換する。そして、その jpg 画像を PDF にまとめるという流れで、処理を実装していきます。それではやっていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;全体的な処理のコード&lt;a href=&quot;#全体的な処理のコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Dwebp ツールで webp を png に変換して、&lt;code&gt;System.Drawing&lt;/code&gt;名前空間でその png を jpg に変換する。&lt;/p&gt;&lt;p&gt;その処理をこの関数で定義します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImagesWithDecompressing&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SYNOPSIS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Converts multiple WebP images to JPEG format with specified quality.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;This function converts WebP images to JPEG format. It first decompresses each WebP to PNG using dwebp, then compresses the PNG to JPEG using the specified quality.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pathList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;An array of full file paths to the WebP images to be converted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A string suffix to append to the filename before the .png extension during the decompression stage. This suffix is not used in final jpeg filename.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;An integer representing the JPEG compression quality (0-100). 100 is highest quality.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$images = Get-ChildItem -Path &quot;C:\path\to\images&quot; -Filter &quot;*.webp&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Optimize-ImagesWithDecompressing -pathList $images.FullName -suffix &quot;decompressed&quot; -quality 85&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;INPUTS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Array, System.String, System.Int32&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;OUTPUTS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None.  Output files are written to disk.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NOTES&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Requires the dwebp tool and System.Drawing assembly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LINK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dwebp, [System.Drawing.Image]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;CmdletBinding&lt;/span&gt;&lt;span&gt;()]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -AssemblyName System.Drawing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$file.FullName&lt;/span&gt;&lt;span&gt;).Extension;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$outputImg1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}_{1:D2}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$file.FullName.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$file.FullName.Length&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$extension.Length&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;.png&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&amp;lt;1st Source File Name: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Optimize-ImageWithDecompressing&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ImagePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;OutputPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputImg1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$outputImg1&lt;/span&gt;&lt;span&gt;).Extension;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$outputImg2&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}{1}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$outputImg1.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$outputImg1.Length&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$extension.Length&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;&quot;.jpg&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&amp;lt;2nd Source File Name: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;outputImg&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Optimize-ImageWithCompressing&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ImagePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputImg1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;OutputPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputImg2&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Quality &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;{0} .jpg images converted.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.Extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.webp&quot;&lt;/span&gt;&lt;span&gt;) };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;compressed&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]($Args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]); &lt;/span&gt;&lt;span&gt;# 0-100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Optimize-ImagesWithDecompressing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;y&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.Extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.png&quot;&lt;/span&gt;&lt;span&gt;) };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Dwebpツールでwebpをpngに変換する。&lt;a href=&quot;#dwebpツールでwebpをpngに変換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Libwebp」という Google 製のパッケージに、「Dwebp」という機能があるので、その機能を使って webp を png に変換していきます。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/speed/webp/docs/dwebp&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;dwebp | WebP | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/google-green.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;変換処理のコードは以下の通りです。実質1行で事足りますが。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImageWithDecompressing&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load System.Drawing assembly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dwebp &lt;/span&gt;&lt;span&gt;$ImagePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;o &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;Image decompressed and saved to: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputPath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;An error occurred: $_&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;System.Drawing名前空間を使って圧縮する。&lt;a href=&quot;#systemdrawing名前空間を使って圧縮する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら次に、 Dwebp で変換した PNG ファイルを JPG ファイルとして圧縮していくことにしましょう。この処理を噛ませることで、 PDF のサイズを小さく出来ます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing&lt;/code&gt;名前空間を使って、 JPG を作っていきます。&lt;code&gt;Image.Save&lt;/code&gt; メソッドで保存する画像ファイルの圧縮率を指定出来るエンコーダを引数に渡せば、 JPG を圧縮できそうです。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.image.save?view=netframework-4.8.1&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Image.Save メソッド (System.Drawing)&lt;/div&gt;&lt;div&gt;このイメージを、指定した形式で指定されたストリームに保存します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;その公式のコードを参考に、 PowerShell として書き直します。そして、以下の関数を呼び出せば JPG に圧縮することが出来ました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImageWithCompressing&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ImagePath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$Quality&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 0-100, 100 is highest quality (least compression)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load System.Drawing assembly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Load the image&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$ImagePath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create an EncoderParameter object for quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$qualityParam&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Imaging.EncoderParameter(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.Encoder&lt;/span&gt;&lt;span&gt;]::Quality, &lt;/span&gt;&lt;span&gt;$Quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Get the JPEG codec&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$jpegCodec&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageCodecInfo&lt;/span&gt;&lt;span&gt;]::GetImageDecoders() | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.FormatID&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Jpeg.Guid }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create an EncoderParameters object&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$encoderParams&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Imaging.EncoderParameters(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$encoderParams.Param&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$qualityParam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Save the image with the specified quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$jpegCodec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;$encoderParams&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;Image compressed and saved to: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputPath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;An error occurred: $_&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;iTextSharpでPDFにまとめる。&lt;a href=&quot;#itextsharpでpdfにまとめる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら次に、圧縮した JPG を iTextSharp で PDF に変換します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge-ImagesIntoPdfWithITextSharp&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# [System.Reflection.Assembly]::LoadFrom($iTextSharpPath);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -Path $iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;LiteralPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $error[0].Exception.GetBaseException().LoaderExceptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].DirectoryName, &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].BaseName, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: decided PDF file name&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.Document;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.IO.File&lt;/span&gt;&lt;span&gt;]::Create(&lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Open&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Get image files to add into PDF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: adding an image into a PDF...&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Scale images to each page size.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.SetPageSize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.NewPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.SetAbsolutePosition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $image.ScaleToFit($doc.PageSize.Width, $doc.PageSize.Height);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Alignment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::ALIGN_CENTER;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: completed adding images into a PDF&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;今までの一連の処理を行えば、複数の WEBP 画像を1つの PDF にまとめることが出来るようになりました！ めでたしめでたし。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、Dwebpを飛ばすと失敗する。&lt;a href=&quot;#ちなみにdwebpを飛ばすと失敗する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、以下の流れで処理を実装しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Dwebp で webp を png に変換する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Drawing&lt;/code&gt;名前空間で png を jpg に変換する。&lt;/li&gt;
&lt;li&gt;iTextSharp で jpg を pdf に変換する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;ちなみに、上記の工程で1の工程をすっ飛ばして、&lt;code&gt;System.Drawing&lt;/code&gt;名前空間で webp を jpg に変換しようとすると失敗します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Optimize-ImageWithDecompressing : An error occurred: &quot;1&quot; 個の引数を指定して &quot;FromFile&quot; を呼び出し中に例外が発生しました : &quot;メモリが不足しています。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;発生場所 C:\Users\...\Z5-9_decompress_webp_to_jpg_with_sys_draw.ps1:88 文字:5 + Optimize-ImageWithDecompressing -ImagePath $file -OutputPath $out ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Optimize-ImageWithDecompressing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 iTextSharp を PowerShell で叩いて、複数枚の Webp 画像を一つの PDF にまとめる処理を実装する試みでした。&lt;/p&gt;&lt;p&gt;以下が、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;iTextSharp パッケージで複数の画像ファイルを PDF にまとめることが可能である。 JPG 画像でまとめればサイズをより減らせる。&lt;/li&gt;
&lt;li&gt;Libwebp パッケージの&lt;code&gt;dwebp&lt;/code&gt;ツールで、 WEBP 画像ファイルを PNG 画像に変換することが可能である。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Drawing&lt;/code&gt;名前空間で PNG 画像を JPG 画像に変換することが可能である。しかし、 WEBP 画像を変換しようとすると失敗する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Webp ファイルは高品質で低サイズの画像ファイルを構成できますが、フラグメンテーションを放置するのは勿体ないとも思います。そんな時に使えそうなツールでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のPowerShell関連の記事&lt;a href=&quot;#その他のpowershell関連の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-merging-into-pdf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話&lt;/div&gt;&lt;div&gt;ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241027_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんなこともあるんだなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでPDFにまとめられます。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】Cwebpで圧縮したJPGだとiTextSharpでPDFに変換出来ない</title><link>https://endorphinbath.com/posts/powershell-cwebp-jpg-pdf-itextsharp/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-cwebp-jpg-pdf-itextsharp/</guid><description>Cwebpで圧縮したJPGだとiTextSharpでPDFに出来ないので、.NET Framework内のSystem.Drawing名前空間を利用して変換します。</description><pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;アレエエッ、なんでこれPDFに出来ないの？！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;同じJPGなんだけどな・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まずは何が起きたのか。&lt;a href=&quot;#まずは何が起きたのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回遭遇した不思議現象は、 Libwebp パッケージの&lt;code&gt;cwebp&lt;/code&gt;ツールで変換圧縮したJPGファイルが、 iTextSharp パッケージを使った PDF 変換処理で変換できなかったというものです。&lt;/p&gt;&lt;p&gt;Libwebp パッケージは Scoop でインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd C:\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-RestMethod&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Uri https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;get.scoop.sh | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; Env:USERNAME).Value; &lt;/span&gt;&lt;span&gt;Set-Location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;C:\Users\&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install libwebp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;iTextSharp パッケージはここからダウンロードしたものを使いました。 iTextSharp のバージョンは&lt;code&gt;5.5.13&lt;/code&gt;です。&lt;/p&gt;&lt;a href=&quot;https://nuget.org/packages/iTextSharp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://nuget.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@nuget&lt;/span&gt;&lt;/div&gt;&lt;div&gt;iTextSharp 5.5.13&lt;/div&gt;&lt;div&gt;iText is a PDF library that allows you to CREATE, ADAPT, INSPECT and MAINTAIN documents in the Portable Document Format (PDF), allowing you to add PDF functionality to your software projects with ease. We even have documentation to help you get coding. We have two currently supported versions: iText 5 and iText 7. Both are available under AGPL and Commercial license. * iText 5 AGPL * iText 7 community: https://www.nuget.org/packages/itext7/ iText 5 is a one solution library that is complex, but well documented to help you create your solutions. iText 7 is a complete re-write of iText 5, allowing you to choose your adventure with add-ons, all based on a simple, modular code structure that is easy to use and well documented. Both versions allow you to: - Generate documents and reports based on data from an XML file or a database - Create maps and books, exploiting numerous interactive features available in PDF - Add bookmarks, page numbers, watermarks, and other features to existing PDF documents - Split or concatenate pages from existing PDF files - Fill out interactive forms - Serve dynamically generated or manipulated PDF documents to a web browser iText 7 includes pdfDebug, the first debugging tool that gives you a clear overview of your content streams and document structure as well as pdfCalligraph, allowing you to leverage advanced typography. iText is available for Java, .NET in both versions, and Android and GAE for iText 5 only. iTextSharp is the .NET port of iText 5. Several iText engineers are actively supporting the project on StackOverflow: http://stackoverflow.com/questions/tagged/itext&lt;/div&gt;&lt;div&gt;nuget.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://api.nuget.org/v3-flatcontainer/itextsharp/5.5.13/icon&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まずは、&lt;code&gt;cwebp&lt;/code&gt;で JPG に変換圧縮します。また、今回は PowerShell で一連の処理を行っていきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImageWithCompressing&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$file.FullName&lt;/span&gt;&lt;span&gt;).Extension;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$outputImg&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}_{1:D2}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$file.FullName.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$file.FullName.Length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;$extension.Length&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;.jpg&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&amp;lt;Source File Name: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cwebp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;preset photo &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;metadata icc &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;sharp_yuv &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;q &lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;o &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputImg&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;progress &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;short &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$file.FullName&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;{0} .jpg images converted.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そしたら次に、圧縮した JPG を iTextSharp で PDF に変換します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge-ImagesIntoPdfWithITextSharp&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# [System.Reflection.Assembly]::LoadFrom($iTextSharpPath);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -Path $iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;LiteralPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $error[0].Exception.GetBaseException().LoaderExceptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].DirectoryName, &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].BaseName, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: decided PDF file name&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.Document;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.IO.File&lt;/span&gt;&lt;span&gt;]::Create(&lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Open&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Get image files to add into PDF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: adding an image into a PDF...&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Scale images to each page size.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.SetPageSize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.NewPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.SetAbsolutePosition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $image.ScaleToFit($doc.PageSize.Width, $doc.PageSize.Height);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Alignment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::ALIGN_CENTER;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: completed adding images into a PDF&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;すると、この処理でエラーになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;表示されたエラーメッセージはこんなやつです。さて、どうしたものか・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;1&quot; 個の引数を指定して &quot;GetInstance&quot; を呼び出し中に例外が発生しました: &quot;file:///C:/.../Screenshot_20250101-212015_trimmed_compressed.jpg is not a recognized imageformat.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;発生場所 C:\...\hogehoge.ps1:161 文字:5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+     $image = [iTextSharp.text.Image]::GetInstance($path.FullName);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+ FullyQualifiedErrorId : IOException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因を調べたのだが分からなかった。&lt;a href=&quot;#原因を調べたのだが分からなかった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程出てきたエラーメッセージなのですが、原因が全く分からなかったんですよね。&lt;/p&gt;&lt;p&gt;まず、&lt;code&gt;cwebp&lt;/code&gt;で圧縮する前の JPG 画像ではそのエラーは発生せずに、問題なく PDF にまとめることが出来ました。（しかし、圧縮していないので、サイズの大きな PDF ファイルが出来上がってしまいます・・・。）&lt;/p&gt;&lt;p&gt;「iTextsharp jpg is not a recognized imageformat」とかでググっても有力そうな情報が出てこない・・・。&lt;/p&gt;&lt;p&gt;そこで、&lt;code&gt;cwebp&lt;/code&gt;で JPG に圧縮する時のパラメータを変化させれば対処出来るかどうかを調べました。今回 JPG 圧縮に使っていた&lt;code&gt;cwebp&lt;/code&gt;コマンドの打ち方はこうでした。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cwebp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;preset photo &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;metadata icc &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;sharp_yuv &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;q &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$quality&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;o &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputImg&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;progress &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;short &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$file.FullName&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;調べたパラメータの組み合わせは以下の通りです。&lt;code&gt;-preset&lt;/code&gt;（特定の種類のソース素材に合わせて、事前定義された一連のパラメータを指定する。）と、&lt;code&gt;-sharp_yuv&lt;/code&gt;（より正確でシャープな RGB -&amp;gt; YUV 変換を使用する。）のパラメータが怪しかったので、そこだけで総当たりさせました。&lt;/p&gt;







































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;code&gt;-preset&lt;/code&gt; パラメータ&lt;/th&gt;&lt;th&gt;&lt;code&gt;-sharp_yuv&lt;/code&gt; オン&lt;/th&gt;&lt;th&gt;&lt;code&gt;-sharp_yuv&lt;/code&gt; オフ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;default&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;drawing&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;photo&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;picture&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;icon&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;text&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;調査の結果は全滅・・・。どうやら Cwebp 自体を使って、圧縮した JPG を PDF としてまとめることは止めておいた方が良さそうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;System.Drawing名前空間を使って圧縮する。&lt;a href=&quot;#systemdrawing名前空間を使って圧縮する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら、 Cwebp 以外のパッケージを使って JPG ファイルを圧縮していくことにしましょう。&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing&lt;/code&gt;名前空間を使って、 JPG を作っていきます。&lt;code&gt;Image.Save&lt;/code&gt; メソッドで保存する画像ファイルの圧縮率を指定出来るエンコーダを引数に渡せば、 JPG を圧縮できそうです。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.image.save?view=netframework-4.8.1&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Image.Save メソッド (System.Drawing)&lt;/div&gt;&lt;div&gt;このイメージを、指定した形式で指定されたストリームに保存します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、公式の解説は C# でしか書かれていないので、 PowerShell として直すのが面倒ですね・・・。はい、 Gemini Code Assist 君に書かせたら秒で終わりました。&lt;code&gt;cwebp&lt;/code&gt;コマンドを打ち込んでいた行で、代わりに以下の関数を呼び出せば JPG に圧縮することが出来ました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImageWithCompressing&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ImagePath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$Quality&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 0-100, 100 is highest quality (least compression)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load System.Drawing assembly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Load the image&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$ImagePath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create an EncoderParameter object for quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$qualityParam&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Imaging.EncoderParameter(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.Encoder&lt;/span&gt;&lt;span&gt;]::Quality, &lt;/span&gt;&lt;span&gt;$Quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Get the JPEG codec&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$jpegCodec&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageCodecInfo&lt;/span&gt;&lt;span&gt;]::GetImageDecoders() | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.FormatID&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Jpeg.Guid }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create an EncoderParameters object&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$encoderParams&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Imaging.EncoderParameters(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$encoderParams.Param&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$qualityParam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Save the image with the specified quality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$jpegCodec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;$encoderParams&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;Image compressed and saved to: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputPath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;An error occurred: $_&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記の処理で圧縮した JPG ファイルを先程の PDF 変換処理に渡せば、複数の JPG を1つの PDF にまとめることが出来るようになりました！&lt;/p&gt;&lt;p&gt;しかしなぁ、 Cwebp と iTextSharp の不和の原因は一体何だったのだろう・・・。調べたら沼りそうなのでやめておきます・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 iTextSharp を PowerShell で叩いて、複数枚の JPG 画像を一つの PDF にまとめる処理を実装する試みでした。&lt;/p&gt;&lt;p&gt;以下が、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Libwebp パッケージの&lt;code&gt;cwebp&lt;/code&gt;ツールで変換した JPG 画像は、 iTextSharp パッケージで PDF に変換しようとすると失敗する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Drawing&lt;/code&gt;名前空間で変換した JPG 画像は、 iTextSharp パッケージで PDF に変換することが可能である。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;同じ JPG ファイルを出力したというのに、使えるファイルと使えないファイルに分かれるというのが何とも不思議でした。回避できて良かった。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のPowerShell関連の記事&lt;a href=&quot;#その他のpowershell関連の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-merging-into-pdf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話&lt;/div&gt;&lt;div&gt;ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241027_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんなこともあるんだなぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでPDFにまとめられます。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>B650 Steel Legend WiFiで使えるASRock Polychrome RGBの入手および設定方法</title><link>https://endorphinbath.com/posts/asrock-polychrome-led-setting/</link><guid isPermaLink="true">https://endorphinbath.com/posts/asrock-polychrome-led-setting/</guid><description>B650 Steel Legend WiFiでLEDテープライト等の光を調節するツールであるASRock Polychrome RGBのインストールパッケージの入手方法、そしてその設定方法です。</description><pubDate>Thu, 26 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これってどこで手に入るのお？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見つからんな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ASRock Polychrome RGBを設定する。&lt;a href=&quot;#asrock-polychrome-rgbを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ASRock製のマザーボードでは、マザボに接続出来る周辺パーツのイルミネーション管理ユーティリティとして、「ASRock Polychrome RGB」というものを利用することが可能です。このソフトウェアを使うことで、マザーボードに接続したLEDテープライトやLEDライトを搭載しているDRAM等を自分の好みの光らせ方で点灯させることが出来ます。&lt;/p&gt;&lt;p&gt;本記事では、ASRock Polychrome RGBの入手およびインストール方法、そして設定方法を紹介していきます。&lt;/p&gt;&lt;p&gt;実際にLEDライトを光らせるとこんな感じになります。それでは行ってみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/03.BScl0GzB_1kY8iU.webp&quot; srcset=&quot;/_astro/03.BScl0GzB_Z5kdnA.webp 640w, /_astro/03.BScl0GzB_159eE.webp 750w, /_astro/03.BScl0GzB_Z2sSM3d.webp 828w, /_astro/03.BScl0GzB_Z1LO0uI.webp 1080w, /_astro/03.BScl0GzB_Q5DdE.webp 1280w, /_astro/03.BScl0GzB_1Rd5sQ.webp 1668w, /_astro/03.BScl0GzB_Z1GgQ5p.webp 2048w, /_astro/03.BScl0GzB_Z1Q7BAN.webp 2560w, /_astro/03.BScl0GzB_1kY8iU.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;インストーラを入手する。&lt;a href=&quot;#インストーラを入手する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Uptodownのインストーラは利用できない。&lt;a href=&quot;#uptodownのインストーラは利用できない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずはインストーラーを手に入れるところからです。&lt;/p&gt;&lt;p&gt;その際に、&lt;a href=&quot;https://asrock-polychrome-rgb-sync.jp.uptodown.com/windows&quot; target=&quot;_blank&quot;&gt;Uptodown&lt;/a&gt;で手に入れたインストーラーを使ってASRock Polychrome RGB Syncをインストールすると、そのアプリを起動する時にWindowsから「このデバイスにドライバーをロードできません」やら「脆弱なドライバー」みたいな警告を食らって起動できませんでした。そのため、また別のインストーラを用意する必要がありそうです。（おそらくインストーラーのバージョンが古いのかもしれません。）&lt;/p&gt;&lt;p&gt;Windowsのサポートページを覗いてみると、そのメッセージは、Windows セキュリティのメモリ整合性設定により、デバイスにドライバーが読み込まれないために表示されるようです。Windows Update またはドライバーの製造元から、更新された互換性のあるドライバーが入手するのが望ましいです。&lt;/p&gt;&lt;p&gt;しかし、最悪利用出来るソフトウェアが見つからなかったら、Windowsの「メモリ整合性」をオフにするしか無いようです。（設定方法としては、Windows上で、&lt;code&gt;設定&lt;/code&gt; &amp;gt; &lt;code&gt;アップデートとセキュリティ&lt;/code&gt; &amp;gt; &lt;code&gt;Windows セキュリティ&lt;/code&gt; &amp;gt; &lt;code&gt;デバイス セキュリティ&lt;/code&gt; を選択し、コア分離の下にあるコア分離の詳細を選択する。）&lt;/p&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/windows/a-driver-can-t-load-on-this-device-8eea34e5-ff4b-16ec-870d-61a4a43b3dd5&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.microsoft.com/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;support.microsoft.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;A driver can&apos;t load on this device - Microsoft Support&lt;/div&gt;&lt;div&gt;Find out the steps you can take if you receive a message telling you a driver can&apos;t load on your device.&lt;/div&gt;&lt;div&gt;support.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ASRock公式ページから入手する。&lt;a href=&quot;#asrock公式ページから入手する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、ASRock公式のダウンロードページから入手していきたいと思います。&lt;/p&gt;&lt;p&gt;そこで、最初にこのページでインストーラが無いかどうかを探しました。&lt;/p&gt;&lt;a href=&quot;https://www.asrock.com/support/index.jp.asp?cat=Utilities&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.asrock.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.asrock.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.asrock.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、このページでは「B650 Steel Legend WiFi」で使えるASRock Polychrome RGBは見つかりませんでした。B650 Steel Legend WiFiと外見が瓜二つの「X870 Steel Legend WiFi」のインストーラを使ってやろうかと思いましたが、一旦、もうちょい探してみます。&lt;/p&gt;&lt;p&gt;B650 Steel Legend WiFi。
&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;500&quot; src=&quot;/_astro/11.DWG5yM2X_Z1GmcKh.webp&quot; srcset=&quot;/_astro/11.DWG5yM2X_Z1GmcKh.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;X870 Steel Legend WiFi。　本当によく似ていること。
&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;1000&quot; src=&quot;/_astro/12.CQ4o1INe_Bbcr3.webp&quot; srcset=&quot;/_astro/12.CQ4o1INe_1CBEbq.webp 640w, /_astro/12.CQ4o1INe_1H2Na4.webp 750w, /_astro/12.CQ4o1INe_2qqluo.webp 828w, /_astro/12.CQ4o1INe_1Jnapa.webp 1080w, /_astro/12.CQ4o1INe_Bbcr3.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、ASRock公式サイト内（先程のダウンロードページ内でも大丈夫）で、「B650 Steel Legend」で検索しました。すると、B650 Steel Legend WiFiで利用出来るソフトウェアやドライバーの一覧が設置されたページに辿り着くことが出来ました。&lt;/p&gt;&lt;a href=&quot;https://www.asrock.com/MB/AMD/B650%20Steel%20Legend%20WiFi/index.asp&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.asrock.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.asrock.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.asrock.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで、&lt;code&gt;ASRock Polychrome RGB ver:2.0.190&lt;/code&gt;を入手できたので、これをインストールしました。インストールが終わると、再起動するように促されるので再起動して、スタートメニュー等から「ASRRGBLED」のアプリを起動します。起動するとファームウェアの更新が始まるのでしばらく待ちます。&lt;/p&gt;&lt;p&gt;これで、ASRock Polychrome RGBを使えるようになりました！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;LEDの光らせ方を設定する。&lt;a href=&quot;#ledの光らせ方を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ASRock Polychrome RGBを使えるようになったので、早速設定していきます。&lt;/p&gt;&lt;p&gt;設定画面はこんな感じのUIです。&lt;code&gt;Onboard LED&lt;/code&gt;タブ内からは、マザボの3ピンやら4ピンに繋いだパーツのLEDライトの光らせ方を設定できて、&lt;code&gt;Component&lt;/code&gt;タブ内からは、DRAM、グラボ、SSD等のPCパーツのLED照明を設定することが可能です。マウスパッドやモニターに対しても設定出来るみたいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1125&quot; height=&quot;685&quot; src=&quot;/_astro/21.DSgZ_cxu_Z2qp7v4.webp&quot; srcset=&quot;/_astro/21.DSgZ_cxu_Z16oeee.webp 640w, /_astro/21.DSgZ_cxu_Z1w5B4i.webp 750w, /_astro/21.DSgZ_cxu_17G1QJ.webp 828w, /_astro/21.DSgZ_cxu_1SI5MD.webp 1080w, /_astro/21.DSgZ_cxu_Z2qp7v4.webp 1125w&quot; /&gt;&lt;/p&gt;&lt;p&gt;LEDの光らせ方としては、光の色を設定することはもちろん可能ですが、それに加えて以下のスタイルで光らせることが可能です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Static&lt;/li&gt;
&lt;li&gt;Breathing&lt;/li&gt;
&lt;li&gt;Flashing&lt;/li&gt;
&lt;li&gt;ColorCycle&lt;/li&gt;
&lt;li&gt;Rainbow&lt;/li&gt;
&lt;li&gt;Breathing Rainbow&lt;/li&gt;
&lt;li&gt;Comet&lt;/li&gt;
&lt;li&gt;Comet Rainbow&lt;/li&gt;
&lt;li&gt;Moving Flash&lt;/li&gt;
&lt;li&gt;Moving Flash Rainbow&lt;/li&gt;
&lt;li&gt;Wave&lt;/li&gt;
&lt;li&gt;Glowing YoYo&lt;/li&gt;
&lt;li&gt;Starry Night&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;また、設定する際にちょっと困った点があって、&lt;code&gt;Onboard LED&lt;/code&gt;タブ内で、左側の&lt;code&gt;Component Sync&lt;/code&gt;バーから&lt;code&gt;DRAM&lt;/code&gt;等を選ぶと他のアドレサブルLEDと設定が同期されます。また、表示していないアドレサブルLED等も表示しているLEDと設定が同期されてしまうので注意が必要です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;光らせるとこんな感じ。&lt;a href=&quot;#光らせるとこんな感じ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際に設定して光らせた時の写真を追加で貼っておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/51.DzydqKq3_19gzXy.webp&quot; srcset=&quot;/_astro/51.DzydqKq3_Z1eK0Ho.webp 640w, /_astro/51.DzydqKq3_Z18kD59.webp 750w, /_astro/51.DzydqKq3_1rRyqU.webp 828w, /_astro/51.DzydqKq3_Z1XwxP5.webp 1080w, /_astro/51.DzydqKq3_En5Si.webp 1280w, /_astro/51.DzydqKq3_1Fux8u.webp 1668w, /_astro/51.DzydqKq3_Z1RYopL.webp 2048w, /_astro/51.DzydqKq3_Z22P9Va.webp 2560w, /_astro/51.DzydqKq3_19gzXy.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;4080&quot; height=&quot;3072&quot; src=&quot;/_astro/52.ptXWiTBD_bYPtp.webp&quot; srcset=&quot;/_astro/52.ptXWiTBD_Z16ChCO.webp 640w, /_astro/52.ptXWiTBD_Z10cU0z.webp 750w, /_astro/52.ptXWiTBD_1A0hvu.webp 828w, /_astro/52.ptXWiTBD_29nPtH.webp 1080w, /_astro/52.ptXWiTBD_ZhSDAQ.webp 1280w, /_astro/52.ptXWiTBD_IdMDl.webp 1668w, /_astro/52.ptXWiTBD_2eUYT1.webp 2048w, /_astro/52.ptXWiTBD_255enC.webp 2560w, /_astro/52.ptXWiTBD_bYPtp.webp 4080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上記の写真のPCケースで使用したLEDテープは、以下の2種類です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4fFG8My&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;BTF-LIGHTING LED ネオン RGB PC LEDテープライト 個別にアドレス指定可能 5V 3ピン RGBスプリッターケーブル付き 2x50CM LEDライトストリップ PCコンピューターケース用 Asus Aura、Asrock RGB LED、Gigabyte RGB Fusion、MSI Mystic Light 12個の固定用クリップ付き&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4fFG8My&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gydDl1&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;BTF-LIGHTING LED RGB PC LEDテープライト 個別にアドレス指定可能 5V 3ピン RGBスプリッターケーブル付き 2x50CM LEDライトストリップ PCコンピューターケース用 Asus Aura、Gigabyte RGB Fusion、MSI Mystic Light&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gydDl1&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、ASRock Polychrome RGBのインストールパッケージの入手方法、そしてその設定方法を紹介しました。&lt;/p&gt;&lt;p&gt;これで自分のPCがより彩れること間違い無しでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ま、まぶしい・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ビカビカです。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】iTextSharpでPDFを暗号化する</title><link>https://endorphinbath.com/posts/powershell-itextsharp-pdf-encryption/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-itextsharp-pdf-encryption/</guid><description>iTextSharpをPowerShellで叩いて、PDFを暗号化する処理を実装するための記事です。</description><pubDate>Wed, 25 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;PDFを暗号化する？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあやってみようか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あっ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PDFにパスワードを付ける&lt;a href=&quot;#pdfにパスワードを付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PDFファイルには、正しいパスワードを入力しないと開けないようにすることが出来る暗号化機能があります。&lt;/p&gt;&lt;p&gt;しかし、その暗号化を施すためには、Adobe Acrobatのような高価なPDFエディタを使ったり、オンラインのPDFツールにアップロードする必要があったりします。暗号化するようなPDFファイルなのですから、中の情報が独り歩きしてしまうような懸念を減らしたいです。&lt;/p&gt;&lt;p&gt;そこで今回は、「iTextSharp」というパッケージをローカルにダウンロードして、そのパッケージとPowerShellのみでその暗号化を完結できるように、PDFにパスワードを付ける処理を実装していきたいと思います。それでは行ってみましょう。
ちなみに、PDFをちゃんと暗号化出来ると、Microsoft EdgeなどでPDFを開いた時にこのようなパスワード入力画面が表示されるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1133&quot; height=&quot;599&quot; src=&quot;/_astro/21.CwmZfqbM_Z2rhV2e.webp&quot; srcset=&quot;/_astro/21.CwmZfqbM_Z1W7ej1.webp 640w, /_astro/21.CwmZfqbM_ZijNyB.webp 750w, /_astro/21.CwmZfqbM_Z2tFcUd.webp 828w, /_astro/21.CwmZfqbM_1OzsVL.webp 1080w, /_astro/21.CwmZfqbM_Z2rhV2e.webp 1133w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;iTextSharpでPDFを暗号化する&lt;a href=&quot;#itextsharpでpdfを暗号化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではまずは、iTextSharpをローカルにダウンロードします。このiTextSharpのパッケージのバージョンですが、今回は「5.5.13」を使います。&lt;/p&gt;&lt;a href=&quot;https://nuget.org/packages/iTextSharp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://nuget.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@nuget&lt;/span&gt;&lt;/div&gt;&lt;div&gt;iTextSharp 5.5.13&lt;/div&gt;&lt;div&gt;iText is a PDF library that allows you to CREATE, ADAPT, INSPECT and MAINTAIN documents in the Portable Document Format (PDF), allowing you to add PDF functionality to your software projects with ease. We even have documentation to help you get coding. We have two currently supported versions: iText 5 and iText 7. Both are available under AGPL and Commercial license. * iText 5 AGPL * iText 7 community: https://www.nuget.org/packages/itext7/ iText 5 is a one solution library that is complex, but well documented to help you create your solutions. iText 7 is a complete re-write of iText 5, allowing you to choose your adventure with add-ons, all based on a simple, modular code structure that is easy to use and well documented. Both versions allow you to: - Generate documents and reports based on data from an XML file or a database - Create maps and books, exploiting numerous interactive features available in PDF - Add bookmarks, page numbers, watermarks, and other features to existing PDF documents - Split or concatenate pages from existing PDF files - Fill out interactive forms - Serve dynamically generated or manipulated PDF documents to a web browser iText 7 includes pdfDebug, the first debugging tool that gives you a clear overview of your content streams and document structure as well as pdfCalligraph, allowing you to leverage advanced typography. iText is available for Java, .NET in both versions, and Android and GAE for iText 5 only. iTextSharp is the .NET port of iText 5. Several iText engineers are actively supporting the project on StackOverflow: http://stackoverflow.com/questions/tagged/itext&lt;/div&gt;&lt;div&gt;nuget.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://api.nuget.org/v3-flatcontainer/itextsharp/5.5.13/icon&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;iTextSharpの新しいバージョンを利用すると、沼にハマる可能性があります。非推奨です。以下の記事でもそのことを紹介しています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-merging-into-pdf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話&lt;/div&gt;&lt;div&gt;ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241027_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、PDFを暗号化するための処理を以下のように実装しました。&lt;/p&gt;&lt;p&gt;ChatGPT、NVIDIA NemotronやGeminiに聞きましたが、最も良い回答をくれたのはGeminiでしたね。iTextSharpを実際に使う部分でお世話になりました。（NVIDIA Nemotronは、iTextSharpの二重インポートを阻止するコードを書いてくれました。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Encrypt-PdfWithITextSharp&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SYNOPSIS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypts the specified PDF file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypts a PDF file using the iTextSharp library.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;InputPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The path to the PDF file to encrypt.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The output path for the encrypted PDF file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The encryption password for the PDF file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The iTextSharpPath library file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypt-PdfWithITextSharp -InputPath &quot;C:\Input.pdf&quot; -OutputPath &quot;C:\Encrypted_Output.pdf&quot; -Password &quot;YourStrongPassword&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$InputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$Password&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load iTextSharp.dll&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; ([&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.AppDomain&lt;/span&gt;&lt;span&gt;]::CurrentDomain.GetAssemblies() | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.Location&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;span&gt; })) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: InputPath:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$InputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: OutputPath:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: ITextSharpPath:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$permissions&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt;]::ALLOW_PRINTING &lt;/span&gt;&lt;span&gt;-bor&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt;]::ALLOW_COPY &lt;/span&gt;&lt;span&gt;-bor&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::ALLOW_MODIFY_ANNOTATIONS &lt;/span&gt;&lt;span&gt;# Set permissions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: permission set&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create instances of PDFReader and PDFStamper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfReader&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.pdf.PdfReader(&lt;/span&gt;&lt;span&gt;$InputPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: PDF reader loaded.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.pdf.PdfStamper(&lt;/span&gt;&lt;span&gt;$pdfReader&lt;/span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.IO.FileStream(&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.IO.FileMode&lt;/span&gt;&lt;span&gt;]::Create)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: encrypting PDF.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Encrypt the PDF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$ownerPassword&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$Password&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Set owner password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$userPassword&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$Password&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Set user password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: ownerPassword:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$ownerPassword&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: userPassword:&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$userPassword&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper.Writer.SetEncryption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::UTF8.GetBytes(&lt;/span&gt;&lt;span&gt;$userPassword&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::UTF8.GetBytes(&lt;/span&gt;&lt;span&gt;$ownerPassword&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$permissions&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::ENCRYPTION_AES_256&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Close PDFStamper and release resources&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: closing PDF.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper.Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfReader.Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: PDF encryption complete.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;An error occurred during PDF encryption. Details: &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].Message&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Encrypt-MultiPdfWithITextSharp&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SYNOPSIS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypts multiple PDF files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypts multiple PDF files using the iTextSharp library.  The output files are named with &quot;_encrypted&quot; appended before the .pdf extension.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ImgPathList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;An array of paths to the PDF files to encrypt.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Password&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The encryption password for the PDF files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PARAMETER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The path to the iTextSharp library DLL.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;EXAMPLE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypt-MultiPdfWithITextSharp -ImgPathList $pdfFiles -Password &quot;SecurePassword&quot; -ITextSharpPath &quot;C:\path\to\itextsharp.dll&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ImgPathList&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$Password&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Get image files to add into PDF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$path.FullName.Replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;_encrypted{0}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Encrypt&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PdfWithITextSharp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;InputPath &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;OutputPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Password &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$Password&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ITextSharpPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextFilePath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.pdf &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude PDFsharp&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$password&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input password for encrypted PDF......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$iTextFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\lib\itextsharp.dll&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Encrypt&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;MultiPdfWithITextSharp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ImgPathList &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Password &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$password&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ITextSharpPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextFilePath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; to terminate this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Encrypt-MultiPdfWithITextSharp&lt;/code&gt;に一つのディレクトリ内にあるPDFの配列を渡して、&lt;code&gt;Encrypt-PdfWithITextSharp&lt;/code&gt;で一つずつ暗号化していきます。&lt;/p&gt;&lt;p&gt;iTextSharpのDLLを読み込む際には、既に読み込まれているかどうかを判断してから読み込み処理に入るようにしています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; ([&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.AppDomain&lt;/span&gt;&lt;span&gt;]::CurrentDomain.GetAssemblies() | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.Location&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;span&gt; })) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$ITextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$pdfReader&lt;/code&gt;にPDFを開かせて、&lt;code&gt;$pdfStamper&lt;/code&gt;に開いているPDFを暗号化してもらいます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create instances of PDFReader and PDFStamper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfReader&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.pdf.PdfReader(&lt;/span&gt;&lt;span&gt;$InputPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: PDF reader loaded.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.pdf.PdfStamper(&lt;/span&gt;&lt;span&gt;$pdfReader&lt;/span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.IO.FileStream(&lt;/span&gt;&lt;span&gt;$OutputPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.IO.FileMode&lt;/span&gt;&lt;span&gt;]::Create)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: encrypting PDF.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$pdfStamper&lt;/code&gt;に暗号化してもらう時の処理はこんな感じで引数を指定をします。PDFのパスワードは2種類付けることが可能です。PDFのオーナー用と閲覧者用のパスワードです。&lt;code&gt;$permissions&lt;/code&gt;で、PDFのオーナーじゃないと行えなくなるアクションを設定します。（Adobe Acrobatでパスワードを付ける時は、確かオーナー用じゃないと印刷が出来なかった気がします。こんな風に仕分けられていたんですね。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$permissions&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt;]::ALLOW_PRINTING &lt;/span&gt;&lt;span&gt;-bor&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt;]::ALLOW_COPY &lt;/span&gt;&lt;span&gt;-bor&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::ALLOW_MODIFY_ANNOTATIONS &lt;/span&gt;&lt;span&gt;# Set permissions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper.Writer.SetEncryption&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::UTF8.GetBytes(&lt;/span&gt;&lt;span&gt;$userPassword&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::UTF8.GetBytes(&lt;/span&gt;&lt;span&gt;$ownerPassword&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$permissions&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::ENCRYPTION_AES_256&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;New-Object&lt;/code&gt;をしたので、オブジェクトを解放することを忘れない。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfStamper.Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfReader.Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、iTextSharpをPowerShellで叩いて、PDFを暗号化する処理を実装する試みでした。&lt;/p&gt;&lt;p&gt;以下が、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;iTextSharpは、&lt;code&gt;5.5.13&lt;/code&gt;をダウンロードした。おそらくこれが最新の安定版である。&lt;/li&gt;
&lt;li&gt;iTextSharpのDLLを読み込む際には、既に読み込まれているかどうかを判断することが出来る。&lt;/li&gt;
&lt;li&gt;PDFのパスワードは、オーナー用と閲覧者用の2種類を付けることが可能である。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;New-Object&lt;/code&gt;をしたので、オブジェクトを解放することを忘れない。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のPowerShell関連の記事&lt;a href=&quot;#その他のpowershell関連の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-trimming-needs-marchaling/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をトリミングしたいだけなのにマーシャリングを知らなくて沼った話&lt;/div&gt;&lt;div&gt;.NETの構造体「System.Drawing.Rectangle」の引数の型で沼りました。更に、BitmapのDisposeでオブジェクトの破棄、LockBitsで処理を軽くしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241026_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;マジで開けなくなったわ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで安全だ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud SQL】GolangでDBインスタンスへのオペレーション完了まで待つ</title><link>https://endorphinbath.com/posts/golang-cloud-sql-wait-operations-completing/</link><guid isPermaLink="true">https://endorphinbath.com/posts/golang-cloud-sql-wait-operations-completing/</guid><description>Go言語でCloud SQLに作成したDBインスタンスに対する処理が完了するまで待つようにします。「Error 409: Operation failed because another operation was already in progress. Try your request after the current operation is complete., operationInProgress」というエラーを回避します。</description><pubDate>Mon, 23 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれっ、あの関数って今日動いてなくないか・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ありゃりゃ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以前に作ったCloud SQLを自動で制御するツール&lt;a href=&quot;#以前に作ったcloud-sqlを自動で制御するツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にCloud SQLにDBインスタンスを自動で起動もしくは停止するCloud Run Functionsを作成して、自動実行させるようにしました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/golang-cloud-sql-saving/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Cloud SQL】GolangでDBインスタンスの開始停止をスケジュール実行して節約する&lt;/div&gt;&lt;div&gt;Golangで書いたCloud Run FunctionでCloud SQLインスタンスの起動と停止を行い、Cloud SchedularとPub/Subでスケジュール実行してコスト削減を図ります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241204_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このCloud SQL上のDBインスタンスを自動で起動もしくは停止する際に、別のオペレーションがそのDBインスタンスに対して動いていると、ちゃんと処理できなくなるんですよね。このようなエラーメッセージと共に。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Error 409: Operation failed because another operation was already in progress. Try your request after the current operation is complete., operationInProgress&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;ということで、今回はこのエラーメッセージに対する対策を施していきたいと思います。それではやっていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;対策の仕方&lt;a href=&quot;#対策の仕方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上記のエラーメッセージは、Cloud SQL上のDBインスタンスに対して何かしらの処理が動いていると表示されるものです。そしてそれは、直前に自分がDBに対して操作を実行していなくても発生することがあります。（もしかすると、DBのバックアップ処理とバッティングしてしまったりしているのかもしれません。）&lt;/p&gt;&lt;p&gt;今回のようなエラーが発生した時の対処法は、Google Cloud公式ページでも「一般的なベスト プラクティス」として掲示されていました。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sql/docs/mysql/best-practices?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;一般的なベスト プラクティス | Cloud SQL for MySQL | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;p&gt;Cloud SQL インスタンスは、前のオペレーションが完了するまで、新しいオペレーション リクエストを受け付けません。準備が整う前に新しいオペレーションを開始しようとすると、オペレーション リクエストは失敗します。こうしたオペレーションには、インスタンスの再起動も含まれます。
Google Cloud Console のインスタンス ステータスには、オペレーションが実行されているかどうかは反映されません。緑色のチェックマークは、インスタンスが&lt;code&gt;RUNNABLE&lt;/code&gt;状態にあることのみを示します。オペレーションが実行中かどうかを確認するには、&lt;code&gt;オペレーション&lt;/code&gt; タブに移動して、最新のオペレーションのステータスをチェックします。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;なので今回は、自分が意図していない処理が作動している時でも、その処理が終わるまで自分が実行したい処理の開始を待機させる処理を作って、今回のエラーを解消していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;オペレーション終了まで待機するための処理&lt;a href=&quot;#オペレーション終了まで待機するための処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上記の、処理が終わるまで自分が実行したい処理の開始を待機させる処理のコードです。Cloud SchedulerからCloud Pub/Sub経由でメッセージを受け取って、&lt;code&gt;ProcessPubSub&lt;/code&gt;エンドポイントにリクエストさせるCloud Run Functionsを想定しています。
&lt;code&gt;function.go&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;context&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;encoding/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;log&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;time&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;golang.org/x/oauth2/google&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;google.golang.org/api/option&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;google.golang.org/api/sqladmin/v1beta4&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github.com/GoogleCloudPlatform/functions-framework-go/funcframework&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PubSubMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;data&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessagePayload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;DiscordWebhookUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CloudSqlIconUrl&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WaitOperation&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Use a backoff strategy for retries&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;retryInterval&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Second&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// See more details at: https://pkg.go.dev/google.golang.org/api/sqladmin/v1beta4#OperationsListCall&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ops&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Operations&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;List&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;prj&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Do&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;failed to list operations: &lt;/span&gt;&lt;span&gt;%w&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ops&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Items&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ops&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;// Assuming we&apos;re interested in the most recent operation for the instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Status&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;DONE&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Operation &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt; completed with status: &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Status&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Operation completed successfully&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;RUNNING&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// Wait before retrying&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Operation &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt; is still running. Retrying in &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;retryInterval&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;retryInterval&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;// Includes &quot;FAILED&quot; and other possible states&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;operation &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt; failed with status: &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;, Error: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Status&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;op&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;No operations found for instance &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;. Retrying in &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;...&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;retryInterval&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// time.Sleep(retryInterval)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Operation completed successfully&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;operation timed out after &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Duration&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;retryInterval&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ProcessPubSub consumes and processes a Pub/Sub message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ProcessPubSub&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PubSubMessage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessagePayload&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Receiving a request with the following payload: &lt;/span&gt;&lt;span&gt;%+v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Unmarshal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Received a request with the following payload: &lt;/span&gt;&lt;span&gt;%+v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Request received for Cloud SQL instance &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt; action: &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Create an http.Client that uses Application Default Credentials.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;hc&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DefaultClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CloudPlatformScope&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Create the Google Cloud SQL service.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WithHTTPClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hc&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Wait until running operations are completed.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WaitOperation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error: &lt;/span&gt;&lt;span&gt;%+v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// my DB operations...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ChatGPTからは&lt;a href=&quot;https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/sql/v1#SqlOperationsServiceServer&quot; target=&quot;_blank&quot;&gt;コッチのGoパッケージ（genproto）&lt;/a&gt;で実装するように言われたんですけど、既に&lt;code&gt;google.golang.org/api/sqladmin/v1beta4&lt;/code&gt;のGoパッケージで処理を作っていたのでソッチで進めます。&lt;/p&gt;&lt;a href=&quot;https://pkg.go.dev/google.golang.org/api/sqladmin/v1beta4&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pkg.go.dev/static/shared/icon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;pkg.go.dev&lt;/span&gt;&lt;/div&gt;&lt;div&gt;sqladmin package - google.golang.org/api/sqladmin/v1beta4 - Go Packages&lt;/div&gt;&lt;div&gt;Package sqladmin provides access to the Cloud SQL Admin API.&lt;/div&gt;&lt;div&gt;pkg.go.dev&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;既にDB起動用に作成した&lt;code&gt;sqladmin.NewService&lt;/code&gt;の&lt;code&gt;Operations.List(prj).Instance(instance).Context(ctx).Do()&lt;/code&gt;で、目的のDBに対するオペレーションの一覧を取得して、最近のオペレーションが終了しているかどうかをfor文で確認するという流れです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;待機処理の実行結果&lt;a href=&quot;#待機処理の実行結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは実装した待機処理を実行してみます。DBインスタンスを起動した直後にDBインスタンスを停止する処理を実行したら、裏で何かしらのプロセスが実行されている間は、Go関数内のfor文がちゃんと回っています。（&lt;code&gt;Default STARTUP TCP probe succeeded after 1 attempt for container &quot;worker&quot; on port 8080.&lt;/code&gt;というメッセージが表示されました。DBを起動するためのプロセスですかね。DB起動処理実行後、4分ぐらい常駐していました。）
&lt;img loading=&quot;lazy&quot; width=&quot;1811&quot; height=&quot;632&quot; src=&quot;/_astro/11.BdGqVd34_P9gUE.webp&quot; srcset=&quot;/_astro/11.BdGqVd34_PSACS.webp 640w, /_astro/11.BdGqVd34_2uO6lR.webp 750w, /_astro/11.BdGqVd34_Zy3hTm.webp 828w, /_astro/11.BdGqVd34_JojN1.webp 1080w, /_astro/11.BdGqVd34_1T5Yel.webp 1280w, /_astro/11.BdGqVd34_ZcPLIU.webp 1668w, /_astro/11.BdGqVd34_P9gUE.webp 1811w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この待機処理の後に、DB起動処理、およびDiscordのWebhookを叩く処理があるので、それらの後続の処理も実行されていることが確認できました。
&lt;img loading=&quot;lazy&quot; width=&quot;1093&quot; height=&quot;553&quot; src=&quot;/_astro/12.BzM4OwUo_GqrJd.webp&quot; srcset=&quot;/_astro/12.BzM4OwUo_12DdOh.webp 640w, /_astro/12.BzM4OwUo_1MrJTK.webp 750w, /_astro/12.BzM4OwUo_b7Q9g.webp 828w, /_astro/12.BzM4OwUo_G1fSP.webp 1080w, /_astro/12.BzM4OwUo_GqrJd.webp 1093w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、シェルから実行する場合の参考。&lt;a href=&quot;#ちなみにシェルから実行する場合の参考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Golangではなくシェルから実行したい場合は、ここに&lt;code&gt;gcloud sql operations list&lt;/code&gt;というコマンドの公式リファレンスを参考できます。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/sql/operations/list&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud sql operations list | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;gcloudであれば、&lt;code&gt;gcloud sql operations wait&lt;/code&gt;でDBに対する現在のオペレーションが終わるまで待つためのコマンドも用意されているみたいです。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/sql/operations/wait&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud sql operations wait | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Go言語を使って、Cloud SQL上に作成したDBインスタンスに対する処理が完了するまで待つようにする処理を実装しました。
全く想定していなかった不具合だったので面食らいましたが、実装は容易なものでした。他のCloud SQLの「一般的なベスト プラクティス」も、DB周りをデプロイする際に参考にできそうですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud SQL関連の記事&lt;a href=&quot;#cloud-sql関連の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/golang-cloud-sql-saving-then-discord-notification/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Cloud SQL】GolangでDBインスタンスの開始停止をDiscordで通知する&lt;/div&gt;&lt;div&gt;Go言語でCloud SQLに作成したDBインスタンスを自動で開始および停止するCloud Run Functionsが実行された時に、Discord上で通知を飛ばす機能を実装する手順を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241209_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-cloudsql-postgresql-notion-page/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する（第1回）&lt;/div&gt;&lt;div&gt;NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241114_Eyecatch-1.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今日も実行されたな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;DB待機！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>NVIDIA NIMで利用できる生成AI</title><link>https://endorphinbath.com/posts/nvidia-nim-generative-ai/</link><guid isPermaLink="true">https://endorphinbath.com/posts/nvidia-nim-generative-ai/</guid><description>NVIDIA NIMで利用できるNemotron-340B-InstructやShutterstockのEdify-3D等の生成AIを色々と試してみた記事です。</description><pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか沢山のAIが転がっているなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どれか使ってみたいな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;NVIDIA NIMとは？&lt;a href=&quot;#nvidia-nimとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;NVIDIAは、生成AIを動かすために欠かせない半導体チップである「GPU」を作っている会社ですよね。2024-12-18時点で、そのシェアは市場トップです。&lt;/p&gt;&lt;p&gt;そして、そんなNVIDIAが運営している「NIM」という生成AI用のプラットフォームがあります。&lt;/p&gt;&lt;p&gt;この「NIM」では、NVIDIAが開発した生成AIやその他の雑多な生成AIを試しに使ってみたり、実際にビルドして利用することが可能になっています。今回は、そんなNVIDIA NIMで利用できる生成AIを実際に使ってみた記事を綴っていきます。&lt;/p&gt;&lt;p&gt;ちなみに、このプラットフォームの利用は、&lt;strong&gt;無料です&lt;/strong&gt;。
しかしながら、このNIMの&lt;strong&gt;個人アカウント&lt;/strong&gt;でAPIにリクエストできる回数は、1000回が上限らしいです。あと、APIを利用開始してから1週間でその1000回分のクレジットは無くなってしまいます・・・。それ以上は、&lt;strong&gt;法人アカウント&lt;/strong&gt;として作成しなければ利用できないみたいです。（APIではなくNIMプラットフォーム上でプロンプトするのであれば無限？）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;NIMで使える生成AI。&lt;a href=&quot;#nimで使える生成ai&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;NIMにはこちらのリンクから遷移することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/models&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;build.nvidia.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Try NVIDIA NIM APIs&lt;/div&gt;&lt;div&gt;Experience the leading models to build enterprise generative AI apps now.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/opengraph-image.jpg?6ec102a0470b935b&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;サイトを見てみると、沢山の生成AIが置いてありますね・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1261&quot; src=&quot;/_astro/11.xDofmJrJ_Z1AAwJN.webp&quot; srcset=&quot;/_astro/11.xDofmJrJ_uqYkN.webp 640w, /_astro/11.xDofmJrJ_Z19timz.webp 750w, /_astro/11.xDofmJrJ_Z10QLIa.webp 828w, /_astro/11.xDofmJrJ_Z1SyUbz.webp 1080w, /_astro/11.xDofmJrJ_Z1AxW5k.webp 1280w, /_astro/11.xDofmJrJ_Z7Cjn0.webp 1668w, /_astro/11.xDofmJrJ_Z2iqeh7.webp 2048w, /_astro/11.xDofmJrJ_Z1AAwJN.webp 2559w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このNIMで利用できる生成AIの一覧はこんな感じです。（2024-12-18時点で145個あるので一部だけ抜粋・・・。）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;meta/sam2&lt;/li&gt;
&lt;li&gt;writer/palmyra-creative-122b&lt;/li&gt;
&lt;li&gt;nvidia/llama-3.2-nv-embedqa-1b-v2&lt;/li&gt;
&lt;li&gt;nvidia/llama-3.2-nv-rerankqa-1b-v2&lt;/li&gt;
&lt;li&gt;nvidia/usdcode&lt;/li&gt;
&lt;li&gt;meta/llama-3.3-70b-instruct&lt;/li&gt;
&lt;li&gt;university-at-buffalo/cached&lt;/li&gt;
&lt;li&gt;nvidia/nv-yolox-page-elements-v1&lt;/li&gt;
&lt;li&gt;baidu/paddleocr&lt;/li&gt;
&lt;li&gt;nvidia/audio2face-3d&lt;/li&gt;
&lt;li&gt;nvidia/corrdiff&lt;/li&gt;
&lt;li&gt;nvidia/fourcastnet&lt;/li&gt;
&lt;li&gt;hive/deepfake-image-detection&lt;/li&gt;
&lt;li&gt;nvidia/llama-3.2-nv-rerankqa-1b-v1&lt;/li&gt;
&lt;li&gt;nvidia/llama-3.2-nv-embedqa-1b-v1&lt;/li&gt;
&lt;li&gt;nvidia/nemotron-4-mini-hindi-4b-instruct&lt;/li&gt;
&lt;li&gt;ibm/granite-guardian-3.0-8b&lt;/li&gt;
&lt;li&gt;shutterstock/edify-360-hdri&lt;/li&gt;
&lt;li&gt;nvidia/llama-3.1-nemotron-70b-instruct&lt;/li&gt;
&lt;li&gt;zyphra/zamba2-7b-instruct&lt;/li&gt;
&lt;li&gt;institute-of-science-tokyo/llama-3.1-swallow-70b-instruct-v0.1&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;などなど・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;APIを叩いてみる。&lt;a href=&quot;#apiを叩いてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは実際に、NIMで利用できる生成AIをいくつか試していきたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;NVIDIA/Llama-3.1-Nemotron-70B-Instruct&lt;a href=&quot;#nvidiallama-31-nemotron-70b-instruct&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Llama-3.1-Nemotron-70B-Instruct&lt;/code&gt;は、LLM によって生成された応答の有用性を向上させるために NVIDIA によってカスタマイズされた大規模言語モデルです。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/nvidia/llama-3_1-nemotron-70b-instruct&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;llama-3.1-nemotron-70b-instruct Model by NVIDIA | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Llama-3.1-Nemotron-70B-Instruct is a large language model customized by NVIDIA in order to improve the helpfulness of LLM generated responses.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/llama-3_1-nemotron-70b-instruct.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この&lt;code&gt;Nemotron-70B&lt;/code&gt;モデルには、いくつか種類があり、&lt;code&gt;Base&lt;/code&gt;、&lt;code&gt;Instruct&lt;/code&gt;や&lt;code&gt;Reward&lt;/code&gt;があります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Base&lt;/code&gt;モデルは、基本的なモデルを指します。このモデルから、&lt;code&gt;Instruct&lt;/code&gt;や&lt;code&gt;Reward&lt;/code&gt;モデルに派生していく感じですね。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Instruct&lt;/code&gt;モデルは、プロンプトから合成データを生成することが出来る生成AIモデルです。なので、少ないプロンプトからより多くの情報量をアウトプットしてくれます。そしてそのデータを他のAIに学習させれば、より高品質な情報をアウトプット出来るようになりそうですね。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Reward&lt;/code&gt;モデルは、人間の好みや価値観に沿った行動や結果を出せるように、AI モデルを整合させるための生成AIモデルだそうです。つまり、その整合されたデータで学習させることで、より倫理的で、より人間的なアウトプットが出来るようになるみたいです。&lt;/p&gt;&lt;p&gt;`Llama-3.1-Nemotron-70B-Instruct」のプロンプト画面はこんな感じです。（既にプロンプトはしました。）
&lt;img loading=&quot;lazy&quot; width=&quot;2541&quot; height=&quot;1264&quot; src=&quot;/_astro/12.WMk7iDDS_23xvYF.webp&quot; srcset=&quot;/_astro/12.WMk7iDDS_1gJLbV.webp 640w, /_astro/12.WMk7iDDS_Znavvr.webp 750w, /_astro/12.WMk7iDDS_Zg0SBl.webp 828w, /_astro/12.WMk7iDDS_1J4hJX.webp 1080w, /_astro/12.WMk7iDDS_Zx44G9.webp 1280w, /_astro/12.WMk7iDDS_Z2nsAxP.webp 1668w, /_astro/12.WMk7iDDS_rO65c.webp 2048w, /_astro/12.WMk7iDDS_23xvYF.webp 2541w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際にプロンプトしてみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下の英文を和訳して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Creates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diverse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;synthetic&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;that&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mimics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;characteristics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;real-world&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このような回答が返ってきました。詳しい説明も付け足してくれています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;以下が英文の和訳です。
（より詳しく和訳する場合は、以下の点に注意してください）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;次に、Pythonランタイムからプロンプトしてみます。そのために、APIキーを発行する必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1052&quot; height=&quot;640&quot; src=&quot;/_astro/13.Byz3uZ-T_25vKW5.webp&quot; srcset=&quot;/_astro/13.Byz3uZ-T_WdB0z.webp 640w, /_astro/13.Byz3uZ-T_Z1lA0C2.webp 750w, /_astro/13.Byz3uZ-T_Ia7HS.webp 828w, /_astro/13.Byz3uZ-T_25vKW5.webp 1052w&quot; /&gt;&lt;/p&gt;&lt;p&gt;NVIDIAアカウントでログインして、APIキーを出力します。
&lt;img loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;477&quot; src=&quot;/_astro/14.D_yNFKSi_1XbNg5.webp&quot; srcset=&quot;/_astro/14.D_yNFKSi_Z1HomQ1.webp 640w, /_astro/14.D_yNFKSi_ZIpPtE.webp 750w, /_astro/14.D_yNFKSi_1yO9l1.webp 828w, /_astro/14.D_yNFKSi_1XbNg5.webp 857w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのAPIキーを使って、NemotronのAPIを叩きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; openai &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; OpenAI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; httpx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;base_url&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;https://integrate.api.nvidia.com/v1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api_key&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;completion &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.chat.completions.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;nvidia/llama-3.1-nemotron-70b-instruct&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&quot;以下の英文を和訳して。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;Creates diverse synthetic data that mimics the characteristics of real-world data.&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&quot;&lt;/span&gt;&lt;span&gt;}],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;top_p&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;max_tokens&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;stream&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; chunk &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; completion:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; chunk.choices[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].delta.content &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunk.choices[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].delta.content, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Google ColabからAPIを叩く時に、「Client.&lt;strong&gt;init&lt;/strong&gt;() got an unexpected keyword argument ‘proxies’」というエラーメッセージが表示されたら、以下の流れで対処します。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;「&lt;code&gt;!pip install --upgrade openai&lt;/code&gt;」で&lt;code&gt;openai&lt;/code&gt;パッケージを更新しておきます。これで動かなかったら次の対応をする。&lt;/li&gt;
&lt;li&gt;「&lt;code&gt;!pip list&lt;/code&gt;」で&lt;code&gt;httpx&lt;/code&gt;パッケージのバージョンを確認する。0.28以上だったら、「&lt;code&gt;!pip install httpx==0.27.2&lt;/code&gt;」で古いバージョンにダウングレードする。（&lt;code&gt;httpx&lt;/code&gt;の非推奨の引数だった&lt;code&gt;&apos;proxies&apos;&lt;/code&gt;が0.28で削除されたので、&lt;code&gt;openai&lt;/code&gt;パッケージが&lt;code&gt;&apos;proxies&apos;&lt;/code&gt;を渡さないようにアップデートされるまでこの対応をする必要がある。）&lt;/li&gt;
&lt;li&gt;Colab Notebookのメニューバーの「Restart session」でカーネルを再起動する。そして実行してみる。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;同じ感じの回答が返ってきました。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;以下が英文の和訳です。 * 実世界のデータの特性を模倣する、多様な合成データを作成する。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NVIDIA/Nemotron-4-340B-Instruct&lt;a href=&quot;#nvidianemotron-4-340b-instruct&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;NVDIA/Nemotron-4-340B-Instruct&lt;/code&gt;は、実世界のデータの特性を模倣する、多様な合成データを生成するAIです。実際の現実世界のデータの特徴というのは、そのデータのパターン、分布、傾向などを指していて、その特徴に基づいて多様でリアルな合成データを自動生成する生成AIみたいです。（2024-12-18時点ではプレビュー版です。）&lt;/p&gt;&lt;p&gt;・・・と、&lt;code&gt;Llama-3.1-Nemotron-70B-Instruct&lt;/code&gt;に訳してもらったら、&lt;code&gt;実際のデータが不足している場合に、学習データやテストデータを増やすことができる&lt;/code&gt;ということも言っていました。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/nvidia/nemotron-4-340b-instruct&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;nemotron-4-340b-instruct Model by NVIDIA | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Creates diverse synthetic data that mimics the characteristics of real-world data.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/nemotron-4-340b-instruct.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この&lt;code&gt;Nemotron-340B&lt;/code&gt;モデルにも、いくつか種類があり、&lt;code&gt;Base&lt;/code&gt;、&lt;code&gt;Instruct&lt;/code&gt;や&lt;code&gt;Reward&lt;/code&gt;があります。70Bモデルと比較したいので、今回は&lt;code&gt;Instruct&lt;/code&gt;モデルを試していきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;NVIDIA/Nemotron-4-340B-Instruct&lt;/code&gt;のプロンプト画面は、&lt;code&gt;Llama-3.1-Nemotron-70B-Instruct&lt;/code&gt;の画面とほとんど変わりません。
&lt;img loading=&quot;lazy&quot; width=&quot;2548&quot; height=&quot;1253&quot; src=&quot;/_astro/15.Bt4GZHU-_Zu5SUh.webp&quot; srcset=&quot;/_astro/15.Bt4GZHU-_ZygHv3.webp 640w, /_astro/15.Bt4GZHU-_Z2bJ6t7.webp 750w, /_astro/15.Bt4GZHU-_szCjJ.webp 828w, /_astro/15.Bt4GZHU-_Z1Gqu52.webp 1080w, /_astro/15.Bt4GZHU-_ZEeGW8.webp 1280w, /_astro/15.Bt4GZHU-_Z2qwGx2.webp 1668w, /_astro/15.Bt4GZHU-_sQwmM.webp 2048w, /_astro/15.Bt4GZHU-_Zu5SUh.webp 2548w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際にプロンプトしてみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下の英文を和訳して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Creates diverse synthetic data that mimics the characteristics of real-world data.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;プロンプトしてみるとこのような回答が返ってきました。70Bよりもだいぶシンプルな回答が返ってきました。（英語の翻訳程度の作業に使うのは勿体ないか・・・）&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;実際のデータの特性を模倣した、多様な合成データを作成します。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;次に、Pythonランタイムからプロンプトしてみます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; openai &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; OpenAI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;base_url&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;https://integrate.api.nvidia.com/v1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api_key&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;completion &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; client.chat.completions.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;nvidia/nemotron-4-340b-instruct&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&quot;以下の英文を和訳して。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;Creates diverse synthetic data that mimics the characteristics of real-world data.&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&quot;&lt;/span&gt;&lt;span&gt;}],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;top_p&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.7&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;max_tokens&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;stream&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; chunk &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; completion:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; chunk.choices[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].delta.content &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(chunk.choices[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].delta.content, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;同じ感じの回答が返ってきました。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;実際のデータの特性を模倣した、多様な合成データを作成します。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;そして、&lt;code&gt;NVIDIA/Nemotron-4-340B-Instruct&lt;/code&gt;のプロンプト画面では、&lt;code&gt;Projects&lt;/code&gt;というタブがありました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;NVIDIA AI Workbench&lt;/code&gt;という単語が出てきました。この&lt;code&gt;NVIDIA AI Workbench&lt;/code&gt;というのは、事前学習済みの生成型 AI モデルおよび大規模言語モデル (LLMs) を簡単に作成、テスト、カスタマイズできる、統合された便利ツールキットのことだそうです。&lt;/p&gt;&lt;p&gt;それでは&lt;code&gt;Try this project&lt;/code&gt;をクリックしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1519&quot; height=&quot;765&quot; src=&quot;/_astro/16.DupQoBt__lbNOh.webp&quot; srcset=&quot;/_astro/16.DupQoBt__1lkBrt.webp 640w, /_astro/16.DupQoBt__1w7CVP.webp 750w, /_astro/16.DupQoBt__tOeLs.webp 828w, /_astro/16.DupQoBt__19XF4.webp 1080w, /_astro/16.DupQoBt__14CNcq.webp 1280w, /_astro/16.DupQoBt__lbNOh.webp 1519w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このような画面が表示されました・・・・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2304&quot; height=&quot;605&quot; src=&quot;/_astro/17.oErA7zmL_Z1Ho01t.webp&quot; srcset=&quot;/_astro/17.oErA7zmL_2mQpa0.webp 640w, /_astro/17.oErA7zmL_1tJRWN.webp 750w, /_astro/17.oErA7zmL_Z7qUO7.webp 828w, /_astro/17.oErA7zmL_ZcTKkk.webp 1080w, /_astro/17.oErA7zmL_10Klod.webp 1280w, /_astro/17.oErA7zmL_1yEpWY.webp 1668w, /_astro/17.oErA7zmL_Z1eJW7J.webp 2048w, /_astro/17.oErA7zmL_Z1Ho01t.webp 2304w&quot; /&gt;&lt;/p&gt;&lt;p&gt;どうやら、「NVIDIA AI Workbench」はローカルに生成AI環境を構築する機能のようです。しかし、企業レベルでGPUのクラスターを構成していなければとても使える代物ではなさそうですね・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NVIDIA/Consistory（画像生成）&lt;a href=&quot;#nvidiaconsistory画像生成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「NVIDIA/Consistory」は、追加のトレーニングを必要とせずに、複数の画像シリーズ全体で一貫したキャラクターを生成するAIです。（このモデルも、2024-12-18時点ではプレビュー版です。）&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/nvidia/consistory&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;consistory Model by NVIDIA | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Generates consistent characters across a series of images without requiring additional training.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/consistory.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;プロンプトする画面です。色々と入力する場所が分かれています。
&lt;img loading=&quot;lazy&quot; width=&quot;2554&quot; height=&quot;1243&quot; src=&quot;/_astro/18.BhnKOucM_Z2sTNFY.webp&quot; srcset=&quot;/_astro/18.BhnKOucM_z1Ph8.webp 640w, /_astro/18.BhnKOucM_Z13qxFV.webp 750w, /_astro/18.BhnKOucM_1ASb6U.webp 828w, /_astro/18.BhnKOucM_Z1kdvik.webp 1080w, /_astro/18.BhnKOucM_ZX60Ui.webp 1280w, /_astro/18.BhnKOucM_yV93O.webp 1668w, /_astro/18.BhnKOucM_19T296.webp 2048w, /_astro/18.BhnKOucM_Z2sTNFY.webp 2554w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Negative Promptも埋められますね。適当に埋めておいて、&lt;code&gt;Generate Anchors&lt;/code&gt;をクリックします。（なんでNegative Promptが赤くなってるのかはよく分かりません。）
&lt;img loading=&quot;lazy&quot; width=&quot;2278&quot; height=&quot;1133&quot; src=&quot;/_astro/19.r0ADmaAZ_1bu8Kr.webp&quot; srcset=&quot;/_astro/19.r0ADmaAZ_1UcHMg.webp 640w, /_astro/19.r0ADmaAZ_ghq4S.webp 750w, /_astro/19.r0ADmaAZ_nr2XY.webp 828w, /_astro/19.r0ADmaAZ_1rsXVo.webp 1080w, /_astro/19.r0ADmaAZ_ZOEnuI.webp 1280w, /_astro/19.r0ADmaAZ_2p8erw.webp 1668w, /_astro/19.r0ADmaAZ_adMgC.webp 2048w, /_astro/19.r0ADmaAZ_1bu8Kr.webp 2278w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2枚のAnchor画像が生成されました。&lt;code&gt;Next Steps&lt;/code&gt;に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;2290&quot; height=&quot;1137&quot; src=&quot;/_astro/20.DZ0Td2PR_1bRJ1O.webp&quot; srcset=&quot;/_astro/20.DZ0Td2PR_16kAls.webp 640w, /_astro/20.DZ0Td2PR_1YzpwP.webp 750w, /_astro/20.DZ0Td2PR_26J2qV.webp 828w, /_astro/20.DZ0Td2PR_ZXyRQp.webp 1080w, /_astro/20.DZ0Td2PR_1OtSvp.webp 1280w, /_astro/20.DZ0Td2PR_IgbFn.webp 1668w, /_astro/20.DZ0Td2PR_jkg1b.webp 2048w, /_astro/20.DZ0Td2PR_1bRJ1O.webp 2290w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次はこんな画面になりました。&lt;code&gt;Scenario Description&lt;/code&gt;を入力します。「The old woman remembered a lack of breads. She went buying slices of bread and miscellaneous. Then, she was going home. However, she saw a lion and a tiger in the park by the way.」といったプロンプトで生成します。
&lt;img loading=&quot;lazy&quot; width=&quot;2284&quot; height=&quot;1125&quot; src=&quot;/_astro/21.dowILPl8_1yj2xY.webp&quot; srcset=&quot;/_astro/21.dowILPl8_1p8P86.webp 640w, /_astro/21.dowILPl8_ZdjxOX.webp 750w, /_astro/21.dowILPl8_Z69UUR.webp 828w, /_astro/21.dowILPl8_YcFfT.webp 1080w, /_astro/21.dowILPl8_Z1dO9Tq.webp 1280w, /_astro/21.dowILPl8_Z2k2QJs.webp 1668w, /_astro/21.dowILPl8_zlmam.webp 2048w, /_astro/21.dowILPl8_1yj2xY.webp 2284w&quot; /&gt;&lt;/p&gt;&lt;p&gt;パンを持った妙齢の女性の画像が生成されました。一応近くに鳥もいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2289&quot; height=&quot;1121&quot; src=&quot;/_astro/22.CeLXo2al_1MikYU.webp&quot; srcset=&quot;/_astro/22.CeLXo2al_Z1cDD9o.webp 640w, /_astro/22.CeLXo2al_2f56Gt.webp 750w, /_astro/22.CeLXo2al_ZaMijB.webp 828w, /_astro/22.CeLXo2al_1RUUug.webp 1080w, /_astro/22.CeLXo2al_Zk5TF4.webp 1280w, /_astro/22.CeLXo2al_Z1md5ej.webp 1668w, /_astro/22.CeLXo2al_R6PUD.webp 2048w, /_astro/22.CeLXo2al_1MikYU.webp 2289w&quot; /&gt;&lt;/p&gt;&lt;p&gt;シード値を変えてもう少し生成します。なんかちょっと分かってきたような気が・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2283&quot; height=&quot;1131&quot; src=&quot;/_astro/23.BOJkAYox_cE5nD.webp&quot; srcset=&quot;/_astro/23.BOJkAYox_Z1CXT17.webp 640w, /_astro/23.BOJkAYox_1MhW5r.webp 750w, /_astro/23.BOJkAYox_ZCzrUD.webp 828w, /_astro/23.BOJkAYox_qT8zG.webp 1080w, /_astro/23.BOJkAYox_IU6FV.webp 1280w, /_astro/23.BOJkAYox_ZmiA96.webp 1668w, /_astro/23.BOJkAYox_ZLevNi.webp 2048w, /_astro/23.BOJkAYox_cE5nD.webp 2283w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次は、虎と闘っている妙齢の女性をAnchorに作りたいと思います。生成中・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2286&quot; height=&quot;1126&quot; src=&quot;/_astro/24.PHO1Kk1-_1QPMJk.webp&quot; srcset=&quot;/_astro/24.PHO1Kk1-_Zig1gN.webp 640w, /_astro/24.PHO1Kk1-_Z1UIpeR.webp 750w, /_astro/24.PHO1Kk1-_Z1NyMkL.webp 828w, /_astro/24.PHO1Kk1-_Z1dqvcH.webp 1080w, /_astro/24.PHO1Kk1-_1DIMqT.webp 1280w, /_astro/24.PHO1Kk1-_xv5AR.webp 1668w, /_astro/24.PHO1Kk1-_Z1ChOif.webp 2048w, /_astro/24.PHO1Kk1-_1QPMJk.webp 2286w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうそう、これこれ。
&lt;img loading=&quot;lazy&quot; width=&quot;2285&quot; height=&quot;1116&quot; src=&quot;/_astro/25.DIUOQ7iD_Z1G8jWw.webp&quot; srcset=&quot;/_astro/25.DIUOQ7iD_hPHOs.webp 640w, /_astro/25.DIUOQ7iD_1cxqK9.webp 750w, /_astro/25.DIUOQ7iD_Z1djXfV.webp 828w, /_astro/25.DIUOQ7iD_Z2ovNYR.webp 1080w, /_astro/25.DIUOQ7iD_sDtDJ.webp 1280w, /_astro/25.DIUOQ7iD_ZysFTv.webp 1668w, /_astro/25.DIUOQ7iD_ZPby18.webp 2048w, /_astro/25.DIUOQ7iD_Z1G8jWw.webp 2285w&quot; /&gt;&lt;/p&gt;&lt;p&gt;虎と闘っている妙齢の女性のAnchorを使って、「The old woman remembered a lack of breads. She went buying slices of bread and miscellaneous. Then, she was going home. However, she saw a lion and a tiger in the park by the way.」とScenarioにプロンプトして、別の画像を生成します。&lt;/p&gt;&lt;p&gt;そうすると、その別のシチュエーションで先程の虎と女性を描くことが出来ました。（Anchorにローカルにある画像をアップロードできたら用途が広がりそうですね。）
&lt;img loading=&quot;lazy&quot; width=&quot;2291&quot; height=&quot;1137&quot; src=&quot;/_astro/26.7QE24_6m_1waCTu.webp&quot; srcset=&quot;/_astro/26.7QE24_6m_Z2082P5.webp 640w, /_astro/26.7QE24_6m_Z16SdDH.webp 750w, /_astro/26.7QE24_6m_ZYIAJB.webp 828w, /_astro/26.7QE24_6m_ZDl3aq.webp 1080w, /_astro/26.7QE24_6m_Zlk54b.webp 1280w, /_astro/26.7QE24_6m_13u1mm.webp 1668w, /_astro/26.7QE24_6m_Z1QtHyp.webp 2048w, /_astro/26.7QE24_6m_1waCTu.webp 2291w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このモデルもPythonランタイムから実行してみます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; requests, base64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;invoke_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;https://ai.api.nvidia.com/v1/genai/nvidia/consistory&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;headers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Bearer $API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;payload &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;mode&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;init&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;subject_prompt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;an old woman wearing a dress&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;subject_tokens&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;woman&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;dress&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;subject_seed&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;43&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;style_prompt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;A photo of&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;scene_prompt1&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;walking in the garden&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;scene_prompt2&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;fighting a lion and a tiger wtih a large sword&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;negative_prompt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;cfg_scale&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;same_initial_noise&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.&lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;(invoke_url, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;headers, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;payload)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;response.&lt;/span&gt;&lt;span&gt;raise_for_status&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; response.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; idx, img_data &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(data[&lt;/span&gt;&lt;span&gt;&apos;artifacts&apos;&lt;/span&gt;&lt;span&gt;]):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_base64 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; img_data[&lt;/span&gt;&lt;span&gt;&quot;base64&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_bytes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; base64.&lt;/span&gt;&lt;span&gt;b64decode&lt;/span&gt;&lt;span&gt;(img_base64)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;idx&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;.jpg&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;wb&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(img_bytes)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;シード値は先程と同じなので、先程と同じ画像をローカルで生成することが出来ました。「Generate Scenario」の部分は、まだAPIでは叩けないようです。
&lt;img loading=&quot;lazy&quot; width=&quot;2549&quot; height=&quot;1303&quot; src=&quot;/_astro/27.B6gQ8Jxa_Zi8coD.webp&quot; srcset=&quot;/_astro/27.B6gQ8Jxa_Z16J6jL.webp 640w, /_astro/27.B6gQ8Jxa_ZdCm6X.webp 750w, /_astro/27.B6gQ8Jxa_2qyhHj.webp 828w, /_astro/27.B6gQ8Jxa_Ck2Mx.webp 1080w, /_astro/27.B6gQ8Jxa_Z1HTPUm.webp 1280w, /_astro/27.B6gQ8Jxa_1jybcw.webp 1668w, /_astro/27.B6gQ8Jxa_Z1MJ8xB.webp 2048w, /_astro/27.B6gQ8Jxa_Zi8coD.webp 2549w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NVIDIA/Audio2face-3D&lt;a href=&quot;#nvidiaaudio2face-3d&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;NVIDIA/Audio2face-3D&lt;/code&gt;は、ストリーミングオーディオをリアルタイムのリップシンクと顔のパフォーマンスに対応した顔のブレンドシェイプ（Facial Blendshapes）に変換してくれる生成AIです。つまり、音声を渡すとそれに合わせてキャラクターが喋ってくれるみたいです。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/nvidia/audio2face-3d&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;audio2face-3d Model by NVIDIA | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Converts streamed audio to facial blendshapes for realtime lipsyncing and facial performances.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/audio2face-3d.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;プロンプト画面はこんな感じです。インプットする音声サンプルを選ぶことが出来ます。表情の強さや自動で表情を付けるかを設定することも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;2546&quot; height=&quot;1264&quot; src=&quot;/_astro/31.CGAF5WWZ_Z1BvPq3.webp&quot; srcset=&quot;/_astro/31.CGAF5WWZ_Z27BCAL.webp 640w, /_astro/31.CGAF5WWZ_Z1emNpo.webp 750w, /_astro/31.CGAF5WWZ_Z17dbvi.webp 828w, /_astro/31.CGAF5WWZ_CNTUa.webp 1080w, /_astro/31.CGAF5WWZ_UOS1p.webp 1280w, /_astro/31.CGAF5WWZ_2kDYrW.webp 1668w, /_astro/31.CGAF5WWZ_1UI3MK.webp 2048w, /_astro/31.CGAF5WWZ_Z1BvPq3.webp 2546w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行してみると、右に映っている顔が動き始めました。
&lt;img loading=&quot;lazy&quot; width=&quot;1881&quot; height=&quot;936&quot; src=&quot;/_astro/32.Dh3QEkkb_Z1NvHJS.webp&quot; srcset=&quot;/_astro/32.Dh3QEkkb_YnO8Q.webp 640w, /_astro/32.Dh3QEkkb_Z8TSyd.webp 750w, /_astro/32.Dh3QEkkb_Z1bdhIA.webp 828w, /_astro/32.Dh3QEkkb_1ztTHW.webp 1080w, /_astro/32.Dh3QEkkb_5UHk8.webp 1280w, /_astro/32.Dh3QEkkb_Zne2Xd.webp 1668w, /_astro/32.Dh3QEkkb_Z1NvHJS.webp 1881w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Emotion Output&lt;/code&gt;を開くと、その時々の表情の成分を表示することが出来ます。&lt;code&gt;Angry&lt;/code&gt;が強い時や、&lt;code&gt;Joy&lt;/code&gt;が強かったり。
&lt;img loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;944&quot; src=&quot;/_astro/33.DZbjrjnn_Zsvalj.webp&quot; srcset=&quot;/_astro/33.DZbjrjnn_1Q4h1T.webp 640w, /_astro/33.DZbjrjnn_Z2tjkGy.webp 750w, /_astro/33.DZbjrjnn_1yzoW0.webp 828w, /_astro/33.DZbjrjnn_Z29KQGH.webp 1080w, /_astro/33.DZbjrjnn_1qR4Ip.webp 1280w, /_astro/33.DZbjrjnn_Y28bN.webp 1668w, /_astro/33.DZbjrjnn_Zsvalj.webp 1886w&quot; /&gt;&lt;/p&gt;&lt;p&gt;顔は、別のものを選ぶことも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1895&quot; height=&quot;930&quot; src=&quot;/_astro/34.vld2VA5b_2iV4L0.webp&quot; srcset=&quot;/_astro/34.vld2VA5b_ZFDx3h.webp 640w, /_astro/34.vld2VA5b_DbtCj.webp 750w, /_astro/34.vld2VA5b_aTA33.webp 828w, /_astro/34.vld2VA5b_Z1WBRcn.webp 1080w, /_astro/34.vld2VA5b_ZRy3W8.webp 1280w, /_astro/34.vld2VA5b_1cTbnA.webp 1668w, /_astro/34.vld2VA5b_2iV4L0.webp 1895w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Shutterstock/Edify-3D&lt;a href=&quot;#shutterstockedify-3d&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Shutterstockが提供している3D アセット生成AIです。NVIDIA Edify を使用して、Shutterstock のライセンス付きクリエイティブ ライブラリでトレーニングされているようです。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/explore/visual-design&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;build.nvidia.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Explore Visual Design Models | Try NVIDIA NIM APIs&lt;/div&gt;&lt;div&gt;Experience the leading models to build enterprise generative AI apps now.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/opengraph-image.jpg?6ec102a0470b935b&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;プロンプト画面はこんな感じです。既に緑色のイスが出力されています。このプロンプトは、&lt;code&gt;Image-to-3D&lt;/code&gt;という種類のプロンプト形式です。
&lt;img loading=&quot;lazy&quot; width=&quot;2538&quot; height=&quot;1254&quot; src=&quot;/_astro/35.BD3sD8lB_Z1LuBPL.webp&quot; srcset=&quot;/_astro/35.BD3sD8lB_12jYul.webp 640w, /_astro/35.BD3sD8lB_ZBAid2.webp 750w, /_astro/35.BD3sD8lB_ZsXLyC.webp 828w, /_astro/35.BD3sD8lB_24jwsX.webp 1080w, /_astro/35.BD3sD8lB_Z8HiGm.webp 1280w, /_astro/35.BD3sD8lB_Z1eV0wo.webp 1668w, /_astro/35.BD3sD8lB_UholL.webp 2048w, /_astro/35.BD3sD8lB_Z1LuBPL.webp 2538w&quot; /&gt;&lt;/p&gt;&lt;p&gt;別のイラストでプロンプトしてみます。先程と違うイラストを選んだら、&lt;code&gt;Generate Preview&lt;/code&gt;をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2543&quot; height=&quot;1245&quot; src=&quot;/_astro/36.sS6bcQtR_Z6H2Xw.webp&quot; srcset=&quot;/_astro/36.sS6bcQtR_jJ1rn.webp 640w, /_astro/36.sS6bcQtR_Z1iImvG.webp 750w, /_astro/36.sS6bcQtR_1lAmha.webp 828w, /_astro/36.sS6bcQtR_Z1v1S0c.webp 1080w, /_astro/36.sS6bcQtR_1m8pDp.webp 1280w, /_astro/36.sS6bcQtR_k1f5a.webp 1668w, /_astro/36.sS6bcQtR_Z2vPWyO.webp 2048w, /_astro/36.sS6bcQtR_Z6H2Xw.webp 2543w&quot; /&gt;&lt;/p&gt;&lt;p&gt;表示されたプレビューから、「Generate 3D」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2537&quot; height=&quot;1259&quot; src=&quot;/_astro/37.Bdf3bSC8_Z84VEz.webp&quot; srcset=&quot;/_astro/37.Bdf3bSC8_Z2qmz4H.webp 640w, /_astro/37.Bdf3bSC8_Z1x7JSk.webp 750w, /_astro/37.Bdf3bSC8_Z1pX7Ye.webp 828w, /_astro/37.Bdf3bSC8_1gQYQ4.webp 1080w, /_astro/37.Bdf3bSC8_1yRWWj.webp 1280w, /_astro/37.Bdf3bSC8_Z26u4q5.webp 1668w, /_astro/37.Bdf3bSC8_3Iks5.webp 2048w, /_astro/37.Bdf3bSC8_Z84VEz.webp 2537w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スケッチされたレーザーガンが3Dオブジェクトになりました。このオブジェクトはファイルとして出力することも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;2547&quot; height=&quot;1244&quot; src=&quot;/_astro/38.DVw0D9Nk_ZsOK05.webp&quot; srcset=&quot;/_astro/38.DVw0D9Nk_dVI72.webp 640w, /_astro/38.DVw0D9Nk_18Dr2I.webp 750w, /_astro/38.DVw0D9Nk_Z1hdWXm.webp 828w, /_astro/38.DVw0D9Nk_GIsJQ.webp 1080w, /_astro/38.DVw0D9Nk_Z1vimpt.webp 1280w, /_astro/38.DVw0D9Nk_2wLAPd.webp 1668w, /_astro/38.DVw0D9Nk_2g3IIA.webp 2048w, /_astro/38.DVw0D9Nk_ZsOK05.webp 2547w&quot; /&gt;&lt;/p&gt;&lt;p&gt;GLBファイルとして出力して、別のサイトで表示することが出来ました。Blenderとかで利用できそうですね。USDZファイルも開けるかもしれません。
&lt;img loading=&quot;lazy&quot; width=&quot;1462&quot; height=&quot;768&quot; src=&quot;/_astro/39.Bb629jIg_Z1362tt.webp&quot; srcset=&quot;/_astro/39.Bb629jIg_ZMNLv9.webp 640w, /_astro/39.Bb629jIg_1q08On.webp 750w, /_astro/39.Bb629jIg_ZKlfwe.webp 828w, /_astro/39.Bb629jIg_Zy0x7H.webp 1080w, /_astro/39.Bb629jIg_Z24hNcY.webp 1280w, /_astro/39.Bb629jIg_Z1362tt.webp 1462w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;Text-to-3D&lt;/code&gt;形式で3Dオブジェクトを生成することも可能でした。でもちょっと、のっぺりしてるような・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1246&quot; src=&quot;/_astro/40.we6IZoHT_Z28NPD2.webp&quot; srcset=&quot;/_astro/40.we6IZoHT_kMqS0.webp 640w, /_astro/40.we6IZoHT_Z1j7POn.webp 750w, /_astro/40.we6IZoHT_Z1avkaX.webp 828w, /_astro/40.we6IZoHT_Z1HsLux.webp 1080w, /_astro/40.we6IZoHT_Z1prNoi.webp 1280w, /_astro/40.we6IZoHT_3sOj2.webp 1668w, /_astro/40.we6IZoHT_Z27k5A5.webp 2048w, /_astro/40.we6IZoHT_Z28NPD2.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;プロンプトを「a redish raser gun」から「a redish raser gun, high detailed, glossy」に付け足すことで、もう少しディテールが細かく描かれたレーザーガンを生成することが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;2525&quot; height=&quot;1245&quot; src=&quot;/_astro/41.CMRO7BO5_Z1vAcPl.webp&quot; srcset=&quot;/_astro/41.CMRO7BO5_1OWu3K.webp 640w, /_astro/41.CMRO7BO5_Z2lYOyN.webp 750w, /_astro/41.CMRO7BO5_Z2dniUo.webp 828w, /_astro/41.CMRO7BO5_Z199soz.webp 1080w, /_astro/41.CMRO7BO5_1I0Pf2.webp 1280w, /_astro/41.CMRO7BO5_Z1SfEQz.webp 1668w, /_astro/41.CMRO7BO5_gWJ1A.webp 2048w, /_astro/41.CMRO7BO5_Z1vAcPl.webp 2525w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Shutterstock/Edify-360-HDRi&lt;a href=&quot;#shutterstockedify-360-hdri&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Shutterstockの 3D 360 度 HDRi (ハイダイナミックレンジイメージ) 生成サービスです。つまり、360度のワールド生成が出来る生成AIです。NVIDIA Edify を使用して、Shutterstock のライセンス付きクリエイティブ ライブラリでトレーニングされているようです。&lt;/p&gt;&lt;p&gt;360度のワールドというのは、例えば「RICOH THETA」とかの360度カメラで撮影した時に出力できるような映像のことです。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/shutterstock/edify-360-hdri&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;edify-360-hdri Model by Shutterstock | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Shutterstock Generative 3D service for 360 HDRi generation. Trained on NVIDIA Edify using Shutterstock’s licensed creative libraries.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/edify-360-hdri.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;プロンプト画面はこんな感じです。元々プロンプトされていて、その生成結果が表示されていました。
&lt;img loading=&quot;lazy&quot; width=&quot;2535&quot; height=&quot;1198&quot; src=&quot;/_astro/42.C9rEuuc7_1gBe8m.webp&quot; srcset=&quot;/_astro/42.C9rEuuc7_ZHyi3p.webp 640w, /_astro/42.C9rEuuc7_Z2kSB2T.webp 750w, /_astro/42.C9rEuuc7_11BI80.webp 828w, /_astro/42.C9rEuuc7_2btkb6.webp 1080w, /_astro/42.C9rEuuc7_LIPjd.webp 1280w, /_astro/42.C9rEuuc7_ZgVluA.webp 1668w, /_astro/42.C9rEuuc7_Z15JM1J.webp 2048w, /_astro/42.C9rEuuc7_1gBe8m.webp 2535w&quot; /&gt;&lt;/p&gt;&lt;p&gt;プロンプトを「a flat lookout point in the city with sunrise, a few autumn birch trees and beautiful skyscrapers in the background, god rays, dappled light shining through branches, scenic nature, inspiring, landscape panoramic, cityscape」という風に書き変えて生成してみます。
すると、先程表示されていたものとは違う情景が表示されました。
&lt;img loading=&quot;lazy&quot; width=&quot;2534&quot; height=&quot;1237&quot; src=&quot;/_astro/43.DWfMx23V_ZTQbdW.webp&quot; srcset=&quot;/_astro/43.DWfMx23V_1poPFS.webp 640w, /_astro/43.DWfMx23V_Zd3xhb.webp 750w, /_astro/43.DWfMx23V_2rgbvF.webp 828w, /_astro/43.DWfMx23V_ZDw1NC.webp 1080w, /_astro/43.DWfMx23V_2dDgOY.webp 1280w, /_astro/43.DWfMx23V_Z1jvGYP.webp 1668w, /_astro/43.DWfMx23V_TNea7.webp 2048w, /_astro/43.DWfMx23V_ZTQbdW.webp 2534w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Generate 8K HDRi&lt;/code&gt; をクリックして、8Kバージョンのものを生成してダウンロードします。そして、ダウンロードした圧縮ファイルを伸長した中に入っていたファイルは、Affinity Designer上で表示することが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1389&quot; src=&quot;/_astro/44.Cum2Vc66_3NgPM.webp&quot; srcset=&quot;/_astro/44.Cum2Vc66_Z13nxRo.webp 640w, /_astro/44.Cum2Vc66_1EqwSX.webp 750w, /_astro/44.Cum2Vc66_2tvAdX.webp 828w, /_astro/44.Cum2Vc66_Z1nGhvv.webp 1080w, /_astro/44.Cum2Vc66_oKxIv.webp 1280w, /_astro/44.Cum2Vc66_Z1JBAfy.webp 1668w, /_astro/44.Cum2Vc66_TqJDz.webp 2048w, /_astro/44.Cum2Vc66_3NgPM.webp 2559w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事は、「NIM」というNVIDIAが運営している生成AIをビルドできるプラットフォームおよびそこで利用できる生成AIに関して紹介しました。
プラットフォーム内での利用は無料ですし、APIも利用回数の制限がありながらも無料でした。この機会に色々なAIを触ってみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;色々出来そうで楽しい！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;しかし、APIキーの利用制限がな・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】Pydanticのvalidatorが非推奨だからfield_validatorを使って2段階バリデーションを実装する</title><link>https://endorphinbath.com/posts/pydantic-field-validator-implementation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/pydantic-field-validator-implementation/</guid><description>@validatorはdeprecatedになってるし、@field_validatorにはpreとかalwaysフラグが無いから、from pydantic.functional_validators import field_validatorでインポートしたfield_validatorを使用する方法と、BeforeValidatorとAfterValidatorをAnnotateの中に入れる実装方法を試した。</description><pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くそう、こんがらがってきやがった・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;クロージャを使ってバリデーションチェックですね。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PydanticのBaseModelのバリデーションをする&lt;a href=&quot;#pydanticのbasemodelのバリデーションをする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonには、Pydanticという強力な型アノテーションおよび値のバリデーションを実装することが出来るライブラリがあります。&lt;/p&gt;&lt;p&gt;Python標準パッケージの中に&lt;code&gt;dataclasses&lt;/code&gt;という似たような型ヒント用のライブラリもありますが、Pydanticの方がもっと強力に例外を発生することが出来るので、堅牢なコードを書くことが出来ます。&lt;/p&gt;&lt;p&gt;僕個人的には、Pydanticを導入したらコーディング中に型の不整合によってハマることは無くなりましたし、テストコードも使う以前よりも書きやすくなりました。&lt;/p&gt;&lt;a href=&quot;https://pydantic.dev/docs/validation/latest/get-started/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Pydantic Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Welcome to Pydantic&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;pydantic.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/og/validation/latest/get-started/index.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして今回は、そのPydanticの機能を利用する上で最も使うであろうクラスの&lt;code&gt;BaseModel&lt;/code&gt;クラスに対する型アノテーションと値のバリデーションチェックを実装するまでの流れを紹介していきます。&lt;/p&gt;&lt;p&gt;ちなみに今回作ったコードは、以下のNotionのデータベースから取得したデータをAPIを介して渡したりリクエストするために作っていたものです。なので&lt;code&gt;NotionTasks&lt;/code&gt;とかいうクラス名になっているわけです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-cloudsql-postgresql-notion-page/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する（第1回）&lt;/div&gt;&lt;div&gt;NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241114_Eyecatch-1.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;「クラス」メソッドと「インスタンス」メソッドの分別を付ける。&lt;a href=&quot;#クラスメソッドとインスタンスメソッドの分別を付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まあ、まずはChatGPTに質問してみるわけです。「Pydanticでバリデーションチェックをするコードを書いて。」と。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, validator, ValidationError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_name&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 任意フィールド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;check_not_none&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# OK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;John&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(model)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Error: name cannot be None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; ValidationError &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(e)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして疑問に思うわけです。&lt;/p&gt;&lt;p&gt;この&lt;code&gt;pre&lt;/code&gt;と&lt;code&gt;always&lt;/code&gt;って・・・何だ？&lt;/p&gt;&lt;p&gt;そこでChatGPTに聞いてみるわけです。「&lt;code&gt;@validator(&quot;name&quot;, pre=True, always=True)&lt;/code&gt;の処理の内容を教えて。」と。そして、返ってきた回答を意訳するとこんな感じでした。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;pre=True&lt;/code&gt;は、バリデーションが「前処理の段階」で実行されることを意味します。
&lt;code&gt;always=True&lt;/code&gt;は、フィールドに値が提供されていなくても、常にバリデーションを実行します。
Pydanticでは、バリデーションには &lt;strong&gt;前処理（pre-processing）&lt;/strong&gt; と &lt;strong&gt;後処理（post-processing）&lt;/strong&gt; があります。&lt;code&gt;pre=True&lt;/code&gt; を設定すると、フィールドの型が適用される「前」にバリデーションが実行されます。また、&lt;code&gt;always=True&lt;/code&gt;を設定すると、「入力がない場合にデフォルト値を使うが、そのデフォルト値もバリデーションを通したい」といったケースをカバーできます。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;なるほど、クラスのフィールドに入る前と入る後の2種類のタイミングでバリデーションを評価することが出来るわけだ。すごいなPydantic。&lt;/p&gt;&lt;p&gt;この2つのモードでバリデーションをすれば、&lt;code&gt;BaseModel&lt;/code&gt;に代入する前にはデータベース（PostgreSQLなど）の中でnot nullで定義したカラムが何らかの理由でNoneになった場合に例外を出すことが出来ます。（&lt;code&gt;pre=True&lt;/code&gt;）&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;BaseModel&lt;/code&gt;に代入した後にはデフォルト値を定義しておくことで、必ず代入しなければならないフィールドに代入されていないことを検知できて、値自体の評価をすることも可能です。（&lt;code&gt;always=True&lt;/code&gt;）
よし、実装してみよう。
そして、渡されたコードを少しいじって動かしてみるわけです。ーーーしかし動かないのです。えっ・・・？&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, validator, ValidationError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_name&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# 任意フィールド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;check_not_none&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# OK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;John&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(model)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Error: name cannot be None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; ValidationError &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(e)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージの抜粋。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;pydantic.errors.PydanticUserError: @field_validator cannot be applied to instance methods&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; src=&quot;/_astro/11.BBuoI5Wg_Z18uHtK.webp&quot; srcset=&quot;/_astro/11.BBuoI5Wg_lmvOJ.webp 640w, /_astro/11.BBuoI5Wg_Z18ltFs.webp 750w, /_astro/11.BBuoI5Wg_1hNVsA.webp 828w, /_astro/11.BBuoI5Wg_ZvDrSp.webp 1080w, /_astro/11.BBuoI5Wg_Z22bRUP.webp 1280w, /_astro/11.BBuoI5Wg_Z18uHtK.webp 1408w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Positive prompt: Anime style, high quality, rough, (from above, upper body), 1 young woman with brown hairr, white eyes, Stinking eyes, wearing sports wear, sadness, under the blue sky&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;negative prompt: violence, sexual, derogatory, toxic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(generated by Imagen 3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;あれっ・・・、なんかそれっぽいイイ感じの回答が返ってきてたのに・・・。&lt;/p&gt;&lt;p&gt;いいえ、違います。これは僕がいじった内容に問題がありました。&lt;/p&gt;&lt;p&gt;これは、&lt;code&gt;@classmethod&lt;/code&gt;を入れて、メソッドの第一引数に&lt;code&gt;cls&lt;/code&gt;を指定したら直ります。なぜなら、Pythonで定義するクラスでは、そのクラスのメソッドの第一引数に&lt;code&gt;cls&lt;/code&gt;を指定するとクラスメソッド、&lt;code&gt;self&lt;/code&gt;を指定するとインスタンスメソッドになるんですよねそう言えば。&lt;/p&gt;&lt;p&gt;なので、インスタンスメソッドではなくクラスメソッドとしてバリデーション用のメソッドを実行すれば問題なく通るわけです。（この例外はそれなりにPythonを使ってないと気付かなそう。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓ class method&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;check_not_none&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓ instance method&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;always&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;check_not_none&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;@validatorデコレータは非推奨。&lt;a href=&quot;#validatorデコレータは非推奨&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それじゃあ、&lt;code&gt;cls&lt;/code&gt;を&lt;code&gt;self&lt;/code&gt;で指定して、そんでもって&lt;code&gt;@validator&lt;/code&gt;を使った実装でハイッ解決。　　とはなりませんでした。&lt;/p&gt;&lt;p&gt;色々調べていくと、判明してしまったのです。（いや、して良かった。）&lt;/p&gt;&lt;p&gt;なんと、&lt;code&gt;@validator&lt;/code&gt;デコレータは非推奨、deprecatedだったのです。（&lt;code&gt;@root_validator&lt;/code&gt;も非推奨です。）&lt;/p&gt;&lt;a href=&quot;https://pydantic.dev/docs/validation/latest/get-started/migration/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Pydantic Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Migration Guide&lt;/div&gt;&lt;div&gt;Migrating from Pydantic V1.&lt;/div&gt;&lt;div&gt;pydantic.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/og/validation/latest/get-started/migration.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;その公式ページには、&lt;code&gt;@validator&lt;/code&gt;は非推奨となり、さまざまな新機能と改善を提供する&lt;code&gt;@field_validator&lt;/code&gt; に置き換える必要があるとかなんやら記載されています。なので、&lt;code&gt;@field_validator&lt;/code&gt; でバリデーションの処理を書き換えました。それから、&lt;code&gt;self&lt;/code&gt;を渡していたメソッドに&lt;code&gt;cls&lt;/code&gt;を渡してクラスメソッドにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, Field, field_validator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_icon: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page icon&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_page_archived: &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;if page is archived&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_number&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must be over -1&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_con_id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must not be &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_page_id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have and not &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そしてさらに、クラスメソッドに&lt;code&gt;@classmethod&lt;/code&gt;のデコーレーターも付けて実行します。まあ、このコードは大丈夫だった気がします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, Field, field_validator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_icon: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page icon&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_page_archived: &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;if page is archived&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_number&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must be over -1&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_con_id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must not be &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@field_validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_page_id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have and not &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;FIELD_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;しかし・・・、&lt;code&gt;@field_validator&lt;/code&gt;では、先程の&lt;code&gt;@validator&lt;/code&gt;では設定できた、&lt;code&gt;pre=True&lt;/code&gt; とか、&lt;code&gt;always=True&lt;/code&gt;を設定することが出来ません。（&lt;code&gt;pre&lt;/code&gt;とかを設定するとそんな感じのエラーが表示されるんですよね。）なので、フィールドの中に入れる前か入れる後でアノテーションやらバリデーションやらが漏れてしまうんですよね・・・。&lt;/p&gt;&lt;p&gt;他の方法は無いのか。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;field_validatorのダブルバリデーションチェック&lt;a href=&quot;#field_validatorのダブルバリデーションチェック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pydanticの公式リファレンスのこのページにその方法が掲載されていました。&lt;/p&gt;&lt;a href=&quot;https://pydantic.dev/docs/validation/latest/concepts/validators/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Pydantic Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Validators&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;pydantic.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://pydantic.dev/docs/og/validation/latest/concepts/validators.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;基本的にはそのページの通りに実装しました。そして実装の方法が2種類あるようです。上記の公式ページでは2種類とも使用して実行順序を示してくれていますが、実際に使う時には片方で事足りると思います。&lt;/p&gt;&lt;p&gt;1つ目は、&lt;code&gt;from pydantic.functional_validators import field_validator&lt;/code&gt;でインポートした&lt;code&gt;field_validator&lt;/code&gt;を使用する方法です。まずは、この方法で実装してみます。&lt;/p&gt;&lt;p&gt;元々&lt;code&gt;@field_validator&lt;/code&gt;として実装していたものを、別のValidatorを使ってクロージャ（&lt;code&gt;Callable&lt;/code&gt;を返す関数）として作り直すのが煩雑で大変でした。なので、こういう場合は、ゼロから適当なクラスを作って、それをベースに実装し直すと楽かも。
そして、一旦ここまでコードが出来上がりました。これを実行してみます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Any, Callable, ClassVar, List, cast&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, Field, field_validator, ValidationInfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Validator makers definition&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; Callable[[Any, ValidationInfo], Any]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Any&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ValidationInfo&lt;/span&gt;&lt;span&gt;) -&amp;gt; Any:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; cannot be None&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; validator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validate_con_id_value&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; Callable[[Any, ValidationInfo], Any]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Any&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ValidationInfo&lt;/span&gt;&lt;span&gt;) -&amp;gt; Any:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must not be &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; validator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make_validator_page_id_value_is_valid&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; Callable[[Any, ValidationInfo], Any]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;validator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Any&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ValidationInfo&lt;/span&gt;&lt;span&gt;) -&amp;gt; Any:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have and not &apos;default_value&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(v) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;validation_target&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; must have &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;LENGTH_OF_CHARACTERS&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; validator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Schema definition&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: Annotated[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_icon: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page icon&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_page_archived: Annotated[&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;if page is archived&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_number_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_number_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_number_is_not_negative&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_con_id_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_con_id_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_con_id_value&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_id_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_id_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_page_id_value_is_valid&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Validate nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージです。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;raise PydanticUserError( pydantic.errors.PydanticUserError: A non-annotated attribute was detected: &lt;code&gt;val_target = &apos;con_id&apos;&lt;/code&gt;. All model fields require a type annotation; if &lt;code&gt;val_target&lt;/code&gt; is not meant to be a field, you may be able to resolve this error by annotating it as a &lt;code&gt;ClassVar&lt;/code&gt; or updating &lt;code&gt;model_config[&apos;ignored_types&apos;]&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; src=&quot;/_astro/12.CNhqC51f_2kjobX.webp&quot; srcset=&quot;/_astro/12.CNhqC51f_17dSOE.webp 640w, /_astro/12.CNhqC51f_Zmu6Fx.webp 750w, /_astro/12.CNhqC51f_23Fjsv.webp 828w, /_astro/12.CNhqC51f_Z281u1C.webp 1080w, /_astro/12.CNhqC51f_1qCdJS.webp 1280w, /_astro/12.CNhqC51f_2kjobX.webp 1408w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Positive prompt: Anime style, high quality, rough, (from above, upper body), 1 young woman with brown hair, white eyes, Stinking eyes, wearing sports wear, sadness, under the blue sky&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;negative prompt: violence, sexual, derogatory, toxic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(generated by Imagen 3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;やっぱりシード値が変わると印象変わるなあ。&lt;/p&gt;&lt;p&gt;まあエラーメッセージに色々書いてありますが、結局は、&lt;code&gt;ClassVar&lt;/code&gt;というアノテーションを付けるか、&lt;code&gt;model_config[&apos;ignored_types&apos;]&lt;/code&gt;を設定するかの2種類の選択肢があるようですね。今回は、&lt;code&gt;ClassVar&lt;/code&gt;を付けてクラス変数として定義するのが良さそうです。（先程も、インスタンスメソッドからクラスメソッドに直しましたね。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓ インスタンス変数として宣言してしまっている。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓ クラス変数にする。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; ClassVar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target: ClassVar[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デフォルト値を設定し忘れると、代入不足が検知できない。&lt;a href=&quot;#デフォルト値を設定し忘れると代入不足が検知できない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さあ、クラス変数にしたから直ったぞ。と思って実行するのですが・・・、&lt;/p&gt;&lt;p&gt;・・・ここで、例外が発生しない不具合が発生してしまいます。なんてこった・・・。&lt;/p&gt;&lt;p&gt;先程のソースでは、わざとフィールドが不足するようにインスタンスを作成しようとしていました。なので、例外が発生しなければおかしいわけです。しかし発生しなかった・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この原因としては2つありました。1つ目は、クラス変数の宣言時に、デフォルト値が設定されていないことが原因でした。そして2つ目は、&lt;code&gt;Field&lt;/code&gt;の中で&lt;code&gt;validate_default=True&lt;/code&gt;という設定も必要でした。元々&lt;code&gt;Annotated&lt;/code&gt;の中の&lt;code&gt;Field&lt;/code&gt;で設定した&lt;code&gt;&quot;default_value&quot;&lt;/code&gt;は何のフィルターとしても機能していなかったみたいです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Any, Callable, ClassVar, List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ↓ デフォルト値の設定をグローバルインスタンスに一元化した。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;TypedDict&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;logs: List[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;default_value: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;context &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[], &lt;/span&gt;&lt;/span&gt;&lt;span&gt;default_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ↓ 修正前：デフォルト値が設定されていない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Schema definition&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: Annotated[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ↓ 修正後：デフォルト値を設定した。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Schema definition&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: Annotated[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;修正したコードが下記のものです。これで、1つ目のバリデーション実装である、&lt;code&gt;from pydantic.functional_validators import field_validator&lt;/code&gt;でインポートした&lt;code&gt;field_validator&lt;/code&gt;を使用する方法が出来上がりました。（ちなみに、チラホラコメントアウトされている行は、2つ目の方法でバリデーションチェックを実装した部分です。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Any, Callable, ClassVar, List, cast&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing_extensions &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Annotated, TypedDict&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, Field, field_validator, AfterValidator, BeforeValidator, ValidationInfo, HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: Annotated[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_title: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;status: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_icon: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page icon&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_page_archived: Annotated[&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;if page is archived&quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target: ClassVar[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# number: Annotated[int, -1, BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_number_is_not_negative(val_target))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_number_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_number_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_number_is_not_negative&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# con_id: Annotated[str, Field(validate_default=True, example=&quot;TK000012345&quot;), BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_values_length_is_equal(val_target, 11))] = context[&quot;default_value&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_con_id_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_con_id_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_id: Annotated[str, Field(validate_default=True, description=&quot;Notion page UUID&quot;), BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_values_length_is_equal(val_target, 36))] = context[&quot;default_value&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_id_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_id_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_title: Annotated[str, Field(validate_default=True), BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_value_is_less(val_target, 120))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_title_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_title_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_value_is_less&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;120&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# status: Annotated[str, Field(validate_default=True, description=&quot;Notion page UUID&quot;), BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_values_length_is_equal(val_target, 36))] = context[&quot;default_value&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_status_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_status_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_icon: Annotated[str, Field(validate_default=True, description=&quot;Notion page icon&quot;), BeforeValidator(make_validator_it_is_not_none(val_target)), AfterValidator(make_validator_value_is_less(val_target, 2))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_icon_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_page_icon_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_value_is_less&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# is_page_archived: Annotated[bool, False, BeforeValidator(make_validator_it_is_not_none(val_target))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_is_page_archived_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Validates nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;例えばそのコードをFastAPI上で実行すると、フィールドの代入漏れがあると例外を発生するようになりました。これで、意図しないデータを誤ってレスポンスのボディに載せる挙動を無くすことが出来ます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; fastapi &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; FastAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;app &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FastAPI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;NotionSynchronizer API&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;summary&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Retrieves Notion pages and manages with PostgreSQL&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;You will be able to:&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- Retrieve Notion pages.&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- Store info of Notion pages into PostgreSQL.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0.0.1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;openapi_url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;/api/v0/openapi.json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;separate_input_output_schemas&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pydantic_core._pydantic_core.ValidationError: 1 validation error for NotionTask&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#  Value error, &apos;status&apos; must not be &apos;default_value&apos; [type=value_error, input_value=&apos;default_value&apos;, input_type=str]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Annotatedの中でダブルバリデーションチェック&lt;a href=&quot;#annotatedの中でダブルバリデーションチェック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、2つ目の実装方法である、&lt;code&gt;BeforeValidator&lt;/code&gt;と&lt;code&gt;AfterValidator&lt;/code&gt;を&lt;code&gt;Annotated&lt;/code&gt;の中に入れる実装方法です。&lt;/p&gt;&lt;p&gt;先程のコード内で、&lt;code&gt;from pydantic.functional_validators import field_validator&lt;/code&gt;でインポートした&lt;code&gt;field_validator&lt;/code&gt;を使用する実装部分をコメントアウトして、&lt;code&gt;BeforeValidator&lt;/code&gt;と&lt;code&gt;AfterValidator&lt;/code&gt;を&lt;code&gt;Annotated&lt;/code&gt;の中に入れる方法で実装した部分のコメントアウトを外します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# con_id: Annotated[str, Field(context[&quot;default_value&quot;], example=&quot;TK000012345&quot;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_id: Annotated[str, Field(context[&quot;default_value&quot;], description=&quot;Notion page UUID&quot;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_title: Annotated[str, Field(...)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# status: Annotated[str, Field(context[&quot;default_value&quot;], description=&quot;Notion page UUID&quot;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# page_icon: Annotated[str, Field(..., description=&quot;Notion page icon&quot;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# is_page_archived: Annotated[bool, Field(False, description=&quot;if page is archived&quot;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target: ClassVar[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number: Annotated[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_number_is_not_negative&lt;/span&gt;&lt;span&gt;(val_target))]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_number_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_number_after = field_validator(val_target, mode=&quot;after&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_number_is_not_negative(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;&lt;span&gt;))] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_con_id_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_con_id_after = field_validator(val_target, mode=&quot;after&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_values_length_is_equal(val_target, 11)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_id: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;&lt;span&gt;))] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_id_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_id_after = field_validator(val_target, mode=&quot;after&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_values_length_is_equal(val_target, 36)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_title: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_value_is_less&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;120&lt;/span&gt;&lt;span&gt;))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_title_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_title_after = field_validator(val_target, mode=&quot;after&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_value_is_less(val_target, 120)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;status: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page UUID&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;&lt;span&gt;))] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; context[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;default_value&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_status_before &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;before&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_status_after &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field_validator&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;make_validator_values_length_is_equal&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;page_icon: Annotated[&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;validate_default&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Notion page icon&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target)), &lt;/span&gt;&lt;span&gt;AfterValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_value_is_less&lt;/span&gt;&lt;span&gt;(val_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;))]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_icon_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_page_icon_after = field_validator(val_target, mode=&quot;after&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_value_is_less(val_target, 2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;val_target &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_page_archived: Annotated[&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;BeforeValidator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make_validator_it_is_not_none&lt;/span&gt;&lt;span&gt;(val_target))]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# val_is_page_archived_before = field_validator(val_target, mode=&quot;before&quot;)(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     make_validator_it_is_not_none(val_target)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Validates nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;このコードもFastAPI上で実行すると、先程のコードと同様にフィールドの代入漏れがあると例外を発生させるようになりました。（これが代入前のチェック。）&lt;/p&gt;&lt;p&gt;そして、フィールドの値自体が文字数の超過や不足が発生している場合も例外が発生するようになりました。（これが代入後のチェック。実は、先程のコードも同様のバリデーションチェックが可能です。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# statusフィールドが存在しない場合のチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pydantic_core._pydantic_core.ValidationError: 1 validation error for NotionTask&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   Value error, &apos;status&apos; must not be &apos;default_value&apos; [type=value_error, input_value=&apos;default_value&apos;, input_type=str]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# statusフィールドの文字列が短すぎる場合のチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK00001234578&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pydantic_core._pydantic_core.ValidationError: 1 validation error for NotionTask&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   Value error, &apos;status&apos; must have 36 characters [type=value_error, input_value=&apos;TK000012345TK000012345TK00001234578&apos;, input_type=str]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# statusフィールドの文字列が長すぎる場合のチェック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/task&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;return_all_tasks&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;con_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK000012345789&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_title&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;test test title no test&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;TK000012345TK000012345TK0000123457890&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;page_icon&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🍞&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;is_page_archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotionTask.&lt;/span&gt;&lt;span&gt;model_validate&lt;/span&gt;&lt;span&gt;(result, &lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;context)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;NotionTask&lt;/span&gt;&lt;span&gt;(**result)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pydantic_core._pydantic_core.ValidationError: 1 validation error for NotionTask&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   Value error, &apos;status&apos; must have 36 characters [type=value_error, input_value=&apos;TK000012345TK000012345TK0000123457890&apos;, input_type=str]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;このような流れで、Pydanticを用いてオブジェクトのフィールドの型安全を担保したコードを実装することが出来ます。これで自分のコードがより堅牢になると思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事は、クラスのフィールドのバリデーションチェックを&lt;code&gt;@validator&lt;/code&gt;で書いてみたが、&lt;code&gt;@validator&lt;/code&gt;はdeprecatedになってて、代わりに&lt;code&gt;@field_validator&lt;/code&gt;を使ってみる。しかし、&lt;code&gt;@field_validator&lt;/code&gt;には&lt;code&gt;pre&lt;/code&gt;とか&lt;code&gt;always&lt;/code&gt;フラグが無いから、&lt;code&gt;from pydantic.functional_validators import field_validator&lt;/code&gt;でインポートした&lt;code&gt;field_validator&lt;/code&gt;を使用する方法と、&lt;code&gt;BeforeValidator&lt;/code&gt;と&lt;code&gt;AfterValidator&lt;/code&gt;を&lt;code&gt;Annotate&lt;/code&gt;の中に入れる実装方法で実装してみた。という流れの記事でした。&lt;/p&gt;&lt;p&gt;例えば、データベースにデータを格納する時や、APIとしてレスポンスを返す時などに、Pydanticはより堅牢で明確な機能性を担保してくれるでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、形になったぞ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こういうのって最初が一番たいへんですよね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Glaspという素晴らしそうなWebスクラップツールと相見えました。Notionにエクスポートしたい。</title><link>https://endorphinbath.com/posts/glasp-wonderful-web-clipping-tool/</link><guid isPermaLink="true">https://endorphinbath.com/posts/glasp-wonderful-web-clipping-tool/</guid><description>GlaspというWeb上の動画や記事にある文字にハイライトするだけでクリップ出来るツールを紹介します。ある程度の文字数であればNotionにエクスポートも可能です。</description><pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ、なんだこのアプリは&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは捗りそうだ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Glaspというスクラップツール&lt;a href=&quot;#glaspというスクラップツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、「Glasp」というChrome拡張機能を見つけたので、その操作感についてまとめてみました。Glaspは一言で言うと、「選ぶだけで記録できるメモ帳」です。&lt;/p&gt;&lt;p&gt;結論としては、すごく使いやすかったです。しかし、まだまだ発展途上なので、もっともっと便利になっていきそうな気がします。&lt;/p&gt;&lt;p&gt;それでは、アカウントを作って使い始めるところからどうぞ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Glaspを始める。&lt;a href=&quot;#glaspを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、「glasp」とGoogleの検索窓に打ち込んで検索すると、Glaspの拡張機能をインストールするページに飛べるので飛んでみます。&lt;/p&gt;&lt;a href=&quot;https://glasp.co/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;glasp.co&lt;/span&gt;&lt;/div&gt;&lt;div&gt;glasp.co&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;glasp.co&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、Googleアカウントでサインインして、自分のGlaspのダッシュボードが作成されました。&lt;/p&gt;&lt;p&gt;そこで次に、設定に移ります。&lt;/p&gt;&lt;p&gt;GlaspのGoogle Chromeの拡張機能をインストールすると、Google Chromeブラウザ上で選択したテキストがハイライト表示されるようになります。すると、その瞬間にGlaspのダッシュボードというかノートブック的なものにそのハイライトが付いた部分およびそのWebページのURLがメモされます。&lt;/p&gt;&lt;p&gt;設定で、そのハイライトの色を変えられるようですね。デフォルトで青いハイライトが引かれるように設定しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1256&quot; height=&quot;828&quot; src=&quot;/_astro/11.C92AlS3z_2num3A.webp&quot; srcset=&quot;/_astro/11.C92AlS3z_2p46lm.webp 640w, /_astro/11.C92AlS3z_Zcn5zk.webp 750w, /_astro/11.C92AlS3z_ZpHWAR.webp 828w, /_astro/11.C92AlS3z_1scXLs.webp 1080w, /_astro/11.C92AlS3z_2num3A.webp 1256w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、ノートブックをプライベートなものにしてみたいですね・・・。と思って、「Private」をクリックしてみると・・・、おっと、どうやら課金しないとプライベートなノートは作成できないようです。（Glaspのスタンス的には、それぞれのユーザーが作成したノートブックが世界中の人々でシェア出来るようにしたいらしいです。）
&lt;img loading=&quot;lazy&quot; width=&quot;1175&quot; height=&quot;849&quot; src=&quot;/_astro/12.B4djHIZa_2qhxFJ.webp&quot; srcset=&quot;/_astro/12.B4djHIZa_xSfWv.webp 640w, /_astro/12.B4djHIZa_ZUWOwg.webp 750w, /_astro/12.B4djHIZa_ZRTLfL.webp 828w, /_astro/12.B4djHIZa_2jWNCF.webp 1080w, /_astro/12.B4djHIZa_2qhxFJ.webp 1175w&quot; /&gt;&lt;/p&gt;&lt;p&gt;他の色々なサービスと、そのノートブックを共有してやり取りすることが出来るみたいです。あとでNotionにメモを移したりしたいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;1040&quot; src=&quot;/_astro/13.BnrKHxyB_Z1RFTWF.webp&quot; srcset=&quot;/_astro/13.BnrKHxyB_rBmC8.webp 640w, /_astro/13.BnrKHxyB_Z20Yvjp.webp 750w, /_astro/13.BnrKHxyB_1gRWFp.webp 828w, /_astro/13.BnrKHxyB_Z1Yi9CV.webp 1080w, /_astro/13.BnrKHxyB_Z1RFTWF.webp 1252w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Glaspを始めたばかりのダッシュボードはこんな状態です。クリップしたWeb記事は何一つありません。ここにメモを貯めていきたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1270&quot; height=&quot;678&quot; src=&quot;/_astro/14.DYN2FR1C_Z1Jddj0.webp&quot; srcset=&quot;/_astro/14.DYN2FR1C_Z1c9Umd.webp 640w, /_astro/14.DYN2FR1C_Z1wOUGb.webp 750w, /_astro/14.DYN2FR1C_Z1IHSXp.webp 828w, /_astro/14.DYN2FR1C_2jzdTU.webp 1080w, /_astro/14.DYN2FR1C_Z1Jddj0.webp 1270w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;YouTubeの動画をメモする。&lt;a href=&quot;#youtubeの動画をメモする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;設定は一旦終えて、実際にGlaspをGoogle Chrome上で使っていきましょう。&lt;/p&gt;&lt;p&gt;適当に動画を開いてどのようにGlaspが動くのかを確認します。開いた動画はNASに関する動画です。動画の再生領域の横に、Glaspの機能で文字起こしされた内容が表示されています。その文字起こししたテキストの一部をマウスで選択すると、青いハイライトが付きました。
&lt;img loading=&quot;lazy&quot; width=&quot;1232&quot; height=&quot;666&quot; src=&quot;/_astro/15.DLluq4g7_1BHu7j.webp&quot; srcset=&quot;/_astro/15.DLluq4g7_CGChN.webp 640w, /_astro/15.DLluq4g7_ZgYRCh.webp 750w, /_astro/15.DLluq4g7_Z12TluC.webp 828w, /_astro/15.DLluq4g7_Z1RGnhF.webp 1080w, /_astro/15.DLluq4g7_1BHu7j.webp 1232w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ハイライトされた部分は、X（旧Twitter）にシェアしたり、Glasp上でタグ付けすることが出来ます。ハイライトの色も変えられるようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1242&quot; height=&quot;733&quot; src=&quot;/_astro/16.DolhCosA_1qUqDd.webp&quot; srcset=&quot;/_astro/16.DolhCosA_tUiKQ.webp 640w, /_astro/16.DolhCosA_ZEPiFw.webp 750w, /_astro/16.DolhCosA_1UmQtI.webp 828w, /_astro/16.DolhCosA_Z21Phm3.webp 1080w, /_astro/16.DolhCosA_1qUqDd.webp 1242w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、自分のGlaspのアカウントのダッシュボードを確認します。すると、先程ハイライトされた部分と、そのYouTubeのURLが記録されています。この記録したクリップ的なものに自分の考えやメモを書き足すことも出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;745&quot; src=&quot;/_astro/17.Cu2Dd6IX_1FnnGq.webp&quot; srcset=&quot;/_astro/17.Cu2Dd6IX_Z9KjGB.webp 640w, /_astro/17.Cu2Dd6IX_18BNeF.webp 750w, /_astro/17.Cu2Dd6IX_1PHIBn.webp 828w, /_astro/17.Cu2Dd6IX_FWQld.webp 1080w, /_astro/17.Cu2Dd6IX_1FnnGq.webp 1272w&quot; /&gt;&lt;/p&gt;&lt;p&gt;他の動画もGlaspにメモしていきましょう。
次は、視聴者の自宅のサーバーにコメントしていく実況者の動画です。この動画の文字起こしにも青いハイライトを付けました。
&lt;img loading=&quot;lazy&quot; width=&quot;1203&quot; height=&quot;592&quot; src=&quot;/_astro/18.DTTqOV-k_Zj9tYL.webp&quot; srcset=&quot;/_astro/18.DTTqOV-k_3pb4k.webp 640w, /_astro/18.DTTqOV-k_1nfcJU.webp 750w, /_astro/18.DTTqOV-k_TXjaE.webp 828w, /_astro/18.DTTqOV-k_AsXnG.webp 1080w, /_astro/18.DTTqOV-k_Zj9tYL.webp 1203w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ハイライトをクリックしてから表示された&lt;code&gt;Add a tag&lt;/code&gt;をクリックすると、タグを追加することが出来ます。&lt;code&gt;PC&lt;/code&gt;というタグを追加してみました。このポップアップでは、自分の考えやメモを書くことも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;687&quot; height=&quot;447&quot; src=&quot;/_astro/19.CDfVje8V_Z2slTtY.webp&quot; srcset=&quot;/_astro/19.CDfVje8V_Z11SRCt.webp 640w, /_astro/19.CDfVje8V_Z2slTtY.webp 687w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;クリップしたページをAIに要約させる。&lt;a href=&quot;#クリップしたページをaiに要約させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Glaspの文字起こし部分に&lt;code&gt;Summarize Video&lt;/code&gt;というボタンがあります。おそらく大規模言語モデルにページの内容を要約させるのでしょう。クリックしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1055&quot; height=&quot;615&quot; src=&quot;/_astro/20.teKrgyta_Z1vzIXY.webp&quot; srcset=&quot;/_astro/20.teKrgyta_Z1x5dV3.webp 640w, /_astro/20.teKrgyta_ZeH5YL.webp 750w, /_astro/20.teKrgyta_snOmV.webp 828w, /_astro/20.teKrgyta_Z1vzIXY.webp 1055w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おおっと・・・、&lt;code&gt;Summarize Video&lt;/code&gt;はどうやらGlaspの有料プランに加入しないと利用できないみたいです・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;458&quot; height=&quot;324&quot; src=&quot;/_astro/21.BuO3Hwyj_1BhRO9.webp&quot; srcset=&quot;/_astro/21.BuO3Hwyj_1BhRO9.webp 458w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、無料プランでも利用できる&lt;code&gt;Summarize Video (Open New Tab)&lt;/code&gt;をクリックしてみます。おそらく、ChatGPTに要約させるのでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;424&quot; height=&quot;155&quot; src=&quot;/_astro/22.D5sP5a76_1h4gco.webp&quot; srcset=&quot;/_astro/22.D5sP5a76_1h4gco.webp 424w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クリックすると、ブラウザ上でChatGPTのページが表示されて徐ろに文字起こし部分がそのままプロンプトされ始めました。これは便利ですね。
&lt;img loading=&quot;lazy&quot; width=&quot;935&quot; height=&quot;506&quot; src=&quot;/_astro/23.B6fH-Pte_ZlAIyx.webp&quot; srcset=&quot;/_astro/23.B6fH-Pte_ZFUOzB.webp 640w, /_astro/23.B6fH-Pte_9adX7.webp 750w, /_astro/23.B6fH-Pte_ZSJCTU.webp 828w, /_astro/23.B6fH-Pte_ZlAIyx.webp 935w&quot; /&gt;&lt;/p&gt;&lt;p&gt;入力されたプロンプトに対して、GPT-4oが要約作業を始めました。果たしてどのような出力になるのでしょうか・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;930&quot; height=&quot;726&quot; src=&quot;/_astro/24.DWxPYwwC_8z8Gv.webp&quot; srcset=&quot;/_astro/24.DWxPYwwC_2nsyiJ.webp 640w, /_astro/24.DWxPYwwC_ZoaUgX.webp 750w, /_astro/24.DWxPYwwC_s3CQw.webp 828w, /_astro/24.DWxPYwwC_8z8Gv.webp 930w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出力された内容が英語だったので、和訳するように再度プロンプトしました。
&lt;img loading=&quot;lazy&quot; width=&quot;952&quot; height=&quot;992&quot; src=&quot;/_astro/25.HVfedjra_1gBbv.webp&quot; srcset=&quot;/_astro/25.HVfedjra_1Owi9D.webp 640w, /_astro/25.HVfedjra_Z1uT0Tw.webp 750w, /_astro/25.HVfedjra_Z1MHrWg.webp 828w, /_astro/25.HVfedjra_1gBbv.webp 952w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし結果を見てみると、確かに動画の内容の要約にはなっているのですが、なんか僕が欲しい情報とは違いました・・・。（紹介されているサーバーの機器とかの情報を網羅して欲しかった。）ここは学習させたAIモデルが必要そうです。
&lt;img loading=&quot;lazy&quot; width=&quot;981&quot; height=&quot;774&quot; src=&quot;/_astro/26.lBL61Xm2_1mYgXv.webp&quot; srcset=&quot;/_astro/26.lBL61Xm2_2fwDwr.webp 640w, /_astro/26.lBL61Xm2_Z2g979u.webp 750w, /_astro/26.lBL61Xm2_Z1oTy10.webp 828w, /_astro/26.lBL61Xm2_1mYgXv.webp 981w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;フォローアッププロンプトを使う。&lt;a href=&quot;#フォローアッププロンプトを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AIに文字起こしをプロンプトした後に、追加で入力するプロンプトを設定することが可能です。&lt;/p&gt;&lt;p&gt;Glaspの設定画面で、&lt;code&gt;Follow-up Prompts&lt;/code&gt;を&lt;code&gt;Translate output in Japanese&lt;/code&gt;と設定しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1434&quot; height=&quot;842&quot; src=&quot;/_astro/27.B5D8G1d5_l57az.webp&quot; srcset=&quot;/_astro/27.B5D8G1d5_ZXeyAj.webp 640w, /_astro/27.B5D8G1d5_Z1xXFrz.webp 750w, /_astro/27.B5D8G1d5_12etHF.webp 828w, /_astro/27.B5D8G1d5_X60D2.webp 1080w, /_astro/27.B5D8G1d5_ZzqD30.webp 1280w, /_astro/27.B5D8G1d5_l57az.webp 1434w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに、&lt;code&gt;Strategy for Longer Videos/Articles&lt;/code&gt;で、&lt;code&gt;Equally sized chunks&lt;/code&gt;から&lt;code&gt;Start to Limit&lt;/code&gt;に変更しておきます。これで出力結果が少し変わるのか。
&lt;img loading=&quot;lazy&quot; width=&quot;1218&quot; height=&quot;750&quot; src=&quot;/_astro/28.CjgRV02C_ZzoXMS.webp&quot; srcset=&quot;/_astro/28.CjgRV02C_ZWUa0Q.webp 640w, /_astro/28.CjgRV02C_1eqQzm.webp 750w, /_astro/28.CjgRV02C_Z1L08SE.webp 828w, /_astro/28.CjgRV02C_15H73v.webp 1080w, /_astro/28.CjgRV02C_ZzoXMS.webp 1218w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Follow-up Prompts&lt;/code&gt;を設定したことで、次にプロンプトする内容がブラウザ上で表示されるようになりました。これは便利ですね。
&lt;img loading=&quot;lazy&quot; width=&quot;975&quot; height=&quot;674&quot; src=&quot;/_astro/29.CrFuPeOt_Z1s48Ej.webp&quot; srcset=&quot;/_astro/29.CrFuPeOt_1MJN4L.webp 640w, /_astro/29.CrFuPeOt_Z296VSI.webp 750w, /_astro/29.CrFuPeOt_ZpSrEa.webp 828w, /_astro/29.CrFuPeOt_Z1s48Ej.webp 975w&quot; /&gt;&lt;/p&gt;&lt;p&gt;表示された部分をクリックすることでプロンプト出来ました。しかし、出力結果は先程とあまり変わらないような気がする・・・。こればっかりはしょうがないか・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;950&quot; height=&quot;691&quot; src=&quot;/_astro/30.DcMNeTVo_1XOMQK.webp&quot; srcset=&quot;/_astro/30.DcMNeTVo_1f3vjv.webp 640w, /_astro/30.DcMNeTVo_V6yG0.webp 750w, /_astro/30.DcMNeTVo_13WKKi.webp 828w, /_astro/30.DcMNeTVo_1XOMQK.webp 950w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;「Clone AI」を使ってみる。&lt;a href=&quot;#clone-aiを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、Glaspにクリップを貯めていくことで、自分の&lt;code&gt;Clone AI&lt;/code&gt;なる存在が自分のクリップの情報を元に自分の質問に対して回答してくれるようになります。&lt;/p&gt;&lt;p&gt;先程、NASの動画を見たのでNASに関する質問に答えられるかどうかを試してみます。「イチオシのNASを教えて。」とプロンプトしてみると・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1064&quot; height=&quot;336&quot; src=&quot;/_astro/31.DFQ55iGu_Z1AoiLj.webp&quot; srcset=&quot;/_astro/31.DFQ55iGu_1Kju7J.webp 640w, /_astro/31.DFQ55iGu_2vg6bM.webp 750w, /_astro/31.DFQ55iGu_ZHE25D.webp 828w, /_astro/31.DFQ55iGu_Z1AoiLj.webp 1064w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まだ難しかったようです・・・。おそらく、クリップしたWebサイトに書いてある情報を取り出すのではなく、クリップに記録されている内容しか見ないので、ちゃんとクリップに記録してある必要があるみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;他のAIモデルも使ってみる。&lt;a href=&quot;#他のaiモデルも使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程、ChatGPTで要約してみましたが、今度は Google AI Studio で要約させてみたいと思います。
Glaspの設定で、&lt;code&gt;Default&lt;/code&gt;から&lt;code&gt;Google AI Studio&lt;/code&gt;にAI Modelを変更します。
&lt;img loading=&quot;lazy&quot; width=&quot;1450&quot; height=&quot;795&quot; src=&quot;/_astro/32.CcMtcW0t_22FXQB.webp&quot; srcset=&quot;/_astro/32.CcMtcW0t_1Fv19u.webp 640w, /_astro/32.CcMtcW0t_bM0Di.webp 750w, /_astro/32.CcMtcW0t_Zz7se3.webp 828w, /_astro/32.CcMtcW0t_Z2v5jig.webp 1080w, /_astro/32.CcMtcW0t_lmN6c.webp 1280w, /_astro/32.CcMtcW0t_22FXQB.webp 1450w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程と同様に、新規でGoogle AI Studioのタブが開かれました。視聴者の自宅のサーバーにコメントしていく実況者の動画を要約してもらいます。Google AI Studioの場合、&lt;code&gt;Follow-up Prompts&lt;/code&gt;に設定したプロンプトが表示されたボタンは表示されませんでした。なので、手入力でフォローアッププロンプトを入力しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1046&quot; height=&quot;736&quot; src=&quot;/_astro/33.ZbN-Xwrb_Z2lCVj0.webp&quot; srcset=&quot;/_astro/33.ZbN-Xwrb_Z1onF2s.webp 640w, /_astro/33.ZbN-Xwrb_8Utrx.webp 750w, /_astro/33.ZbN-Xwrb_Z177cto.webp 828w, /_astro/33.ZbN-Xwrb_Z2lCVj0.webp 1046w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google AI Studio（Gemini 1.5 Pro）の方が、ChatGPT-4oよりも欲しい情報が詰まっていました。僕の個人的にはGeminiの方が相性が良いのかなあやっぱり。
&lt;img loading=&quot;lazy&quot; width=&quot;775&quot; height=&quot;673&quot; src=&quot;/_astro/34.D4IdGgcM_1yxtJJ.webp&quot; srcset=&quot;/_astro/34.D4IdGgcM_ZxqSsr.webp 640w, /_astro/34.D4IdGgcM_2lmVsy.webp 750w, /_astro/34.D4IdGgcM_1yxtJJ.webp 775w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Glaspのダッシュボード上でもショートカットキーを入力すると、AI Modelへの要約プロンプトを実行することが出来ます。デフォルト設定だと&lt;code&gt;Ctrl + X, X&lt;/code&gt;です。
&lt;img loading=&quot;lazy&quot; width=&quot;1257&quot; height=&quot;637&quot; src=&quot;/_astro/35.D6gMGbyU_2lYj2y.webp&quot; srcset=&quot;/_astro/35.D6gMGbyU_280MQM.webp 640w, /_astro/35.D6gMGbyU_pFzyB.webp 750w, /_astro/35.D6gMGbyU_Z1bDjbS.webp 828w, /_astro/35.D6gMGbyU_1m85me.webp 1080w, /_astro/35.D6gMGbyU_2lYj2y.webp 1257w&quot; /&gt;&lt;/p&gt;&lt;p&gt;AI Modelで設定した「Google AI Studio」で要約作業が行われました。あっ、これはなんとなく使い方が分かってきたかもしれない・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2033&quot; height=&quot;1006&quot; src=&quot;/_astro/36.qV2sXztW_Ukjma.webp&quot; srcset=&quot;/_astro/36.qV2sXztW_lw6cc.webp 640w, /_astro/36.qV2sXztW_1eKUnz.webp 750w, /_astro/36.qV2sXztW_1lUxhF.webp 828w, /_astro/36.qV2sXztW_Z1kLhJr.webp 1080w, /_astro/36.qV2sXztW_Z12KjDc.webp 1280w, /_astro/36.qV2sXztW_Z28Y1te.webp 1668w, /_astro/36.qV2sXztW_Ukjma.webp 2033w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本的には、要約→和訳の流れ。&lt;a href=&quot;#基本的には要約和訳の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Glaspで記事や動画をクリップする時には、ハイライトするのも大事ですが、どうやらコンテンツの全文をメモしておくことで、Glaspの真価が発揮されるような気がします。&lt;/p&gt;&lt;p&gt;先程の動画から文字起こし部分を全てコピー（&lt;code&gt;Copy Transcript&lt;/code&gt;）して・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1028&quot; height=&quot;664&quot; src=&quot;/_astro/41.BIZjWsav_Z1a7yVL.webp&quot; srcset=&quot;/_astro/41.BIZjWsav_Z9sMR7.webp 640w, /_astro/41.BIZjWsav_Z2bSucG.webp 750w, /_astro/41.BIZjWsav_Z1PcQD7.webp 828w, /_astro/41.BIZjWsav_Z1a7yVL.webp 1028w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ダッシュボードで該当するクリップにコピーした全ての文字起こしを貼り付けます。そして、AIモデルに要約させるためのショートカットキーを入力します。
&lt;img loading=&quot;lazy&quot; width=&quot;1581&quot; height=&quot;1014&quot; src=&quot;/_astro/42.CIGUCYAs_Z1WLWDK.webp&quot; srcset=&quot;/_astro/42.CIGUCYAs_Z70sP3.webp 640w, /_astro/42.CIGUCYAs_IHMMq.webp 750w, /_astro/42.CIGUCYAs_NK74l.webp 828w, /_astro/42.CIGUCYAs_Z1WNj1R.webp 1080w, /_astro/42.CIGUCYAs_1hwSkG.webp 1280w, /_astro/42.CIGUCYAs_Z1WLWDK.webp 1581w&quot; /&gt;&lt;/p&gt;&lt;p&gt;文字起こしの全文が入力されてAIが要約作業を行います。しかし出力量が少ないな・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2281&quot; height=&quot;1205&quot; src=&quot;/_astro/43.CB8RxQnI_BJDCg.webp&quot; srcset=&quot;/_astro/43.CB8RxQnI_18ueAX.webp 640w, /_astro/43.CB8RxQnI_21sSPc.webp 750w, /_astro/43.CB8RxQnI_28uqKI.webp 828w, /_astro/43.CB8RxQnI_Jn3zS.webp 1080w, /_astro/43.CB8RxQnI_P4qQL.webp 1280w, /_astro/43.CB8RxQnI_q0fR4.webp 1668w, /_astro/43.CB8RxQnI_1roF4Q.webp 2048w, /_astro/43.CB8RxQnI_BJDCg.webp 2281w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Output more details in Japanese.」とプロンプトしてもう少し増やしました。
&lt;img loading=&quot;lazy&quot; width=&quot;2300&quot; height=&quot;1202&quot; src=&quot;/_astro/44.BtMOPz0q_1L8hgJ.webp&quot; srcset=&quot;/_astro/44.BtMOPz0q_1Sk5YE.webp 640w, /_astro/44.BtMOPz0q_Z2iSnA3.webp 750w, /_astro/44.BtMOPz0q_Z2bQPEw.webp 828w, /_astro/44.BtMOPz0q_ZztGa0.webp 1080w, /_astro/44.BtMOPz0q_ZtMiS7.webp 1280w, /_astro/44.BtMOPz0q_ZOJWB2.webp 1668w, /_astro/44.BtMOPz0q_Z2fhOo2.webp 2048w, /_astro/44.BtMOPz0q_1L8hgJ.webp 2300w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「You are a PC parts enthusiast. Output more details in Japanese.」とプロンプトしてみました。
&lt;img loading=&quot;lazy&quot; width=&quot;1996&quot; height=&quot;874&quot; src=&quot;/_astro/45.B8i8X9Rr_Z1zLrDd.webp&quot; srcset=&quot;/_astro/45.B8i8X9Rr_2lxYPf.webp 640w, /_astro/45.B8i8X9Rr_1lXcnD.webp 750w, /_astro/45.B8i8X9Rr_63Aqh.webp 828w, /_astro/45.B8i8X9Rr_HQJKJ.webp 1080w, /_astro/45.B8i8X9Rr_ZIr41k.webp 1280w, /_astro/45.B8i8X9Rr_Z16Tjk0.webp 1668w, /_astro/45.B8i8X9Rr_Z1zLrDd.webp 1996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「You are a PC parts expert. Output more details in Japanese.」とプロンプトしてみました。
&lt;img loading=&quot;lazy&quot; width=&quot;1975&quot; height=&quot;906&quot; src=&quot;/_astro/46.BJYHTLTS_ZXpGJk.webp&quot; srcset=&quot;/_astro/46.BJYHTLTS_1jL2C.webp 640w, /_astro/46.BJYHTLTS_14KRqb.webp 750w, /_astro/46.BJYHTLTS_ZKae7i.webp 828w, /_astro/46.BJYHTLTS_28ADKE.webp 1080w, /_astro/46.BJYHTLTS_Z1Q8qRj.webp 1280w, /_astro/46.BJYHTLTS_gzc4a.webp 1668w, /_astro/46.BJYHTLTS_ZXpGJk.webp 1975w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Roleを変えさせてプロンプトしてみましたが、enthusiastの方が情報量が多いですが文章が見づらくて、expertの方が文章が見やすいですが情報量が少なめですか？　プロンプトの仕方は調整が必要そうですね・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2034&quot; height=&quot;1122&quot; src=&quot;/_astro/47.Buag6j3S_ijnnw.webp&quot; srcset=&quot;/_astro/47.Buag6j3S_ZJe3Ap.webp 640w, /_astro/47.Buag6j3S_Zyz4HN.webp 750w, /_astro/47.Buag6j3S_Z2hE8hy.webp 828w, /_astro/47.Buag6j3S_Z1Wtf4s.webp 1080w, /_astro/47.Buag6j3S_Z1L7jge.webp 1280w, /_astro/47.Buag6j3S_1SoHqc.webp 1668w, /_astro/47.Buag6j3S_ijnnw.webp 2034w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、最初にAIモデルに要約してもらうためのプロンプトは、&lt;code&gt;Prompt for Summary&lt;/code&gt;の設定である程度編集することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1205&quot; height=&quot;724&quot; src=&quot;/_astro/48.BlctVwVE_2eCsCY.webp&quot; srcset=&quot;/_astro/48.BlctVwVE_1OFAJG.webp 640w, /_astro/48.BlctVwVE_5StHc.webp 750w, /_astro/48.BlctVwVE_Z2o5tVu.webp 828w, /_astro/48.BlctVwVE_1mQysq.webp 1080w, /_astro/48.BlctVwVE_2eCsCY.webp 1205w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionにエクスポートする。&lt;a href=&quot;#notionにエクスポートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、クリップした内容をNotionにエクスポートしたいと思います。クリップ内に共有ボタンがあるので&lt;code&gt;Export to Notion&lt;/code&gt;をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;562&quot; src=&quot;/_astro/51.Cm5_pX1J_1ckNuC.webp&quot; srcset=&quot;/_astro/51.Cm5_pX1J_Z27q8pi.webp 640w, /_astro/51.Cm5_pX1J_ZYz8ei.webp 750w, /_astro/51.Cm5_pX1J_Z1JJ3u3.webp 828w, /_astro/51.Cm5_pX1J_1ckNuC.webp 994w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Please integrate with Notion from here.&lt;/code&gt;と表示されるので、&lt;code&gt;here&lt;/code&gt;をクリックしてNotionと連携できるようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;946&quot; height=&quot;610&quot; src=&quot;/_astro/52.99nHB_WH_1iJuPJ.webp&quot; srcset=&quot;/_astro/52.99nHB_WH_Z1pbviU.webp 640w, /_astro/52.99nHB_WH_RRKfR.webp 750w, /_astro/52.99nHB_WH_2aglaP.webp 828w, /_astro/52.99nHB_WH_1iJuPJ.webp 946w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Notionと連携できるようになったら、再度&lt;code&gt;Export to Notion&lt;/code&gt;をクリックして少し待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;880&quot; height=&quot;524&quot; src=&quot;/_astro/53.DpoZQIpe_Z2vMEdv.webp&quot; srcset=&quot;/_astro/53.DpoZQIpe_1wtGlB.webp 640w, /_astro/53.DpoZQIpe_Z1Ply1L.webp 750w, /_astro/53.DpoZQIpe_JDnqb.webp 828w, /_astro/53.DpoZQIpe_Z2vMEdv.webp 880w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、あれっ・・・、&lt;code&gt;Something went wrong.&lt;/code&gt;？？　失敗した？？
&lt;img loading=&quot;lazy&quot; width=&quot;899&quot; height=&quot;582&quot; src=&quot;/_astro/54.Pq2UN_tp_2nFuDs.webp&quot; srcset=&quot;/_astro/54.Pq2UN_tp_1RqzM6.webp 640w, /_astro/54.Pq2UN_tp_ZKNNDp.webp 750w, /_astro/54.Pq2UN_tp_vyLgy.webp 828w, /_astro/54.Pq2UN_tp_2nFuDs.webp 899w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれれ、それでは次にもう少し軽そうなクリップをNotionにエクスポートしたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;924&quot; height=&quot;590&quot; src=&quot;/_astro/55.CTCrHT1v_ZFlc4S.webp&quot; srcset=&quot;/_astro/55.CTCrHT1v_aipkD.webp 640w, /_astro/55.CTCrHT1v_2jud5M.webp 750w, /_astro/55.CTCrHT1v_Z1tjkNb.webp 828w, /_astro/55.CTCrHT1v_ZFlc4S.webp 924w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今度はNotionにエクスポート出来たようです。Notionで開いてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;907&quot; height=&quot;609&quot; src=&quot;/_astro/56.B-BAsKAU_M5w7y.webp&quot; srcset=&quot;/_astro/56.B-BAsKAU_Zb24bu.webp 640w, /_astro/56.B-BAsKAU_Exn1F.webp 750w, /_astro/56.B-BAsKAU_ZWnYrt.webp 828w, /_astro/56.B-BAsKAU_M5w7y.webp 907w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Notionに連携したノートに「Glasp Highlights」という新しいデータベースが作成されて、エクスポートされたクリップがNotionのページとして保存されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1787&quot; height=&quot;1098&quot; src=&quot;/_astro/57.CiGTPDHv_Z202cwE.webp&quot; srcset=&quot;/_astro/57.CiGTPDHv_ZhxrkT.webp 640w, /_astro/57.CiGTPDHv_Z8JB8k.webp 750w, /_astro/57.CiGTPDHv_2uTHLE.webp 828w, /_astro/57.CiGTPDHv_2nxOaa.webp 1080w, /_astro/57.CiGTPDHv_Z230t58.webp 1280w, /_astro/57.CiGTPDHv_ZMCmTH.webp 1668w, /_astro/57.CiGTPDHv_Z202cwE.webp 1787w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Glasp Highlights」データベースを確認すると、確かに先程エクスポートに失敗したクリップは保存されていませんでした。なるほど・・・、ある程度のボリューム以上の文章量で書き足すとエクスポート出来なくなってしまうのですね・・・。この閾値は後々改善されることを願うのみですね・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2223&quot; height=&quot;863&quot; src=&quot;/_astro/58._XYnQSa6_Z155dSH.webp&quot; srcset=&quot;/_astro/58._XYnQSa6_Jx86N.webp 640w, /_astro/58._XYnQSa6_Z1LJBkd.webp 750w, /_astro/58._XYnQSa6_ZPTobW.webp 828w, /_astro/58._XYnQSa6_1OE0BI.webp 1080w, /_astro/58._XYnQSa6_Z1pD62r.webp 1280w, /_astro/58._XYnQSa6_N2cPQ.webp 1668w, /_astro/58._XYnQSa6_Z2armst.webp 2048w, /_astro/58._XYnQSa6_Z155dSH.webp 2223w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AndroidとiOS用のアプリもある。&lt;a href=&quot;#androidとios用のアプリもある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このGlaspには、スマホ用のアプリも用意されています。しかしスマホでは、自分が常用しているブラウザ上でGlaspを使えるわけではないので、Glaspにクリップが貯まっていくことでGlasp上で表示されるフィードが自分好みになるまで、Glaspを使い続ける必要があります。そこはスマホアプリの難しいところですね。&lt;/p&gt;&lt;p&gt;2024-12-15時点における評価は、Google Play Storeでは2.5、Apple App Storeでは3.5で、あまり良い評価ではありません・・・。Google Play Storeでリリースされたのは2024-12-10と最近なのでこれから使いやすくなると思います。Apple App Storeでリリースされたのは2023-09-22です。ジワジワと好転していくのではないでしょうか・・・。&lt;/p&gt;&lt;p&gt;Google Play Store内のGlasp。
Apple App Store内のGlasp。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://glasp.co/favicon.ico&quot; alt=&quot;Glasp&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;p&gt;Glasp&lt;/p&gt;&lt;p&gt;&lt;span&gt;Glasp Inc.&lt;/span&gt;&lt;span&gt;無料&lt;/span&gt;&lt;span&gt;posted with&lt;a href=&quot;https://mama-hack.com/app-reach/&quot; target=&quot;_blank&quot;&gt;アプリーチ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://apps.apple.com/jp/app/glasp/id1645763435&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-itune-ja.webp&quot; alt=&quot;Glasp on iTunes&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=co.glasp.glaspapp&amp;amp;hl=ja&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-gplay-ja.webp&quot; alt=&quot;Glasp on Google Play&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、GlaspというWeb上の動画や記事をクリップ出来るツールを紹介しました。&lt;/p&gt;&lt;p&gt;以下が本記事のまとめです。（2024-12-15時点）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Glaspは、Web上の文章をハイライトするだけでWebページのURLをクリップ出来る。&lt;/li&gt;
&lt;li&gt;Webページの内容を大規模言語モデル（ChatGPT、Gemini、Claude、Mistralなど）に要約させるための機能もある。&lt;/li&gt;
&lt;li&gt;フォローアッププロンプト機能が便利。&lt;/li&gt;
&lt;li&gt;Clone AIで、今までクリップした内容を元に回答できる自分用のAIを作れる。&lt;/li&gt;
&lt;li&gt;Notionにエクスポートすることも可能。しかし、大量の文字数でメモしているとエクスポート出来なくなる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;素晴らしい・・・まで、あと1歩足りませんでしたが、ハイライトするだけでクリップできてしまうのは便利なので、これからボチボチ使っていこうと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;楽しみだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;期待したい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】ffmpegとgif2webpでmp4動画のサイズを小さくしたい</title><link>https://endorphinbath.com/posts/lossy-convert-with-ffmpeg-gif2webp/</link><guid isPermaLink="true">https://endorphinbath.com/posts/lossy-convert-with-ffmpeg-gif2webp/</guid><description>ffmpegとgif2webpを使って、mp4ファイルからgifもしくはwebpの拡張子に変換して、サイズを減らす試みです。setpts=PTS/2で倍速にしたり、グローバルパレットや-vf scale=で画像の大きさを指定したりしています。</description><pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これ、音声は要らんのよなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;gifかwebpにしたら減らせるのだろうか&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動画のサイズを小さくしたい。&lt;a href=&quot;#動画のサイズを小さくしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;mp4ファイルって重いですよね・・・。
ということで、動画のサイズをなんとか小さく出来ないものかと色々試行錯誤した結果をまとめてみました。今回は音声をサポートしていない拡張子（.gifおよび.webp）によるアニメーションに変換することで、ファイルサイズを小さくしていこうと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使う変換方法&lt;a href=&quot;#今回使う変換方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、動画を別の拡張子に変換するために使った方法は、「ffmpeg」と「gif2webp」のパッケージです。
WindowsであればどちらのパッケージもScoopからインストールすることが可能です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd C:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-RestMethod&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Uri https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;get.scoop.sh | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; Env:USERNAME).Value; &lt;/span&gt;&lt;span&gt;Set-Location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;C:\Users\&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install libwebp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install ffmpeg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;ffmpeg&lt;a href=&quot;#ffmpeg&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「ffmpeg」は、メディアファイルを別のメディアファイルに変換するパッケージです。かなり昔から使われているみたいです。&lt;/p&gt;&lt;a href=&quot;https://www.ffmpeg.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.ffmpeg.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.ffmpeg.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;FFmpeg&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.ffmpeg.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;gif2webp&lt;a href=&quot;#gif2webp&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「gif2webp」は、Google公式の「libwebp」の機能群の一部のパッケージです。GIFアニメーションからWebpアニメーションを生成することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/speed/webp/docs/gif2webp?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gif2webp | WebP | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/google-green.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;今回使う動画素材&lt;a href=&quot;#今回使う動画素材&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしてちなみに、今回変換に使ったmp4の動画は、以前にアズールレーン公式がX（旧Twitter）から表現内容を修正するように依頼されたプロモーション動画をスクリーン録画したものです。動画だとちょっと重いので冒頭のスクショだけ。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.BKN0_gpB_mA5Hi.webp&quot; srcset=&quot;/_astro/11.BKN0_gpB_wcill.webp 640w, /_astro/11.BKN0_gpB_Z1PiOEN.webp 750w, /_astro/11.BKN0_gpB_Z11lQjn.webp 828w, /_astro/11.BKN0_gpB_3cUy1.webp 1080w, /_astro/11.BKN0_gpB_12npuA.webp 1280w, /_astro/11.BKN0_gpB_Z2ltgGc.webp 1668w, /_astro/11.BKN0_gpB_mA5Hi.webp 1920w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;変換結果のまとめ&lt;a href=&quot;#変換結果のまとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回色々試した結果が以下の表になります。&lt;/p&gt;
































































































































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;No&lt;/th&gt;&lt;th&gt;変換用コマンド&lt;/th&gt;&lt;th&gt;元ファイル&lt;/th&gt;&lt;th&gt;変換後の拡張子&lt;/th&gt;&lt;th&gt;変換後のサイズ(MB)&lt;/th&gt;&lt;th&gt;画質&lt;/th&gt;&lt;th&gt;フレーム&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;mp4&lt;/td&gt;&lt;td&gt;89&lt;/td&gt;&lt;td&gt;そのまま&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;1,413&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -r 30 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;767&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;変わらない。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1920:-1 -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;341&lt;/td&gt;&lt;td&gt;少し劣化する。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1920:-1 -r 30 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;276&lt;/td&gt;&lt;td&gt;少し劣化する。&lt;/td&gt;&lt;td&gt;変わらない。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1080:-1 -r 30 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;劣化する。&lt;/td&gt;&lt;td&gt;変わらない。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;223&lt;/td&gt;&lt;td&gt;少し劣化する。&lt;/td&gt;&lt;td&gt;抜けるフレームが散見された。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1920:-1 -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;かなり劣化する。アーティファクトが残ってしまう。&lt;/td&gt;&lt;td&gt;変わらない。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;576&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmin 9 -kmax 17&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;576&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmin 6 -kmax 13&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;575&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmin 3 -kmax 5&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;566&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;2のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;1,101&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmin 3 -kmax 5&lt;/code&gt;&lt;/td&gt;&lt;td&gt;2のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;1083&lt;/td&gt;&lt;td&gt;ほぼ劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;4のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;285&lt;/td&gt;&lt;td&gt;劣化する。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;5のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;少し劣化する。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmax 0&lt;/code&gt;&lt;/td&gt;&lt;td&gt;2のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;1,111&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmax 1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;2のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;1,015&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmax 0&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;582&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームが散見された。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmax 1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;3のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;508&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;抜けるフレームが散見された。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -lavfi &quot;scale=1920:-1,setpts=PTS/2&quot; -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;277&lt;/td&gt;&lt;td&gt;少し劣化する。&lt;/td&gt;&lt;td&gt;変わらない。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -lavfi &quot;split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse,setpts=PTS/2&quot; -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;768&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;少し遅い？ コンマ秒レベル。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;&lt;code&gt;gif2webp &quot;$srcMovieAbsName&quot; -o $dstMovieAbsName -kmax 1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;22のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;508&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;少し遅い？ コンマ秒レベル。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -vf split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;22のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;&lt;code&gt;ffmpeg -i &quot;$srcMovieAbsName&quot; -lavfi split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse -r 60 -loop 0 $dstMovieAbsName;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;22のGIF&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;td&gt;エラーになる&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;&lt;code&gt;$itsScale = &quot;[float](1 / 2)&quot;; ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1920:-1 -r 60 -loop 0 $dstMovieAbsName -itsscale $itsScale&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;gif&lt;/td&gt;&lt;td&gt;341&lt;/td&gt;&lt;td&gt;劣化なし。&lt;/td&gt;&lt;td&gt;再生速度が遅い。（なぜだ。）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;&lt;code&gt;$itsScale = &quot;[float](1 / 2)&quot;; ffmpeg -i &quot;$srcMovieAbsName&quot; -vf scale=1920:-1 -r 60 -loop 0 $dstMovieAbsName -itsscale $itsScale&lt;/code&gt;&lt;/td&gt;&lt;td&gt;mp4動画 (1920x1080, 60fps)&lt;/td&gt;&lt;td&gt;webp&lt;/td&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;かなり劣化する。アーティファクトが残ってしまう。&lt;/td&gt;&lt;td&gt;抜けるフレームがあった。再生速度は変わらない。（なぜだ。）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;上記の表を踏まえて、以下の所感を得ました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;同じアスペクト比で幅が半分以下になる画質かつノイズが入るのを許容できないのであれば、MP4からGIFへの変換はオススメじゃない。&lt;/li&gt;
&lt;li&gt;GIFアニメーションからWebpアニメーションに変換すると、画質を落とさずにファイルサイズを減らせる。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;ffmpeg&lt;a href=&quot;#ffmpeg-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ffmpegでは、mp4ファイルをgifもしくはwebpに変換することが可能です。そして、フィールドに対する設定値の詳細は以下の通りです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;基本的に、&lt;code&gt;vf&lt;/code&gt;フィールドに&lt;code&gt;split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&lt;/code&gt;を指定すると変換時間が長くなりサイズが大きくなる。その代わり、画質の劣化が発生しない。（この指定の仕方は「グローバルパレット」と呼ぶらしい。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vf&lt;/code&gt;フィールドに&lt;code&gt;scale=1920:-1&lt;/code&gt;を指定すると、アスペクト比を変えずに幅の値を変えることが出来る。そして、変換時間が短くなりサイズを減らせるが、画質の劣化が発生する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lavfi&lt;/code&gt;フィールドに&lt;code&gt;setpts=PTS/2&lt;/code&gt;という風に指定すると、出力されるGIFを2倍速に出来る。&lt;/li&gt;
&lt;li&gt;ちなみに、&lt;code&gt;itsscale&lt;/code&gt;フィールドで倍速指定しても、なぜか倍速にならなかった。「&lt;code&gt;$itsScale = “[float](1 / 2)”; ffmpeg -i &quot;$srcMovieAbsName&quot; -vf $vfStr -r $fps -loop $loop $dstMovieAbsName -itsscale $itsScale&lt;/code&gt;」という風に指定したのだが。（26の記録）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;同じアスペクト比で動画の幅を半分にすれば、元の動画よりも少ないサイズに出来そうです。しかし、そうなると変換後の方がサイズに対する画質のコスパが悪いですね・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;gif2webp&lt;a href=&quot;#gif2webp-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;gif2webpでは、gifファイルをwebpに変換することが可能です。ffmpegで少ない欠損で変換したgifを変換しました。そして、フィールドに対する設定値の詳細は以下の通りです。
&lt;code&gt;-kmin&lt;/code&gt;フィールドおよび&lt;code&gt;-kmax&lt;/code&gt;フィールドの詳細を公式リファレンスから抜粋して、llama-3.1-nemotron-70b-instructに和訳してもらいました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Note&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;出力アニメーションの中で、連続するキーフレーム（独立してデコード可能なフレーム）間の最小距離と最大距離を指定します。ツールは、必要に応じて出力アニメーションにいくつかのキーフレームを挿入して、この基準を満たします。
&lt;code&gt;kmax = 0&lt;/code&gt; の場合、キーフレームの挿入がオフになります。&lt;code&gt;kmax = 1&lt;/code&gt; の場合、すべてのフレームがキーフレームになります。これらの特殊なケースでは、&lt;code&gt;kmin&lt;/code&gt; の値は考慮されません。典型的な値は、&lt;code&gt;3 - 30&lt;/code&gt; の範囲です。デフォルト値は、無損失圧縮の場合 &lt;code&gt;kmin = 9&lt;/code&gt;、&lt;code&gt;kmax = 17&lt;/code&gt;、有損圧縮の場合 &lt;code&gt;kmin = 3&lt;/code&gt;、&lt;code&gt;kmax = 5&lt;/code&gt; です。
これら 2 つのオプションは、フレーム数が多い (&lt;code&gt;&amp;gt;50&lt;/code&gt;) アニメーション画像にのみ関連します。
より低い値を使用すると、より多くのフレームがキーフレームに変換されます。これにより、平均してフレームをデコードするために必要なフレーム数が少なくなる可能性があり、デコード性能が向上する可能性があります。しかし、ファイルサイズがわずかに大きくなる可能性があります。より高い値を使用すると、デコード性能が低下する可能性がありますが、ファイルサイズが小さくなる可能性があります。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;kmin = 9、kmax = 17&lt;/code&gt;で変換すると無損失圧縮になり、&lt;code&gt;kmin = 3、kmax = 5&lt;/code&gt;で変換すると有損圧縮になるみたいですね。しかし、個人的にはあまり画質に変わりはなかったので、どちらかというと&lt;code&gt;kmin = 3、kmax = 5&lt;/code&gt;の方が良いでしょうか。また、&lt;code&gt;-kmax 1&lt;/code&gt;の方が&lt;code&gt;-kmax 0&lt;/code&gt;より少しだけサイズを減らせます。その二者間の画質の違いにもあまり差はありません。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、ffmpegとgif2webpを使って、.mp4ファイルから.gifもしくは.webpの拡張子に変換して、サイズを減らす試みでした。
ffmpegのリファレンスはここにあります。さらに詳細に設定できるかもしれません。&lt;/p&gt;&lt;a href=&quot;https://ffmpeg.org/ffmpeg.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ffmpeg.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;ffmpeg.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ffmpeg Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ffmpeg.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;音声をサポートしていない拡張子に変換すればファイルサイズを減らせると思ったのですが、そういうことでもありませんでした。ムズカシイですねぇ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あんまり減らせないかあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;難しかったか・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】Steam Web API Keyを発行して、そこから最近遊んだゲームを可視化する</title><link>https://endorphinbath.com/posts/python-steam-game-llist-visualization/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-steam-game-llist-visualization/</guid><description>Pythonのpython-steam-apiで入手したSteamの情報を、matplotlibでプロットしてFastAPIおよびPanelでWebページとして表示するツールを作る記事です。</description><pubDate>Mon, 16 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さて、今までどんなゲームを遊んだかなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Pythonでデータを可視化でございますか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PythonからSteamの情報を覗く。&lt;a href=&quot;#pythonからsteamの情報を覗く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なんか最近、Pythonを再び触り始めたので、今回は少し趣向を変えてやっていこうと思います。&lt;/p&gt;&lt;p&gt;そこで今回は、自分のSteamアカウントに紐付いている情報を引っ張ってきて、そのデータを何らかのグラフというかチャートの形でプロットしていきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://steamcommunity.com/dev?l=japanese&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://steamcommunity.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;steamcommunity.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Steam コミュニティ :: Steam Web API ドキュメント&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;steamcommunity.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まあでも最近あんまりゲームしていないんで見栄えの良いグラフになるかが不安です・・・。それじゃあ行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使うパッケージ&lt;a href=&quot;#今回使うパッケージ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonのバージョンは、&lt;code&gt;3.12&lt;/code&gt;です。&lt;/p&gt;&lt;p&gt;今回は、Steam Web APIを直接叩くのではなく、PyPIにある&lt;code&gt;python-steam-api&lt;/code&gt;パッケージを使って、Steamの情報を抜き出していきたいと思います。このパッケージは、「Steam Web API」という公式APIを叩くためのラッパーのようなものです。&lt;/p&gt;&lt;p&gt;このパッケージ、リファレンスは見つけられなかったのですが、パッケージの使用例の部分が沢山書いてあるので、リファレンスを見る必要はないかなと思いました。気になったところはレスポンスをもう少し深く見れば良いし。豊富なドキュメントで助かります。&lt;/p&gt;&lt;a href=&quot;https://pypi.org/project/python-steam-api&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pypi.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Client Challenge&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;pypi.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;可視化するためのパッケージとしては、matplotlibの結果をFastAPIとPanelで表示する感じで行きます。&lt;/p&gt;&lt;a href=&quot;https://panel.holoviz.org/index.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://panel.holoviz.org/_static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;panel.holoviz.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Overview — Panel v1.9.1&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;panel.holoviz.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Steam Web API Keyを生成する。&lt;a href=&quot;#steam-web-api-keyを生成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Steam Web APIを叩くために、API Keyを生成します。&lt;/p&gt;&lt;p&gt;まずは、Steamアプリを自分のスマホにインストールしてログインして、「Steamガードモバイル認証」をオンにする必要があります。ここの手順は省略します。&lt;/p&gt;&lt;p&gt;そしたら、&lt;a href=&quot;http://steamcommunity.com/dev/apikey&quot; target=&quot;_blank&quot;&gt;このページ&lt;/a&gt;からSteam Web API Keyを生成できます。&lt;/p&gt;&lt;p&gt;そのページで、ドメイン名を入力して、「Steam Web API利用規約に同意します」にチェックを入れて、「登録」します。
&lt;img loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;393&quot; src=&quot;/_astro/11.B3x82toU_xUuNq.webp&quot; srcset=&quot;/_astro/11.B3x82toU_201S2M.webp 640w, /_astro/11.B3x82toU_1lQnoj.webp 750w, /_astro/11.B3x82toU_2hGAwz.webp 828w, /_astro/11.B3x82toU_xUuNq.webp 1000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、「確認が必要です（Confirmation Required）」という文言が表示されるます。
&lt;img loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;313&quot; src=&quot;/_astro/12.DsE05bFy_2u06Yi.webp&quot; srcset=&quot;/_astro/12.DsE05bFy_1r78Ci.webp 640w, /_astro/12.DsE05bFy_Z3yDhq.webp 750w, /_astro/12.DsE05bFy_KVQ4X.webp 828w, /_astro/12.DsE05bFy_2u06Yi.webp 900w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら次に、自分のスマホのSteamアプリを開きます。そしたら、画面下部のメニューバーから一番右の「縦並びの3本の横線」ボタンをタップして、&lt;code&gt;Confirmations&lt;/code&gt;をタップします。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/16.BzLIN0vA_ZRdBYT.webp&quot; srcset=&quot;/_astro/16.BzLIN0vA_je0Rk.webp 640w, /_astro/16.BzLIN0vA_1HCzPp.webp 750w, /_astro/16.BzLIN0vA_Z1RLRxv.webp 828w, /_astro/16.BzLIN0vA_ZRdBYT.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Confirmations&lt;/code&gt;をタップすると、先程のSteam Web API Keyを生成するためのページからのリクエストが届いているので、これを&lt;code&gt;Confirm&lt;/code&gt;します。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/17.Dyl0Sfs4_NYGch.webp&quot; srcset=&quot;/_astro/17.Dyl0Sfs4_11zFYa.webp 640w, /_astro/17.Dyl0Sfs4_2pYfWf.webp 750w, /_astro/17.Dyl0Sfs4_Z1aqcqF.webp 828w, /_astro/17.Dyl0Sfs4_NYGch.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、PCのページの方を確認すると、Steam Web API Keyが生成されました。生成したキーは&lt;a href=&quot;https://steamcommunity.com/dev/apikey&quot; target=&quot;_blank&quot;&gt;このページ&lt;/a&gt;で確認することができます。
&lt;img loading=&quot;lazy&quot; width=&quot;1160&quot; height=&quot;533&quot; src=&quot;/_astro/18.B8wzkgTU_Z1u02VW.webp&quot; srcset=&quot;/_astro/18.B8wzkgTU_1rWcsI.webp 640w, /_astro/18.B8wzkgTU_1VmNga.webp 750w, /_astro/18.B8wzkgTU_FsciN.webp 828w, /_astro/18.B8wzkgTU_Z1COkes.webp 1080w, /_astro/18.B8wzkgTU_Z1u02VW.webp 1160w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Steamの情報を取得する。&lt;a href=&quot;#steamの情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;ユーザーの情報を取得する。&lt;a href=&quot;#ユーザーの情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、先程生成したSteam Web API Keyで&lt;code&gt;python-steam-api&lt;/code&gt;パッケージを使っていきます。ちなみに、Steam Web APIから情報を取得する対象のSteamアカウントは、外部へと公開している設定になっている必要があります。&lt;/p&gt;&lt;p&gt;こっちのパッケージの方が、Steam Web APIから直接叩くよりもレスポンスの内容が整理されていて助かります。&lt;/p&gt;&lt;p&gt;まずは、&lt;code&gt;python-steam-api&lt;/code&gt;パッケージをインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python-steam-api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら最初に、ユーザーの基本情報を取得していきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; steam_web_api &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;STEAM_API_KEY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;STEAM_API_KEY&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Steam&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;STEAM_API_KEY&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.users.&lt;/span&gt;&lt;span&gt;search_user&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;the12thchairman&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(user)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;レスポンスが取得できました。アバター画像やら最後にログオフした日時などが取れました。クランの概念を今まで知らなかった・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&apos;player&apos;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;&apos;avatar&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https:&lt;/span&gt;&lt;span&gt;//avatars.steamstatic.com/427ef7d5f8ad7b21678f69bc8afc95786cf38fe6.jpg&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;avatarfull&apos;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https:&lt;/span&gt;&lt;span&gt;//avatars.steamstatic.com/427ef7d5f8ad7b21678f69bc8afc95786cf38fe6_full.jpg&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;avatarhash&apos;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;427&lt;/span&gt;&lt;span&gt;ef&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;ad&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;21678&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;69&lt;/span&gt;&lt;span&gt;bc&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;afc&lt;/span&gt;&lt;span&gt;95786&lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;38&lt;/span&gt;&lt;span&gt;fe&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;avatarmedium&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https:&lt;/span&gt;&lt;span&gt;//avatars.steamstatic.com/427ef7d5f8ad7b21678f69bc8afc95786cf38fe6_medium.jpg&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;communityvisibilitystate&apos;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;loccountrycode&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;US&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;personaname&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;The&lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;thChairman&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;personastate&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;personastateflags&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;primaryclanid&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;103582791429521408&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;profilestate&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;profileurl&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https:&lt;/span&gt;&lt;span&gt;//steamcommunity.com/id/the12thchairman/&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;steamid&apos;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;76561198995017863&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;timecreated&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1570311509&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;次に、&lt;code&gt;steamid&lt;/code&gt;からユーザー情報を紐づけていきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; steam_web_api &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;STEAM_API_KEY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;STEAM_API_KEY&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Steam&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;STEAM_API_KEY&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;MY_STEAM_ID&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.users.&lt;/span&gt;&lt;span&gt;get_user_details&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(user)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;同様に、ユーザー情報に関するレスポンスが取得できました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&apos;player&apos;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;&apos;avatar&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https://avatars.steamstatic.com/d7fee5bba9e4a5aaacff74551c145d58289041df.jpg&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;avatarfull&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https://avatars.steamstatic.com/d7fee5bba9e4a5aaacff74551c145d58289041df_full.jpg&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;avatarhash&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;d7fee5bba9e4a5aaacff74551c145d58289041df&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;avatarmedium&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https://avatars.steamstatic.com/d7fee5bba9e4a5aaacff74551c145d58289041df_medium.jpg&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;communityvisibilitystate&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;lastlogoff&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1733937104&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;loccountrycode&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;locstatecode&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;40&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;personaname&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;kinkinbeer135ml&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;personastate&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;personastateflags&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;primaryclanid&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;103582791429521408&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;profilestate&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;profileurl&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;https://steamcommunity.com/id/kinkingame24bit/&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;steamid&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;timecreated&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1540612096&lt;/span&gt;&lt;span&gt;}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そのSteamアカウントのフレンド一覧を取得することも可能です。フィールドの数が煩雑になってきたので&lt;code&gt;pydantic&lt;/code&gt;で型安全を担保します。（レスポンスの内容は省略します。）&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/config.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_env_variable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# return os.environ[key]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; os.&lt;/span&gt;&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;(key)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_api_key&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_env_variable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;STEAM_API_KEY&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_env_variable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;MY_STEAM_ID&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;src/steam.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List, Optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; inspect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; steam_web_api &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Local packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamPlayerProfile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;avatar: HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;avatarfull: HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;avatarhash: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;avatarmedium: HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;communityvisibilitystate: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;personaname: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;personastate: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;personastateflags: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;primaryclanid: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;profilestate: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;profileurl: HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steamid: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;timecreated: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamFriendProfile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;SteamPlayerProfile&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;friend_since: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;relationship: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;() -&amp;gt; Steam:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Steam&lt;/span&gt;&lt;span&gt;(cfg.&lt;/span&gt;&lt;span&gt;get_steam_api_key&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_user&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; SteamPlayerProfile:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: start retrieving steam player info&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.users.&lt;/span&gt;&lt;span&gt;get_user_details&lt;/span&gt;&lt;span&gt;(steam_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_profile &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamPlayerProfile&lt;/span&gt;&lt;span&gt;(**user[&lt;/span&gt;&lt;span&gt;&quot;player&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inspect.&lt;/span&gt;&lt;span&gt;currentframe&lt;/span&gt;&lt;span&gt;().f_code.co_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: finish retrieving steam player info&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(steam_profile)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; steam_profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_friends&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;)-&amp;gt; List[SteamPlayerProfile]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: start retrieving steam friends info&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.users.&lt;/span&gt;&lt;span&gt;get_user_friends_list&lt;/span&gt;&lt;span&gt;(steam_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_profile_class&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; SteamFriendProfile:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamFriendProfile&lt;/span&gt;&lt;span&gt;(**profile)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_profiles &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(to_profile_class, user[&lt;/span&gt;&lt;span&gt;&quot;friends&quot;&lt;/span&gt;&lt;span&gt;]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inspect.&lt;/span&gt;&lt;span&gt;currentframe&lt;/span&gt;&lt;span&gt;().f_code.co_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: finish retrieving steam friends info&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(steam_profiles)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; steam_profiles&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_user&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;friends &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_friends&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ゲームの情報を取得する。&lt;a href=&quot;#ゲームの情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら次に、ユーザーが所持しているゲームの一覧を取得してみます。加えて、先程のようにPydanticベースのクラスで型検証して、デコレータで関数の実行部分の可視化もします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List, Optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pydantic &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BaseModel, HttpUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; functools &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; wraps&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@wraps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrapTheFunction&lt;/span&gt;&lt;span&gt;(*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;(): start executing...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# print(f&quot;I am doing some bullshit before executing func.__name__()&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func.&lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;(): finish executing.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; wrapTheFunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameProfile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;appid: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_icon_url: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_2weeks: Optional[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_deck_forever: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_disconnected: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_forever: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_linux_forever: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_mac_forever: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_windows_forever: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rtime_last_played: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@function_decorator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.users.&lt;/span&gt;&lt;span&gt;get_owned_games&lt;/span&gt;&lt;span&gt;(steam_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_profile_class&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; SteamGameProfile:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameProfile&lt;/span&gt;&lt;span&gt;(**profile)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(to_profile_class, res[&lt;/span&gt;&lt;span&gt;&quot;games&quot;&lt;/span&gt;&lt;span&gt;]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(steam_games)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(res[&lt;/span&gt;&lt;span&gt;&quot;game_count&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(steam_games))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; steam_games&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;実行すると色々とゲームに関する情報を取得できました。2週間以内に起動されたゲームだけには、&lt;code&gt;&quot;playtime_2weeks&quot;&lt;/code&gt;というフィールドがありました。Pydanticではそのフィールドだけオプショナルで&lt;code&gt;None&lt;/code&gt;に設定しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_owned_games(): start executing...&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[SteamGameProfile(appid=400, img_icon_url=&apos;cfa928ab4119dd137e50d728e8fe703e4e970aff&apos;, name=&apos;Portal&apos;, playtime_2weeks=None, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=205, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=205, rtime_last_played=1691772949),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SteamGameProfile(appid=40100, img_icon_url=&apos;96e22cb9c9b063c9f0398f248fef850a679ced5a&apos;, name=&apos;Supreme Commander 2&apos;, playtime_2weeks=None, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=0, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=0, rtime_last_played=0),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SteamGameProfile(appid=620, img_icon_url=&apos;2e478fc6874d06ae5baf0d147f6f21203291aa02&apos;, name=&apos;Portal 2&apos;, playtime_2weeks=None, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=2, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=2, rtime_last_played=1696106875),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SteamGameProfile(appid=1601580, img_icon_url=&apos;5e66161686d4e2503a8a42aab9e8bc1c46c68fc1&apos;, name=&apos;Frostpunk 2&apos;, playtime_2weeks=None, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=1569, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=1569, rtime_last_played=1727178622),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SteamGameProfile(appid=983870, img_icon_url=&apos;8fe2f591098d69505dab3154c7397ca2f7594bc2&apos;, name=&apos;FOUNDRY&apos;, playtime_2weeks=None, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=0, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=0, rtime_last_played=0),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SteamGameProfile(appid=2854710, img_icon_url=&apos;4f408e9f135d7d2d117af3697c7f1a4bfaf10771&apos;, name=&apos;Chocolate Factory&apos;, playtime_2weeks=4, playtime_deck_forever=0, playtime_disconnected=0, playtime_forever=2017, playtime_linux_forever=0, playtime_mac_forever=0, playtime_windows_forever=2017, rtime_last_played=1733042847)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;185&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;185&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_owned_games(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;それではそのゲームで自分が積み重ねた&lt;code&gt;stats&lt;/code&gt;や&lt;code&gt;achievements&lt;/code&gt;を確認してみます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Achievement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achieved: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Stat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;value: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameData&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements: Optional[List[Achievement]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gameName: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats: Optional[List[Stat]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steamID: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@function_decorator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_game_data&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.apps.&lt;/span&gt;&lt;span&gt;get_user_stats&lt;/span&gt;&lt;span&gt;(steam_id, app_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameData&lt;/span&gt;&lt;span&gt;(**res[&lt;/span&gt;&lt;span&gt;&quot;playerstats&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Exception&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;400 Bad Request&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;# Raise content of exception.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(game_data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; game_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_game_data&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1888160&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_game_data&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1259790&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_game_data&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2854710&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;stats&lt;/code&gt;フィールドだけ無いゲームや、&lt;code&gt;stats&lt;/code&gt;フィールドと&lt;code&gt;achievements&lt;/code&gt;フィールドの両方とも無いのでリクエストすると例外が発生するゲームもあります。なので、レスポンスで&lt;code&gt;400 Bad Request&lt;/code&gt;が返ってくる場合には&lt;code&gt;None&lt;/code&gt;とすることにしました。&lt;/p&gt;&lt;p&gt;個人的に、テトリスのstatsは見てみたかったですね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SteamGameData(achievements=[Achievement(achieved=1, name=&apos;ACH02&apos;), Achievement(achieved=1, name=&apos;ACH03&apos;), Achievement(achieved=1, name=&apos;ACH04&apos;), Achievement(achieved=1, name=&apos;ACH05&apos;), Achievement(achieved=1, name=&apos;ACH06&apos;), Achievement(achieved=1, name=&apos;ACH07&apos;), Achievement(achieved=1, name=&apos;ACH08&apos;), Achievement(achieved=1, name=&apos;ACH09&apos;), Achievement(achieved=1, name=&apos;ACH10&apos;), Achievement(achieved=1, name=&apos;ACH11&apos;), Achievement(achieved=1, name=&apos;ACH12&apos;), Achievement(achieved=1, name=&apos;ACH13&apos;), Achievement(achieved=1, name=&apos;ACH14&apos;), Achievement(achieved=1, name=&apos;ACH15&apos;), Achievement(achieved=1, name=&apos;ACH16&apos;), Achievement(achieved=1, name=&apos;ACH17&apos;), Achievement(achieved=1, name=&apos;ACH18&apos;), Achievement(achieved=1, name=&apos;ACH19&apos;), Achievement(achieved=1, name=&apos;ACH20&apos;), Achievement(achieved=1, name=&apos;ACH21&apos;), Achievement(achieved=1, name=&apos;ACH22&apos;), Achievement(achieved=1, name=&apos;ACH23&apos;), Achievement(achieved=1, name=&apos;ACH24&apos;), Achievement(achieved=1, name=&apos;ACH25&apos;), Achievement(achieved=1, name=&apos;ACH26&apos;), Achievement(achieved=1, name=&apos;ACH27&apos;), Achievement(achieved=1, name=&apos;ACH28&apos;), Achievement(achieved=1, name=&apos;ACH29&apos;)], gameName=&apos;ARMORED CORE VI FIRES OF RUBICON&apos;, stats=None, steamID=&apos;XXXXXXXXXXXXX&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SteamGameData(achievements=[Achievement(achieved=1, name=&apos;ID_02_WonKnockoutPast03&apos;), Achievement(achieved=1, name=&apos;ID_03_WonKnockoutPast05&apos;), Achievement(achieved=1, name=&apos;ID_04_WonKnockoutPast10&apos;), Achievement(achieved=1, name=&apos;ID_29_TetoMinoErase1000&apos;), Achievement(achieved=1, name=&apos;ID_30_TetoMinoErase10000&apos;), Achievement(achieved=1, name=&apos;ID_31_TetoTETRISx50&apos;), Achievement(achieved=1, name=&apos;ID_32_TetoTETRISx100&apos;), Achievement(achieved=1, name=&apos;ID_33_TetoB2Bx25&apos;), Achievement(achieved=1, name=&apos;ID_34_TetoB2Bx50&apos;), Achievement(achieved=1, name=&apos;ID_35_Teto5REN&apos;), Achievement(achieved=1, name=&apos;ID_36_Teto8REN&apos;), Achievement(achieved=1, name=&apos;ID_37_TetoPERFECT1&apos;), Achievement(achieved=1, name=&apos;ID_38_TetoPERFECT3&apos;), Achievement(achieved=1, name=&apos;ID_39_TetoMinoErase50000&apos;), Achievement(achieved=1, name=&apos;ID_40_TetoTETRISx200&apos;), Achievement(achieved=1, name=&apos;ID_41_TetoB2Bx100&apos;), Achievement(achieved=1, name=&apos;ID_42_TetoMinoErase100000&apos;)], gameName=&apos;Tenpex&apos;, stats=[Stat(name=&apos;stat_knockoutPastMaxCount&apos;, value=14), Stat(name=&apos;stat_adventureAchivement&apos;, value=1), Stat(name=&apos;stat_puyoEraseCount&apos;, value=327), Stat(name=&apos;stat_puyoChain3Count&apos;, value=3), Stat(name=&apos;stat_puyoChain4Count&apos;, value=2), Stat(name=&apos;stat_puyoChain5Count&apos;, value=1), Stat(name=&apos;stat_puyoAllEraseCount&apos;, value=1), Stat(name=&apos;stat_tetoMinoEraseCount&apos;, value=855830), Stat(name=&apos;stat_tetoTetrisCount&apos;, value=3533), Stat(name=&apos;stat_tetoB2BCount&apos;, value=2832), Stat(name=&apos;stat_tetoRENMaxValue&apos;, value=8), Stat(name=&apos;stat_tetoPerfectCount&apos;, value=216), Stat(name=&apos;stat_sVS&apos;, value=1728), Stat(name=&apos;stat_sSWAP&apos;, value=6), Stat(name=&apos;stat_sMIX&apos;, value=4), Stat(name=&apos;stat_sMARATHON&apos;, value=1542)], steamID=&apos;XXXXXXXXXXX&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;400 Bad Request {}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_game_data(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;steam.apps.get_user_achievements(&quot;&amp;lt;steam_id&amp;gt;&quot;, &quot;&amp;lt;app_id&amp;gt;&quot;)&lt;/code&gt;と検索することで、&lt;code&gt;achievements&lt;/code&gt;のみを取得することも可能みたいです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Achievement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achieved: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;apiname: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;unlocktime: &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameAchievements&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;BaseModel&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements: List[Achievement]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gameName: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steamID: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;success: &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@function_decorator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_achievements&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;steam&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app_id&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.apps.&lt;/span&gt;&lt;span&gt;get_user_achievements&lt;/span&gt;&lt;span&gt;(steam_id, app_id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SteamGameAchievements&lt;/span&gt;&lt;span&gt;(**res[&lt;/span&gt;&lt;span&gt;&quot;playerstats&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Exception&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;400 Bad Request&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; e.args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;# Raise content of exception.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(achievements)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; achievements&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_achievements&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1888160&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_achievements&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1259790&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_achievements&lt;/span&gt;&lt;span&gt;(steam, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2854710&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;steam.apps.get_user_achievements(&quot;&amp;lt;steam_id&amp;gt;&quot;, &quot;&amp;lt;app_id&amp;gt;&quot;)&lt;/code&gt;と検索する方が、&lt;code&gt;achievement&lt;/code&gt;に関する情報がより詳細に格納されています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SteamGameAchievements(achievements=[Achievement(achieved=0, apiname=&apos;ACH00&apos;, description=&apos;Unlocked all achievements.&apos;, name=&apos;Armored Core&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ACH01&apos;, description=&apos;&apos;, name=&apos;The Perfect Mercenary&apos;, unlocktime=0), Achievement(achieved=1, apiname=&apos;ACH02&apos;, description=&apos;&apos;, name=&apos;Stargazer&apos;, unlocktime=1696261035), Achievement(achieved=1, apiname=&apos;ACH03&apos;, description=&apos;&apos;, name=&apos;Master of Arena&apos;, unlocktime=1695489096), Achievement(achieved=1, apiname=&apos;ACH04&apos;, description=&apos;&apos;, name=&apos;Asset Holder&apos;, unlocktime=1695996405), Achievement(achieved=1, apiname=&apos;ACH05&apos;, description=&apos;&apos;, name=&apos;Tuning Expert&apos;, unlocktime=1697118086), Achievement(achieved=1, apiname=&apos;ACH06&apos;, description=&apos;&apos;, name=&apos;The Fires of Raven&apos;, unlocktime=1694797344), Achievement(achieved=1, apiname=&apos;ACH07&apos;, description=&apos;&apos;, name=&apos;Liberator of Rubicon&apos;, unlocktime=1695064984), Achievement(achieved=1, apiname=&apos;ACH08&apos;, description=&apos;&apos;, name=&apos;Alea Iacta Est&apos;, unlocktime=1696261035), Achievement(achieved=1, apiname=&apos;ACH09&apos;, description=&apos;&apos;, name=&apos;Weapon Collector&apos;, unlocktime=1695996404), Achievement(achieved=1, apiname=&apos;ACH10&apos;, description=&apos;&apos;, name=&apos;External Parts Collector&apos;, unlocktime=1695996378), Achievement(achieved=1, apiname=&apos;ACH11&apos;, description=&apos;&apos;, name=&apos;Internal Parts Collector&apos;, unlocktime=1695996392), Achievement(achieved=1, apiname=&apos;ACH12&apos;, description=&apos;&apos;, name=&apos;Expansion Collector&apos;, unlocktime=1695104565), Achievement(achieved=1, apiname=&apos;ACH13&apos;, description=&apos;&apos;, name=&apos;Combat Log Collector&apos;, unlocktime=1695576602), Achievement(achieved=1, apiname=&apos;ACH14&apos;, description=&apos;&apos;, name=&apos;Data Log Collector&apos;, unlocktime=1693499027), Achievement(achieved=1, apiname=&apos;ACH15&apos;, description=&apos;&apos;, name=&apos;Testing Complete&apos;, unlocktime=1694468979), Achievement(achieved=1, apiname=&apos;ACH16&apos;, description=&apos;&apos;, name=&apos;Illegal Entry&apos;, unlocktime=1693148748), Achievement(achieved=1, apiname=&apos;ACH17&apos;, description=&apos;&apos;, name=&apos;Operation Wallclimber&apos;, unlocktime=1693497884), Achievement(achieved=1, apiname=&apos;ACH18&apos;, description=&apos;&apos;, name=&apos;Contact&apos;, unlocktime=1693516862), Achievement(achieved=1, apiname=&apos;ACH19&apos;, description=&apos;&apos;, name=&apos;Ocean Crossing&apos;, unlocktime=1693772650), Achievement(achieved=1, apiname=&apos;ACH20&apos;, description=&apos;&apos;, name=&apos;A New Threat&apos;, unlocktime=1694181014), Achievement(achieved=1, apiname=&apos;ACH21&apos;, description=&apos;&apos;, name=&apos;Ayre and the Coral&apos;, unlocktime=1694185005), Achievement(achieved=1, apiname=&apos;ACH22&apos;, description=&apos;&apos;, name=&apos;Into Unknown Territory&apos;, unlocktime=1694448640), Achievement(achieved=1, apiname=&apos;ACH23&apos;, description=&apos;&apos;, name=&apos;Re-education&apos;, unlocktime=1694620467), Achievement(achieved=1, apiname=&apos;ACH24&apos;, description=&apos;&apos;, name=&apos;The Floating City&apos;, unlocktime=1694623817), Achievement(achieved=1, apiname=&apos;ACH25&apos;, description=&apos;&apos;, name=&apos;MIA&apos;, unlocktime=1695570379), Achievement(achieved=1, apiname=&apos;ACH26&apos;, description=&apos;&apos;, name=&apos;Training Complete&apos;, unlocktime=1694113205), Achievement(achieved=1, apiname=&apos;ACH27&apos;, description=&apos;Assembled an AC.&apos;, name=&apos;Hardware Engineer&apos;, unlocktime=1693232881), Achievement(achieved=1, apiname=&apos;ACH28&apos;, description=&quot;Upgraded your AC&apos;s OS.&quot;, name=&apos;Software Engineer&apos;, unlocktime=1693499667), Achievement(achieved=1, apiname=&apos;ACH29&apos;, description=&apos;Changed the coloration of your AC.&apos;, name=&apos;Graphic Designer&apos;, unlocktime=1693149176)], gameName=&apos;ARMORED CORE™ VI FIRES OF RUBICON™&apos;, steamID=&apos;XXXXXXXXXXXXXXXXXXX&apos;, success=True)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SteamGameAchievements(achievements=[Achievement(achieved=0, apiname=&apos;ID_01_AllRulePlayed&apos;, description=&apos;Played all 6 offline modes&apos;, name=&apos;Competitor&apos;, unlocktime=0), Achievement(achieved=1, apiname=&apos;ID_02_WonKnockoutPast03&apos;, description=&apos;Defeated 3 opponents in an Endurance match&apos;, name=&apos;Duelist (x3)&apos;, unlocktime=1691515720), Achievement(achieved=1, apiname=&apos;ID_03_WonKnockoutPast05&apos;, description=&apos;Defeated 5 opponents in an Endurance match&apos;, name=&apos;Duelist (x5)&apos;, unlocktime=1691515720), Achievement(achieved=1, apiname=&apos;ID_04_WonKnockoutPast10&apos;, description=&apos;Defeated 10 opponents in an Endurance match&apos;, name=&apos;Duelist (x10)&apos;, unlocktime=1691517402), Achievement(achieved=0, apiname=&apos;ID_05_AllTokoPuyoRulePlayed&apos;, description=&apos;Played all 3 Puyo Puyo Challenge modes&apos;, name=&apos;Competitor (Puyo Puyo)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_06_AllTokoTetoRulePlayed&apos;, description=&apos;Played all 3 Tetris Challenge modes&apos;, name=&apos;Competitor (Tetris)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_07_ClearAdventure&apos;, description=&apos;Completed the main story within Adventure mode and watched the ending&apos;, name=&apos;Historian&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_08_WonLeagueMatch01&apos;, description=&apos;Won your first Puzzle League match&apos;, name=&apos;Gladiator (x1)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_09_WonClubMatch&apos;, description=&apos;Won your first Free Play match&apos;, name=&apos;Prize Fighter&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_10_AdventureAchievement50&apos;, description=&apos;Achieved 50% completion in Adventure mode&apos;, name=&apos;Wanderer&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_11_WonKnockoutPast15&apos;, description=&apos;Defeated 15 opponents in an Endurance match&apos;, name=&apos;Duelist (x15)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_12_AdventureAchievement70&apos;, description=&apos;Achieved 70% completion in Adventure mode&apos;, name=&apos;Devotee&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_13_WonLeagueMatch10&apos;, description=&apos;Won ten Puzzle League matches&apos;, name=&apos;Gladiator (x10)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_14_AdventureAchievement100&apos;, description=&apos;Achieved 100% completion in Adventure mode&apos;, name=&apos;Completionist&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_15_PuyoErase1000&apos;, description=&apos;Popped 1,000 Puyos in completed matches&apos;, name=&apos;Puyo King (x1,000)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_16_PuyoErase10000&apos;, description=&apos;Popped 10,000 Puyos in completed matches&apos;, name=&apos;Puyo King (x10,000)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_17_Puyo3Chain100&apos;, description=&apos;Performed a 3-Chain 100 times in completed matches&apos;, name=&apos;3-Chain Master&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_18_Puyo4Chain100&apos;, description=&apos;Performed a 4-Chain 100 times in completed matches&apos;, name=&apos;4-Chain Master&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_19_Puyo5Chain100&apos;, description=&apos;Performed a 5-Chain 100 times in completed matches&apos;, name=&apos;5-Chain Master&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_20_Puyo6Chain100&apos;, description=&apos;Performed a 6-Chain 100 times in completed matches&apos;, name=&apos;6-Chain Master&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_21_PuyoAllErase50&apos;, description=&apos;Performed an All Clear 50 times in completed matches.&apos;, name=&apos;Screen Cleaner (x50)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_22_PuyoAllErase100&apos;, description=&apos;Performed an All Clear 100 times in completed matches&apos;, name=&apos;Screen Cleaner (x100)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_23_Puyo3ColorErase&apos;, description=&apos;Cleared 3 different-colored Puyo groups simultaneously in a completed match&apos;, name=&apos;Chromatic Popper&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_24_Puyo4ColorErase&apos;, description=&apos;Cleared 4 different-colored Puyo groups simultaneously in a completed match&apos;, name=&apos;Prismatic Popper&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_25_PuyoErase50000&apos;, description=&apos;Popped 50,000 Puyos in completed matches&apos;, name=&apos;Puyo King (x50,000)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_26_Puyo7Chain150&apos;, description=&apos;Performed a 7-Chain 150 times in completed matches&apos;, name=&apos;7-Chain Master&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_27_PuyoAllErase150&apos;, description=&apos;Performed an All Clear 150 times in completed matches&apos;, name=&apos;Screen Cleaner (x150)&apos;, unlocktime=0), Achievement(achieved=0, apiname=&apos;ID_28_PuyoErase100000&apos;, description=&apos;Popped 100,000 Puyos in completed matches&apos;, name=&apos;Puyo King (x100,000)&apos;, unlocktime=0), Achievement(achieved=1, apiname=&apos;ID_29_TetoMinoErase1000&apos;, description=&apos;Cleared 1,000 Minos in completed matches&apos;, name=&apos;Mino King (x1,000)&apos;, unlocktime=1688252641), Achievement(achieved=1, apiname=&apos;ID_30_TetoMinoErase10000&apos;, description=&apos;Cleared 10,000 Minos in completed matches&apos;, name=&apos;Mino King (x10,000)&apos;, unlocktime=1688292201), Achievement(achieved=1, apiname=&apos;ID_31_TetoTETRISx50&apos;, description=&apos;Performed a Tetris Line Clear 50 times in completed matches&apos;, name=&apos;Tetris Champ (x50)&apos;, unlocktime=1688254876), Achievement(achieved=1, apiname=&apos;ID_32_TetoTETRISx100&apos;, description=&apos;Performed a Tetris Line Clear 100 times in completed matches&apos;, name=&apos;Tetris Champ (x100)&apos;, unlocktime=1688291516), Achievement(achieved=1, apiname=&apos;ID_33_TetoB2Bx25&apos;, description=&apos;Performed a Back-to-Back 25 times in completed matches&apos;, name=&apos;Show Off (x25)&apos;, unlocktime=1688254876), Achievement(achieved=1, apiname=&apos;ID_34_TetoB2Bx50&apos;, description=&apos;Performed a Back-to-Back 50 times in completed matches&apos;, name=&apos;Show Off (x50)&apos;, unlocktime=1688292629), Achievement(achieved=1, apiname=&apos;ID_35_Teto5REN&apos;, description=&apos;Performed a 5-Combo in a completed match&apos;, name=&apos;Combo Maker&apos;, unlocktime=1688302367), Achievement(achieved=1, apiname=&apos;ID_36_Teto8REN&apos;, description=&apos;Performed an 8-Combo in a completed match&apos;, name=&apos;Combo Master&apos;, unlocktime=1688401629), Achievement(achieved=1, apiname=&apos;ID_37_TetoPERFECT1&apos;, description=&apos;Performed a Perfect Clear in a completed match&apos;, name=&apos;Perfectionist (x1)&apos;, unlocktime=1721329100), Achievement(achieved=1, apiname=&apos;ID_38_TetoPERFECT3&apos;, description=&apos;Performed a Perfect Clear 3 times in completed matches&apos;, name=&apos;Perfectionist (x3)&apos;, unlocktime=1721329241), Achievement(achieved=1, apiname=&apos;ID_39_TetoMinoErase50000&apos;, description=&apos;Cleared 50,000 Minos in completed matches&apos;, name=&apos;Mino King (x50,000)&apos;, unlocktime=1688324982), Achievement(achieved=1, apiname=&apos;ID_40_TetoTETRISx200&apos;, description=&apos;Performed a Tetris Line Clear 200 times in completed matches&apos;, name=&apos;Tetris Champ (x200)&apos;, unlocktime=1688297436), Achievement(achieved=1, apiname=&apos;ID_41_TetoB2Bx100&apos;, description=&apos;Performed a Back-to-Back 100 times in completed matches&apos;, name=&apos;Show Off (x100)&apos;, unlocktime=1688318590), Achievement(achieved=1, apiname=&apos;ID_42_TetoMinoErase100000&apos;, description=&apos;Cleared 100,000 Minos in completed matches&apos;, name=&apos;Mino King (x100,000)&apos;, unlocktime=1688456802), Achievement(achieved=0, apiname=&apos;ID_00_AllGet&apos;, description=&apos;For obtaining all trophies.&apos;, name=&apos;All Trophies Obtained&apos;, unlocktime=0)], gameName=&apos;Puyo Puyo™ Tetris® 2&apos;, steamID=&apos;XXXXXXXXXXXXXXXX&apos;, success=True)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): start executing…&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(&apos;400 Bad Request {&quot;playerstats&quot;:{&quot;error&quot;:&quot;Requested app has no &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;stats&quot;,&quot;success&quot;:false}}&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;retrieve_achievements(): finish executing.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Steamの情報を可視化する。&lt;a href=&quot;#steamの情報を可視化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは獲得したSteamの情報をWebページで表示できるようにしていきます。&lt;/p&gt;&lt;p&gt;まずは、FastAPIおよびPanelのパッケージをインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FastAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Panel[FastAPI]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;app.py&lt;/code&gt;でFastAPIのルーター的なものを実装して、&lt;code&gt;panel_creator.py&lt;/code&gt;で実際にSteamの情報を表示する処理を書いていきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/app.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Builtin packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Third party packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; fastapi &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; FastAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; panel.io.fastapi &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; add_applications&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; fastapi.middleware.cors &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CORSMiddleware&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; uvicorn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Local packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel_creator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;app &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FastAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;origins &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;app.&lt;/span&gt;&lt;span&gt;add_middleware&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CORSMiddleware,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_origins&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;origins,  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# List of allowed origins&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_credentials&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_methods&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;],  &lt;/span&gt;&lt;span&gt;# Allow all methods&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;],  &lt;/span&gt;&lt;span&gt;# Allow all headers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_root&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;World&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/steam&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_steam&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Steam&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;add_applications&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/pnl_app21&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel_creator.&lt;/span&gt;&lt;span&gt;create_game_thumbnails&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;app)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uvicorn.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(app, &lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;PORT&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8080&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;src/panel_creator.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Builtin packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Third party packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; numpy &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pandas &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.pyplot &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; plt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.figure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; dt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.models &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CustomJS, Slider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Local packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pn.&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;comms&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;vscode&quot;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# to use on VSCode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_game_thumbnails&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.base.BaseTemplate.servable:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(steam_client, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_img_icon&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;game&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameProfile&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.pane.image.Image:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_icon &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;https://avatars.akamai.steamstatic.com/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.img_icon_url&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;_full.jpg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pn.pane.&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt;&lt;span&gt;(img_icon, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alt_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;_icon&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(get_img_icon, games))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_img_panels&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[pn.pane.image.Image]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;number_of_icon_per_row&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[pn.layout.base.Row]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i, component &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(elements):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(component)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; number_of_icon_per_row &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;# Create a new column per 30 components&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(*col, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; col:  &lt;/span&gt;&lt;span&gt;# Append rest components into the last column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(*col, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;panels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*columns, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; panels&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;panels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_img_panels&lt;/span&gt;&lt;span&gt;(imgs, &lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard.main.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*panels, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.material.MaterialTemplate:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;custom_header &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;link rel=&quot;icon&quot; type=&quot;image/x-icon&quot; href=&quot;./../static/favicon_08bit.ico&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create Panel template to append custom HTML&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.template.&lt;/span&gt;&lt;span&gt;MaterialTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;My Panel App&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;custom_header&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; dashboard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ゲームのアイコンが一覧で取れるようになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1273&quot; height=&quot;500&quot; src=&quot;/_astro/31.BE_s9IEz_1DRyw4.webp&quot; srcset=&quot;/_astro/31.BE_s9IEz_ZG148Q.webp 640w, /_astro/31.BE_s9IEz_Z1Td4nr.webp 750w, /_astro/31.BE_s9IEz_ZXmQfb.webp 828w, /_astro/31.BE_s9IEz_Z1Yg8KH.webp 1080w, /_astro/31.BE_s9IEz_1DRyw4.webp 1273w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;src/panel_creator.py&lt;/code&gt; にサムネイルを一覧で取得するように実装します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Builtin packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Third party packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; numpy &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pandas &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.pyplot &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; plt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.figure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; dt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.models &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CustomJS, Slider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Local packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pn.&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;comms&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;vscode&quot;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# to use on VSCode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.material.MaterialTemplate:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;custom_header &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;link rel=&quot;icon&quot; type=&quot;image/x-icon&quot; href=&quot;./../static/favicon_08bit.ico&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create Panel template to append custom HTML&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.template.&lt;/span&gt;&lt;span&gt;MaterialTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;My Panel App&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;custom_header&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; dashboard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# @steam.function_decorator&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_get_game_img&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;game&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameProfile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;img_category&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.pane.image.Image:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_icon &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; img_category &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;img_category&apos; must not be None.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; img_category &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_icon &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;https://avatars.akamai.steamstatic.com/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.img_icon_url&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;_full.jpg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Not change width, height and margin.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; img_category &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;thumbnail&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img_icon &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;https://shared.fastly.steamstatic.com//store_item_assets/steam/apps/&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.appid&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/library_600x900.jpg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;something went wrong.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pn.pane.&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Image&lt;/span&gt;&lt;span&gt;(img_icon, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alt_text&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;_icon&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;width, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;height, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;margin)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_img_panels&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[pn.pane.image.Image]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;number_of_icon_per_row&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stretch_both&quot;&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[pn.layout.base.Row]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i, component &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(elements):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(component)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; number_of_icon_per_row &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;# Create a new column per 30 components&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(*col, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sizing_mode, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;col &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; col:  &lt;/span&gt;&lt;span&gt;# Append rest components into the last column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(*col, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sizing_mode, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;panels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*columns, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sizing_mode)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; panels&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_game_icons&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.base.BaseTemplate.servable:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(steam_client, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iterable_01 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;&lt;span&gt;: [x] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(_get_game_img, games, &lt;/span&gt;&lt;span&gt;iterable_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;, games)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;panels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_img_panels&lt;/span&gt;&lt;span&gt;(imgs, &lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(panels)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard.main.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*panels, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_game_thumbnails&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.base.BaseTemplate.servable:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;steam_client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(steam_client, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iterable_01 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;&lt;span&gt;: [x] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(_get_game_img, games, &lt;/span&gt;&lt;span&gt;iterable_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;thumbnail&quot;&lt;/span&gt;&lt;span&gt;, games)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;panels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_img_panels&lt;/span&gt;&lt;span&gt;(imgs, &lt;/span&gt;&lt;span&gt;NUMBER_OF_ICON_PER_ROW&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;stretch_both&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(panels)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard.main.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*panels, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_game_achievements&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(layout)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;今度は、ゲームのサムネイルが一覧で取れるようになりました。リンク切れになっているタイトルがチラホラあったりもします。
&lt;img loading=&quot;lazy&quot; width=&quot;2550&quot; height=&quot;1262&quot; src=&quot;/_astro/32.93GsC9cV_1YNvhB.webp&quot; srcset=&quot;/_astro/32.93GsC9cV_ZLzrQE.webp 640w, /_astro/32.93GsC9cV_6EmjI.webp 750w, /_astro/32.93GsC9cV_dNYdO.webp 828w, /_astro/32.93GsC9cV_ZQHzXk.webp 1080w, /_astro/32.93GsC9cV_ZyGBR5.webp 1280w, /_astro/32.93GsC9cV_Z1EUjH7.webp 1668w, /_astro/32.93GsC9cV_Z24Qfmj.webp 2048w, /_astro/32.93GsC9cV_1YNvhB.webp 2550w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、ゲーム毎にサムネイル、タイトル、 Achievements や Stats を表示させます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Builtin packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; List, Tuple, TypeVar&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; functools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Third party packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; numpy &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pandas &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.pyplot &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; plt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.figure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; dt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.models &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CustomJS, Slider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; steam_web_api &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Local packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; steam&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; cfg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pn.&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;comms&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;vscode&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_from_timestamp_to_format_iso_datetime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;will_be_utc&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert a Unix timestamp into an ISO 8601 formatted date string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param timestamp: Unix timestamp (int or float)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param will_be_utc: Boolean representing whether the date is going to format in UTC time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type timestamp: int or float&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: ISO 8601 formatted date string or empty string if input is invalid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; timestamp:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(timestamp, (&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Timestamp must be an integer or float.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; will_be_utc:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jst_delta &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;timestamp &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; jst_delta&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; datetime.datetime.&lt;/span&gt;&lt;span&gt;fromtimestamp&lt;/span&gt;&lt;span&gt;(timestamp).&lt;/span&gt;&lt;span&gt;isoformat&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convert_from_iso_datetime_to_format_date_str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;iso_date_string&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Format ISO date string into a datetime object or return an empty string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param date_string: String representing a date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: Formatted datetime object or empty string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; iso_date_string:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(iso_date_string, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ISO date string must be a string.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; datetime.datetime.&lt;/span&gt;&lt;span&gt;fromisoformat&lt;/span&gt;&lt;span&gt;(iso_date_string).&lt;/span&gt;&lt;span&gt;strftime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;%Y-%m-&lt;/span&gt;&lt;span&gt;%d&lt;/span&gt;&lt;span&gt; %H:%M:%S&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_minutes_to_hours&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;minutes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; minutes &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;remaining_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; minutes &lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;spacer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; hours &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt;&lt;span&gt; remaining_minutes &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;hours&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;spacer&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;hours &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;remaining_minutes&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;spacer&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;minutes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; hours &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;hours&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;spacer&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;hours &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;remaining_minutes&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;spacer&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;minutes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_h2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;game&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameProfile&lt;/span&gt;&lt;span&gt;) -&amp;gt; Tuple[pn.pane.image.Image, pn.pane.Markdown]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;icon  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_get_game_img&lt;/span&gt;&lt;span&gt;(game, &lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;## &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;game.name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;styles&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(icon.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; icon &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; icon)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(h2.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; h2 &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; h2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (icon, h2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_playtime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;game&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameProfile&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.pane.Markdown:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iso_datetime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_from_timestamp_to_format_iso_datetime&lt;/span&gt;&lt;span&gt;(game.rtime_last_played, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convert_from_iso_datetime_to_format_date_str&lt;/span&gt;&lt;span&gt;(iso_datetime)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_2weeks_formatted &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_minutes_to_hours&lt;/span&gt;&lt;span&gt;(game.playtime_2weeks) &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; game.playtime_2weeks &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; game.playtime_2weeks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_disconnected_formatted &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_minutes_to_hours&lt;/span&gt;&lt;span&gt;(game.playtime_disconnected) &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; game.playtime_disconnected &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; game.playtime_disconnected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime_forever_formatted &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_minutes_to_hours&lt;/span&gt;&lt;span&gt;(game.playtime_forever) &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; game.playtime_forever &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; game.playtime_forever&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Playtime | Value |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| ----------- | ----------- |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Playtime recent 2 weeks | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;playtime_2weeks_formatted&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Disconnected Playtime | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;playtime_disconnected_formatted&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Forever Playtime | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;playtime_forever_formatted&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Recent time last played | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;date_str&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;styles&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(playtime.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; playtime &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; playtime)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; playtime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_stats_data_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;stats_data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameStatsData&lt;/span&gt;&lt;span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;T&quot;&lt;/span&gt;&lt;span&gt;, pn.pane.Markdown, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; stats_data &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; stats_data.stats &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_stats_value_table&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.Achievement&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;| &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(create_stats_value_table, stats_data.stats))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; functools.&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, stats)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;| Stat Name | Stat Value |&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;| ----------- | ----------- |&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;stats_info&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;(stats_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(stats_info.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; stats_info &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; stats_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; stats_info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_achievement_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;achievements&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameAchievements&lt;/span&gt;&lt;span&gt;&lt;span&gt;) -&amp;gt; Tuple[&lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;T&quot;&lt;/span&gt;&lt;span&gt;, pn.pane.Markdown, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;TypeVar&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;T&quot;&lt;/span&gt;&lt;span&gt;, pn.pane.Markdown, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;)]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievement_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; achievements &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievement_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Playtime | Value |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| ----------- | ----------- |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;| Achievements can be retrieved | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;achievements.success&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;styles&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; achievements.achievements &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_achievement_value_table&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.Achievement&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iso_datetime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;format_from_timestamp_to_format_iso_datetime&lt;/span&gt;&lt;span&gt;(a.unlocktime, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convert_from_iso_datetime_to_format_date_str&lt;/span&gt;&lt;span&gt;(iso_datetime)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;| &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.apiname&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.description&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a.achieved&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;date_str&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; |&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptions &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(create_achievement_value_table, achievements.achievements))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; functools.&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, descriptions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;| Achievement Name | Achievement API Name | Description | Is Achieved | Unlock Time |&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;| ----------- | ----------- | ----------- | ----------- | ----------- |&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;description_info&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description_info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.pane.&lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt;(description_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(achievement_info.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; achievement_info &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; achievement_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(description_info.object &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; description_info &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; description_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (achievement_info, description_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_get_game_detail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;game&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; steam.SteamGameProfile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steam_client&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Steam&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.layout.base.Column:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Retrieve game data to show&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_game_data&lt;/span&gt;&lt;span&gt;(steam_client, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, game.appid)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;achievements &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_achievements&lt;/span&gt;&lt;span&gt;(steam_client, &lt;/span&gt;&lt;span&gt;STEAM_ID&lt;/span&gt;&lt;span&gt;, game.appid)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create Heading 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(icon, h2) &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_h2&lt;/span&gt;&lt;span&gt;(game)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create playtime info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;playtime &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_playtime&lt;/span&gt;&lt;span&gt;(game)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create achievement info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(achievement_info, description_info) &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_achievement_info&lt;/span&gt;&lt;span&gt;(achievements)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create stat info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stats_data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_create_stats_data_info&lt;/span&gt;&lt;span&gt;(game_data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create image&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thumbnail &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_get_game_img&lt;/span&gt;&lt;span&gt;(game, &lt;/span&gt;&lt;span&gt;&quot;thumbnail&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create layout in the panel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(icon, h2, &lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row2_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(achievement_info, description_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row2_3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(stats_data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(thumbnail, playtime, row2_2, row2_3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(row1, row2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@steam&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;function_decorator&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_game_details&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.template.base.BaseTemplate.servable:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;my_steam_client &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;get_steam_client&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MY_STEAM_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cfg.&lt;/span&gt;&lt;span&gt;get_my_steam_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;games &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; steam.&lt;/span&gt;&lt;span&gt;retrieve_owned_games&lt;/span&gt;&lt;span&gt;(my_steam_client, &lt;/span&gt;&lt;span&gt;MY_STEAM_ID&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_dashboard_with_html_header&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iterable_01 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;&lt;span&gt;: [x] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# games = games[:4] # tmp &lt;/span&gt;&lt;span&gt;TODO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;game_details &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tuple&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(_get_game_detail, games, &lt;/span&gt;&lt;span&gt;iterable_01&lt;/span&gt;&lt;span&gt;(my_steam_client, games), &lt;/span&gt;&lt;span&gt;iterable_01&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MY_STEAM_ID&lt;/span&gt;&lt;span&gt;, games)))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard.main.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(*game_details, &lt;/span&gt;&lt;span&gt;sizing_mode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;scale_width&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;panel.pane.Markdown&lt;/code&gt;のクラスを使って、ゲームのAchievementsを表示させることが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;2163&quot; height=&quot;1265&quot; src=&quot;/_astro/41.AYP3LPUe_2dKerV.webp&quot; srcset=&quot;/_astro/41.AYP3LPUe_1idMsd.webp 640w, /_astro/41.AYP3LPUe_1sBBnF.webp 750w, /_astro/41.AYP3LPUe_2g6FYM.webp 828w, /_astro/41.AYP3LPUe_1QnSBK.webp 1080w, /_astro/41.AYP3LPUe_Z1GLw3j.webp 1280w, /_astro/41.AYP3LPUe_NUuWJ.webp 1668w, /_astro/41.AYP3LPUe_2g3jTH.webp 2048w, /_astro/41.AYP3LPUe_2dKerV.webp 2163w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同様に、ゲームのStatsも右の方に表示することが出来ました。PanelではMarkdownを書けるのが便利ですね。
&lt;img loading=&quot;lazy&quot; width=&quot;2258&quot; height=&quot;1253&quot; src=&quot;/_astro/42.DCCvKvJo_qNKJh.webp&quot; srcset=&quot;/_astro/42.DCCvKvJo_ZIvPY2.webp 640w, /_astro/42.DCCvKvJo_ZxQR6q.webp 750w, /_astro/42.DCCvKvJo_Z2gVUFb.webp 828w, /_astro/42.DCCvKvJo_TvXbN.webp 1080w, /_astro/42.DCCvKvJo_lH4Xn.webp 1280w, /_astro/42.DCCvKvJo_2793Rj.webp 1668w, /_astro/42.DCCvKvJo_27VwWi.webp 2048w, /_astro/42.DCCvKvJo_qNKJh.webp 2258w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、上記のコードだと処理が直列になっているので、並行もしくは並列化したいですね。とりあえず今回はこんなところで終わっておきます・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Pythonを使って、&lt;code&gt;matplotlib&lt;/code&gt;でプロットしたチャートを、FastAPIおよびPanelでWebページとして表示するツールを作る流れを紹介しました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;python-steam-api&lt;/code&gt;パッケージの方が、Steam Web APIよりもレスポンスの情報が整理されている。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;python-steam-api&lt;/code&gt;で、ユーザーの基本情報や所持しているゲームの情報を取得することが出来る。&lt;/li&gt;
&lt;li&gt;PanelではMarkdownを使ってページの描画を制御できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回、プロットするための情報があまり無かったのでグラフは作りませんでした。なぜなら、&lt;code&gt;python-steam-api&lt;/code&gt;で時系列データを取得できなかったからです。これに関しては、毎月のタイミングとかでデータを取得するしかないですかね。データが貯まったらプロットしたチャートも映してみたいです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲームとプログラミングのお供に&lt;a href=&quot;#ゲームとプログラミングのお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4iFjR3Z&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G ゲーミングキーボード G515 LIGHTSPEED TKL 薄型 ワイヤレス テンキーレス キーボード G515-WL-TCBK タクタイル 茶軸 確かな打鍵感 日本語配列 LIGHTSPEED Bluetooth 接続対応 LIGHTSYNC RGB ブラック PC 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4iFjR3Z&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZAI8zK&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;エレコム ラピッドトリガー ゲーミングキーボード V custom VK720AL 有線 磁気式アナログ検知スイッチ搭載 75％サイズ ロープロファイル ブラック TK-VK720ALBK&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZAI8zK&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZBhFBW&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G(ロジクール G) ゲーミングマウスパッド G240 クロス表面 標準サイズ 340×280×1mm マウスパッド G240f 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZBhFBW&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gdoroI&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gdoroI&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか作れそうな感じはするなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;データが貯まるまで待ちですか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Pythonのタブサイズがどうしても「4」にならない</title><link>https://endorphinbath.com/posts/python-tabsize-not-4-but-2/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-tabsize-not-4-but-2/</guid><description>Pythonのタブサイズがどうしても「4」にならなかった。というか、インデントのサイズがどうしても「4」にならなかった。settings.jsonの設定に足らないものがあるのかもしれない。</description><pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コイツ、いつまで経っても「2」だな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いつまでも「4」だな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonのタブサイズがどうしても「2」になる。&lt;a href=&quot;#pythonのタブサイズがどうしても2になる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ずーっとウザかった。Pythonのタブサイズがどうしても「4」にならなかった。というか、インデントのサイズがどうしても「4」にならなかった。&lt;/p&gt;&lt;p&gt;ほら。
&lt;img loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;259&quot; src=&quot;/_astro/11.BBLFWS-X_1WwWH.webp&quot; srcset=&quot;/_astro/11.BBLFWS-X_Z1yTQD.webp 640w, /_astro/11.BBLFWS-X_1WwWH.webp 700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;どうして刻むんだ。
&lt;img loading=&quot;lazy&quot; width=&quot;682&quot; height=&quot;279&quot; src=&quot;/_astro/12.8rc9s4fB_1jKRDf.webp&quot; srcset=&quot;/_astro/12.8rc9s4fB_Jfpo8.webp 640w, /_astro/12.8rc9s4fB_1jKRDf.webp 682w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この「タブサイズ」と「インデントサイズ」の双方の概念を把握しているかどうかが、今回の問題の肝です。
最近、この問題がやっと解決したのでこの記事にメモしておきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法その1：設定のTab Size&lt;a href=&quot;#解決法その1設定のtab-size&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最も基本的な項目です。&lt;/p&gt;&lt;p&gt;ここの設定では、基本的なタブのサイズが設定されます。しかし、僕は基本的にタブのサイズは&lt;code&gt;2&lt;/code&gt;が良いと思っているので、ここは&lt;code&gt;2&lt;/code&gt;のままで、Pythonの時だけ&lt;code&gt;4&lt;/code&gt;にして欲しい。
&lt;img loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;204&quot; src=&quot;/_astro/21.B80x8Cop_1RRnTP.webp&quot; srcset=&quot;/_astro/21.B80x8Cop_1RRnTP.webp 611w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、&lt;code&gt;settings.json&lt;/code&gt;だと&lt;code&gt;&quot;editor.tabSize&quot;&lt;/code&gt;の項目に該当します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法その2：Detect Indentation の設定&lt;a href=&quot;#解決法その2detect-indentation-の設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Detect Indentation&lt;/code&gt;という設定項目も見ておきます。&lt;/p&gt;&lt;p&gt;この設定がオンになっていると、ファイルのインデントを見て、そのファイルにおけるインデントのサイズを設定します。オフになっていれば、エディタで設定してあるインデントのサイズしか反映されないわけです。&lt;/p&gt;&lt;p&gt;個人的には、&lt;code&gt;settings.json&lt;/code&gt;で設定した値だけを反映してほしいので、オフにしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;152&quot; src=&quot;/_astro/22.CvPThRmG_22ufv0.webp&quot; srcset=&quot;/_astro/22.CvPThRmG_22ufv0.webp 594w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、&lt;code&gt;settings.json&lt;/code&gt;だと&lt;code&gt;&quot;editor.detectIndentation&quot;&lt;/code&gt;の項目に該当します。Falseにすればオフになります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法その3：フォーマッタの設定&lt;a href=&quot;#解決法その3フォーマッタの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Prettierなどの拡張機能に対する設定でタブサイズやインデントサイズが設定されていないかどうかをも見るべきところです。しかし、僕はフォーマッタは入れていませんし、Pylintとかも入れていません。（ESLintは入っていますが今回は関係ありません。）
&lt;img loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;350&quot; src=&quot;/_astro/23.QsDVsiV3_1CwmM4.webp&quot; srcset=&quot;/_astro/23.QsDVsiV3_Z27ktN9.webp 640w, /_astro/23.QsDVsiV3_1CwmM4.webp 674w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、&lt;code&gt;settings.json&lt;/code&gt;だと個々のフォーマッタ用の項目に該当したり、フォーマッタ用の設定ファイルで確認できますね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法その4：.editorconfigのindent_size&lt;a href=&quot;#解決法その4editorconfigのindent_size&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Editorconfig」は、コードエディタ間でファイル(コード)のフォーマットを一貫させるための機能です。そして、&lt;code&gt;.editorconfig&lt;/code&gt;は、その設定ファイルの形式です。JetBrainsの各IDEや、AtomとかXcodeでも使えるみたいですね。&lt;/p&gt;&lt;p&gt;その&lt;code&gt;.editorconfig&lt;/code&gt;をこんな風に設定してみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Editor configuration, see https://editorconfig.org&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;root = true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.py&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;indent_size = 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;設定してみると・・・やりました！
Pythonファイルの時にだけ、インデントのサイズが4になりました！
&lt;img loading=&quot;lazy&quot; width=&quot;1435&quot; height=&quot;364&quot; src=&quot;/_astro/26.2o1UcINP_ZjRcuU.webp&quot; srcset=&quot;/_astro/26.2o1UcINP_ZAu0cr.webp 640w, /_astro/26.2o1UcINP_ZTz1Nw.webp 750w, /_astro/26.2o1UcINP_Z2vKPAr.webp 828w, /_astro/26.2o1UcINP_1Ix2Bp.webp 1080w, /_astro/26.2o1UcINP_pb7pL.webp 1280w, /_astro/26.2o1UcINP_ZjRcuU.webp 1435w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うーんでもなあ・・・、インデントのサイズを設定するためにわざわざ1つファイルを増やさなければならないのが気に入りません・・・。他に方法は無いのか？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法その5：settings.jsonでどちらか片方しか設定していない。&lt;a href=&quot;#解決法その5settingsjsonでどちらか片方しか設定していない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここまで記事を書いてきて、何か気になります・・・。タブサイズ？　インデントサイズ？&lt;/p&gt;&lt;p&gt;そう、もしかしたら、&lt;code&gt;settings.json&lt;/code&gt;の中で、タブサイズもしくはインデントサイズの片方しか設定していないのではないでしょうか・・・。
僕のVSCodeがPythonのインデントをずっと「2」で表示し続けていた時の&lt;code&gt;settings.json&lt;/code&gt;のPythonにおける設定がこれです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;[python]&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;diffEditor.ignoreTrimWhitespace&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.tabSize&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そこで、このようにsettings.jsonを変更します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;[python]&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;diffEditor.ignoreTrimWhitespace&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.tabSize&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.indentSize&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// &amp;lt;- New&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;設定してみると・・・やりました！
Pythonファイルの時にだけ、タブおよびインデントのサイズが4になりました！
&lt;img loading=&quot;lazy&quot; width=&quot;721&quot; height=&quot;432&quot; src=&quot;/_astro/31.BnBqO9T2_hs5Uw.webp&quot; srcset=&quot;/_astro/31.BnBqO9T2_ZRDELk.webp 640w, /_astro/31.BnBqO9T2_hs5Uw.webp 721w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、&lt;code&gt;settings.json&lt;/code&gt;だと&lt;code&gt;&quot;editor.tabSize&quot;&lt;/code&gt;もしくは&lt;code&gt;&quot;editor.indentSize&quot;&lt;/code&gt;の項目に該当します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事を見ることで、古今東西の人のPython利用者のタブおよびインデントのサイズが「4」になることを願っています。&lt;/p&gt;&lt;p&gt;タブおよびインデントのサイズをどうにかしたいと思っている人は、他にもいらっしゃるみたいですね。（8スペースのタブを4スペースのインデントを設定する？ そんなことあるの？）&lt;/p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29972396/how-can-i-customize-the-tab-to-space-conversion-factor-in-vs-code&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://stackoverflow.com/Content/Sites/stackoverflow/Img/favicon.ico?v=562fb39d93c8&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Stack Overflow&lt;/span&gt;&lt;/div&gt;&lt;div&gt;How can I customize the tab-to-space conversion factor in VS Code?&lt;/div&gt;&lt;div&gt;How do I customize the tab-to-space conversion factor when using Visual Studio Code? For instance, right now in HTML it appears to produce two spaces per press of TAB, but in TypeScript it produce...&lt;/div&gt;&lt;div&gt;stackoverflow.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://stackoverflow.com/Content/Sites/stackoverflow/Img/apple-touch-icon@2.png?v=0f0cab681579&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Python関連の書籍&lt;a href=&quot;#python関連の書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4f7ZNUZ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Python2年生 デスクトップアプリ開発のしくみ 体験してわかる！会話でまなべる！&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4f7ZNUZ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3Zq1yap&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;動かして学ぶ！Python FastAPI開発入門&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3Zq1yap&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZwB1rO&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;動かして学ぶ! Pythonサーバレスアプリ開発入門&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZwB1rO&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やっと「4」になった・・・！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一生「2」にならないで欲しいな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年11月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202411/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202411/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にSatisfactoryとかELDEN RINGとかPalworldとかアズールレーンとか色々更新してます。</description><pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年11月に投稿した動画の一覧&lt;a href=&quot;#2024年11月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】硫酸と梱包された硫酸で作る被覆型ウランセル #47 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory硫酸と梱包された硫酸で作る被覆型ウランセル-47--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sWJJnvED9tM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】通商破壊でロイヤル・フォーチュンを放置して勝利&lt;a href=&quot;#アズールレーン通商破壊でロイヤルフォーチュンを放置して勝利&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AR-Uvm90n4c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】ジェッドラン20体とアグニドラ20体とテラナイト50体でベラルージュ極に挑む！&lt;a href=&quot;#palworldジェッドラン20体とアグニドラ20体とテラナイト50体でベラルージュ極に挑む&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9S1RQxWJFgI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】最高速ベイントールで昼間のセイントール達を捕まえる！&lt;a href=&quot;#palworld最高速ベイントールで昼間のセイントール達を捕まえる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VvAi0mXHIwk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ELDEN RING】ただモーグを倒すだけの教育的な動画&lt;a href=&quot;#elden-ringただモーグを倒すだけの教育的な動画&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bIkUZ4IzPW0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ELDEN RING】ただ暗黒の星々アステールを倒すだけの動画&lt;a href=&quot;#elden-ringただ暗黒の星々アステールを倒すだけの動画&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/rspShUOcz9M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】酒匂は顔が無くても可愛い #Shorts&lt;a href=&quot;#アズールレーン酒匂は顔が無くても可愛い-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/EPrOwTthzoY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】酒匂はのっぺらぼうでも可愛い&lt;a href=&quot;#アズールレーン酒匂はのっぺらぼうでも可愛い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Qzs4ngEoiEk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】スイーツパッケージなんて作れるわけがない！！ #14【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryスイーツパッケージなんて作れるわけがない-14ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/11/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/DlpkEfe_wzI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Project IDXでFastAPIベースのPanelアプリを作りたかったんだけど結局よく分からなかった</title><link>https://endorphinbath.com/posts/project-idx-fastapi-panel-app-failed/</link><guid isPermaLink="true">https://endorphinbath.com/posts/project-idx-fastapi-panel-app-failed/</guid><description>Project IDXというクラウドIDEでPanel + FastAPIフレームワークによるWebアプリ開発のテンプレートを作ろうとしてdev.nixやrequirements.txtを模索した記事です。</description><pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;またかぁ？　このIDEはぁ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;使えるかもしれん。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Project IDXとかいうクラウドIDEでWebアプリを作りたい&lt;a href=&quot;#project-idxとかいうクラウドideでwebアプリを作りたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前に存在を知った「Project IDX」という、Googleが開発中の、ブラウザ上もといクラウド上でUIテストとかも出来てしまうIDEを調べました。そして今回、それを実際に使ってみようというわけです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/project-idx-cloud-ide-first-impression/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Project IDXというクラウドIDEを触ってみました。&lt;/div&gt;&lt;div&gt;Googleが現在開発中でベータ版のProject IDXというIDEに関する記事です。Cloud Shell Editorを使っている身からしたらどれぐらい強くなるのかワクワクです。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241208_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「Project IDX」が気になった方は、公式のサイトはこちらです。2024-12-07時点ではWaitlist等は無く、すぐに開発を始めることが出来ます。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/docs/studio/idx-is-firebase-studio?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/firebase/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されました&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されたことをお知らせする記事。既存のユーザー向けの移行の詳細と新機能について説明しています。&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回作りたいWebアプリ&lt;a href=&quot;#今回作りたいwebアプリ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、PythonのWeb APIフレームワークであるFastAPIと、インタラクティブなダッシュボードをWeb上に作成できるライブラリであるPanelを使ってWebアプリを作っていきます。&lt;/p&gt;&lt;a href=&quot;https://fastapi.tiangolo.com/ja/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://fastapi.tiangolo.com/img/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;fastapi.tiangolo.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;FastAPI - FastAPI&lt;/div&gt;&lt;div&gt;FastAPI framework, high performance, easy to learn, fast to code, ready for production&lt;/div&gt;&lt;div&gt;fastapi.tiangolo.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://panel.holoviz.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://panel.holoviz.org/_static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;panel.holoviz.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Overview — Panel v1.9.1&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;panel.holoviz.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;GitHubにあるPanelのリポジトリからその様子を見てみると、Webページ上でなんかドラッグしたりすることが出来たりしそうなので、これをProject IDX上のプレビュー画面で実際にやってみたら便利だろうなあっと思って、まずはProject IDXでその両者のパッケージを動かせる状態にするところから始めていきたいと思います。&lt;/p&gt;&lt;p&gt;そして、Panel公式のページの中に、FastAPIを使ってPanelのダッシュボードを作るチュートリアル的なものがあるので、そのコードを試してみます。&lt;/p&gt;&lt;a href=&quot;https://panel.holoviz.org/how_to/integrations/FastAPI.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://panel.holoviz.org/_static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;panel.holoviz.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Running Panel apps in FastAPI — Panel v1.9.1&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;panel.holoviz.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;結論：環境の作り方がよく分からなかった。&lt;a href=&quot;#結論環境の作り方がよく分からなかった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あーーー、くそう・・・。結局はベータ版ってことかぁ・・・？？&lt;/p&gt;&lt;p&gt;Project IDXでは現在（2024-12-07時点）では、公式から提供されているPythonのフレームワークのテンプレートは、「Python  Flask」と「Python Django」の2種類しか置いてありません。&lt;/p&gt;&lt;p&gt;なので、FastAPI + Panelのテンプレートは自分で用意する必要がありますが・・・、これがなんともまあ訳が分からなかった。
結局、どこをどう設定すればPanelアプリをプレビューすることが出来るのかが分からなかったんですよね。&lt;/p&gt;&lt;p&gt;ですがしかし、その奮闘する過程で奇跡的に1つのワークスペースだけ、FastAPIベースのPanelアプリを開発することに成功した環境がありました。実際に開発して画面の中のUIを動かすことも出来たので、この謎が極まる複雑怪奇な環境構築さえ出来てしまえば、快適なWebアプリ開発を恍惚として堪能できた筈なんですよね。&lt;/p&gt;&lt;p&gt;これが実際にProject IDX上で、FastAPIで提供したAPIパスから色々なダッシュボードを操作している映像です。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;486&quot; src=&quot;/_astro/11.C_C7VidV_3vSus.webp&quot; srcset=&quot;/_astro/11.C_C7VidV_Z1YnfAU.webp 640w, /_astro/11.C_C7VidV_Z2cBWbd.webp 750w, /_astro/11.C_C7VidV_7TK1r.webp 828w, /_astro/11.C_C7VidV_3vSus.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;エディタ上でレンダリングされたWebページの反応速度は悪くありません。インタラクティブにウィジェットを操作することが出来ています。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;486&quot; src=&quot;/_astro/12.CQLYGASe_1v1EEQ.webp&quot; srcset=&quot;/_astro/12.CQLYGASe_Zssz8j.webp 640w, /_astro/12.CQLYGASe_ZFHgHB.webp 750w, /_astro/12.CQLYGASe_1DOqu3.webp 828w, /_astro/12.CQLYGASe_1v1EEQ.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし結局、このプレビューを再現することは叶いませんでした・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;486&quot; src=&quot;/_astro/13.B5FgIaOv_ZevrgW.webp&quot; srcset=&quot;/_astro/13.B5FgIaOv_179GfL.webp 640w, /_astro/13.B5FgIaOv_STYFt.webp 750w, /_astro/13.B5FgIaOv_Z1PJqUN.webp 828w, /_astro/13.B5FgIaOv_ZevrgW.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このクラウドIDEはベータ版・・・。そうは問屋が卸してくれませんでした・・・。&lt;/p&gt;&lt;p&gt;一応、今回動かしたPythonのソースを貼っておきます。
&lt;code&gt;app.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; fastapi &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; FastAPI&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; panel.io.fastapi &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; add_applications&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; fastapi.middleware.cors &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CORSMiddleware&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; uvicorn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;app &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FastAPI&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;origins &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;app.&lt;/span&gt;&lt;span&gt;add_middleware&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CORSMiddleware,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_origins&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;origins,  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# List of allowed origins&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_credentials&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_methods&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;],  &lt;/span&gt;&lt;span&gt;# Allow all methods&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;allow_headers&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*&quot;&lt;/span&gt;&lt;span&gt;],  &lt;/span&gt;&lt;span&gt;# Allow all headers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_root&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;World&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_panel_app&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; panel.&lt;/span&gt;&lt;span&gt;create_slider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;⭐&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;add_applications&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;/panel_app1&quot;&lt;/span&gt;&lt;span&gt;: create_panel_app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;I am a Panel object!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app3&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;my_panel_app.py&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_figure_linking_slider&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app5&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_tabs&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app6&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_data_frame&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app7&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_text_input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Input file path.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app8&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_button&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Read the specified file&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app9&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_other_widgets&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app10&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_big_tabs&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app11&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_sine_wave&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;/panel_app12&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: panel.&lt;/span&gt;&lt;span&gt;create_figure_linking_slider&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;app)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;uvicorn.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(app, &lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;PORT&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8080&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;src/panel.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; panel &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; numpy &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; np&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pandas &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; pd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.pyplot &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; plt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; matplotlib.figure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; dt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.models &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CustomJS, Slider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pn.&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;comms&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;vscode&quot;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# to use on VSCode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pn.extension(comms=&quot;bokeh&quot;)  # to use on Bokeh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# slider = pn.widgets.FloatSlider(name=&quot;Slider&quot;, start=0, end=10, value=5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_slider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default_value&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gauge_icon&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;⭐&quot;&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.widgets.IntSlider:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;slider &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;IntSlider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;Slider&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;end, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;default_value)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; slider.&lt;/span&gt;&lt;span&gt;rx&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; gauge_icon&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;slider &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;FloatSlider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Slider&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@pn&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;depends&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;slider&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plot_sine_curve&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) -&amp;gt; matplotlib.figure:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fig, ax &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; plt.&lt;/span&gt;&lt;span&gt;subplots&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; np.&lt;/span&gt;&lt;span&gt;linspace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;y &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; np.&lt;/span&gt;&lt;span&gt;sin&lt;/span&gt;&lt;span&gt;(x &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; value)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ax.&lt;/span&gt;&lt;span&gt;plot&lt;/span&gt;&lt;span&gt;(x, y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;plt.&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;&lt;span&gt;(fig) &lt;/span&gt;&lt;span&gt;# Prevent from memory leak.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; fig&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_figure_linking_slider&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.Column:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(slider, plot_sine_curve).&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.Column:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(title)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_tabs&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.Column:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tab1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;This is tab 1&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tab2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;This is tab 2&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tabs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Tabs&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;&quot;Tab 1&quot;&lt;/span&gt;&lt;span&gt;, tab1), (&lt;/span&gt;&lt;span&gt;&quot;Tab 2&quot;&lt;/span&gt;&lt;span&gt;, tab2))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; tabs.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_big_tabs&lt;/span&gt;&lt;span&gt;() -&amp;gt; pn.Column:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tab1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_other_widgets&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tab2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_other_widgets&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tabs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Tabs&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;&quot;Tab 11&quot;&lt;/span&gt;&lt;span&gt;, tab1), (&lt;/span&gt;&lt;span&gt;&quot;Tab 12&quot;&lt;/span&gt;&lt;span&gt;, tab2))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; tabs.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_data_frame&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; pn.widgets.DataFrame:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;col1&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&quot;col2&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;df &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.&lt;/span&gt;&lt;span&gt;DataFrame&lt;/span&gt;&lt;span&gt;(data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;table &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;DataFrame&lt;/span&gt;&lt;span&gt;(df, &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;width)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; table.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_text_input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input me.&quot;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;TextInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;title, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;placeholder)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_button&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;button_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;primary&quot;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;title, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;button_type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;button_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_other_widgets&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 2. チェックボックスタグルグループ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;checkbutton_group &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;CheckButtonGroup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Checkbox Group&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Banana&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Strawberry&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;orientation&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;horizontal&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 2. チェックボックスタグルグループ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;checkbox_group &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;CheckBoxGroup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Checkbox Group&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Banana&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Strawberry&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inline&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 3. ラジオボタングループ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;radio_group &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;RadioButtonGroup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Radio Button Group&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Biology&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Chemistry&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Physics&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;button_type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;success&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;multi_choice &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;MultiChoice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;MultiChoice&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Banana&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Strawberry&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;melon&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;dragon fruit&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;orange&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;grape&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;muscat&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;avocado&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;peach&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;tomato&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 5. マルチセレクト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;multi_select &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;MultiSelect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;MultiSelect&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Apple&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Banana&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Pear&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Strawberry&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 6. トグルボタン&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;toggle_group &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;ToggleGroup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;ToggleGroup&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Biology&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Chemistry&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Physics&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 7. セレクター (様々なウィジェットのラッパー)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selector &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;Select&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Select&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Biology&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Chemistry&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Physics&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 8. カラーピッカー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;color_picker &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;ColorPicker&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Color Picker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;#99ef78&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 9. 日付ピッカー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_picker &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;DatePicker&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Date Picker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dt.&lt;/span&gt;&lt;span&gt;datetime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;37&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 10. 静的なテキスト (既に使用済み)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data_slider &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;DateSlider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Date Slider&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dt.&lt;/span&gt;&lt;span&gt;datetime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2019&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dt.&lt;/span&gt;&lt;span&gt;datetime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2019&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dt.&lt;/span&gt;&lt;span&gt;datetime&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2019&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 11. text editor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text_editor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;TextEditor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Enter some text&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 12. json editor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;spinner &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;JSONEditor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;dict&quot;&lt;/span&gt;&lt;span&gt;  : {&lt;/span&gt;&lt;span&gt;&quot;key&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;value&quot;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;float&quot;&lt;/span&gt;&lt;span&gt; : &lt;/span&gt;&lt;span&gt;3.14&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;int&quot;&lt;/span&gt;&lt;span&gt;   : &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;list&quot;&lt;/span&gt;&lt;span&gt;  : [&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;string&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;A string&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 13. ファイル入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_input &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;FileInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;File Input&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 14. リテラル入力 (コード入力)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;literal_input &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;LiteralInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Literal Input (dict)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;key&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 15. パスワード入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;password_input &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;PasswordInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Password&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Enter your password here...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 16. テキストエリア入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;textarea_input &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;TextAreaInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Text Area Input&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Enter a string here...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 17. Switch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;switch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;Switch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Switch&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 18. file dropper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_dropper &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;FileDropper&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;player &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;Player&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Player&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;32&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;loop_policy&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;loop&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;show_value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value_align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;autocomplete &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.widgets.&lt;/span&gt;&lt;span&gt;AutocompleteInput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Autocomplete Input&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Biology&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Chemistry&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Physics&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;case_sensitive&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;search_strategy&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;includes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;placeholder&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Write something here&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 全てのウィジェットをカラムに配置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;checkbutton_group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, checkbox_group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, radio_group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, multi_choice&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, multi_select&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, toggle_group&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, selector&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, color_picker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, date_picker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, data_slider&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, text_editor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, spinner&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, file_input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, literal_input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, password_input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, textarea_input&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, switch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, file_dropper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, player&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, autocomplete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_slider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_figure_linking_slider&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Column Title&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_tabs&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_data_frame&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_text_input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Text Input&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;create_button&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Button&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_sine_wave&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create the initial plot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;x &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; np.&lt;/span&gt;&lt;span&gt;linspace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;y &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; np.&lt;/span&gt;&lt;span&gt;sin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; np.pi &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; x)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fig, ax &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; plt.&lt;/span&gt;&lt;span&gt;subplots&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;line, &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ax.&lt;/span&gt;&lt;span&gt;plot&lt;/span&gt;&lt;span&gt;(x, y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ax.&lt;/span&gt;&lt;span&gt;set_xlabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;x&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ax.&lt;/span&gt;&lt;span&gt;set_ylabel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;sin(2πx)&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ax.&lt;/span&gt;&lt;span&gt;set_title&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Sine Wave&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Create sliders for frequency and amplitude&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frequency_slider &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Slider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;.1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Frequency&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;amplitude_slider &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Slider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;.1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Amplitude&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Define the update function (using CustomJS for interactivity,  better for larger datasets than pn.bind)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;code &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const data = source.data;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const f = cb_obj.value;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const a = amplitude_slider.value;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const x = data[&apos;x&apos;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const y = data[&apos;y&apos;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;for (var i = 0; i &amp;lt; x.length; i++) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;y[i] = a * Math.sin(2 * Math.PI * f * x[i]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;source.change.emit();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Convert the matplotlib figure to a bokeh figure (required for interaction within panel)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.io &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; show&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.plotting &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; figure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bokeh.models &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; ColumnDataSource&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;source &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ColumnDataSource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;x, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;y))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;p &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tools&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;crosshair,pan,wheel_zoom,box_zoom,reset&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;p.&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;x&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;y&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;source, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;line_width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;line_alpha&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0.6&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Attach the callback to the sliders&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;callback &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CustomJS&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;source&apos;&lt;/span&gt;&lt;span&gt;: source, &lt;/span&gt;&lt;span&gt;&apos;frequency_slider&apos;&lt;/span&gt;&lt;span&gt;: frequency_slider, &lt;/span&gt;&lt;span&gt;&apos;amplitude_slider&apos;&lt;/span&gt;&lt;span&gt;: amplitude_slider}, &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;code)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frequency_slider.&lt;/span&gt;&lt;span&gt;js_on_change&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;value&apos;&lt;/span&gt;&lt;span&gt;, callback)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;amplitude_slider.&lt;/span&gt;&lt;span&gt;js_on_change&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;value&apos;&lt;/span&gt;&lt;span&gt;, callback)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Arrange the elements in a Panel layout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dashboard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pn.&lt;/span&gt;&lt;span&gt;Column&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pn.&lt;/span&gt;&lt;span&gt;Row&lt;/span&gt;&lt;span&gt;(frequency_slider, amplitude_slider),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;p  &lt;/span&gt;&lt;span&gt;# Use the Bokeh figure directly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; dashboard.&lt;/span&gt;&lt;span&gt;servable&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;苦戦したついでにその過程を書き連ねます&lt;a href=&quot;#苦戦したついでにその過程を書き連ねます&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;同じような野望を持って、Panelアプリを再現しようと思った後世の方々に、環境を構成するために試してみた事柄を書き連ねていきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;dev.nixの構成&lt;a href=&quot;#devnixの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;.idx/dev.nixというファイルで構成する。&lt;a href=&quot;#idxdevnixというファイルで構成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、Project IDXでワークスペースを作成して、そのためのVMが起動すると、とある構成ファイルを元に環境が構築されていきます。それが&lt;code&gt;.idx/dev.nix&lt;/code&gt;ファイルです。「NIX」という記法で書いていきます。yamlとかjsonみたいな感じの拡張子です。&lt;/p&gt;&lt;p&gt;その構成ファイルの作り方のリファレンスは、公式のものが載っています。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/docs/studio/idx-is-firebase-studio?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/firebase/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されました&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されたことをお知らせする記事。既存のユーザー向けの移行の詳細と新機能について説明しています。&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、その構成ファイルは主に4つのフィールドに分かれています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;channel&lt;/code&gt;・・・ワークスペースのバージョン的なもの。2024-12-04時点では、&lt;code&gt;stable-23.05&lt;/code&gt;、&lt;code&gt;stable-23.11&lt;/code&gt;、&lt;code&gt;stable-24.05&lt;/code&gt;、&lt;code&gt;unstable&lt;/code&gt;のいずれかです。（&lt;code&gt;stable-24.11&lt;/code&gt;を出して欲しい・・・。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packages&lt;/code&gt;・・・ワークスペースにインストールしたいパッケージ情報。リスト形式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;env&lt;/code&gt;・・・設定したい環境変数を key-value ライクにリスト形式で書きます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idx&lt;/code&gt;・・・ワークスペースを作った後にどんな処理をさせるかを書きます。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;package&lt;a href=&quot;#package&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;package&lt;/code&gt;フィールドには、Pythonを入れたりpipを入れたりしていきます。はたまた、FastAPIを入れたりPanelを入れたりすることも出来るわけですが、ここのフィールドでそのライブラリとかまで指定する必要があるのかどうかは現在自分は解明できていません。&lt;/p&gt;&lt;p&gt;Pakcageの識別子は、以下のNixOSのパッケージリストの一覧から調べて書いていきます。&lt;code&gt;python311Packages.pip&lt;/code&gt;やら&lt;code&gt;python311Packages.uvicorn&lt;/code&gt;やらが識別として存在します。&lt;/p&gt;&lt;a href=&quot;https://search.nixos.org/packages&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://search.nixos.org/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;search.nixos.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;NixOS Search&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;search.nixos.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ちなみに、「NixOS」という文字が見えたので、そーいうOS上で動いているのかと思ったのですが、それは違うらしいです。&lt;/p&gt;&lt;p&gt;このProject IDXというIDEは、「NixOS」というシステムを組み込んでいるわけではなく、①広く利用されていて、②キャッシュが効いて速い、「Nixパッケージ」のシステムを取り入れているということらしいです。つまり、みんなが使いやすくてスピーディに開発できるように「Nix」を採用したっぽいですね。（そうか、NIXはNginx用のファイルを作る時にも使うのか。）&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/blog/article/nix-on-idx/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://firebase.google.com/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase Studio&lt;/span&gt;&lt;/div&gt;&lt;div&gt;How we use Nix on Project IDX&lt;/div&gt;&lt;div&gt;Over here on Project IDX, we like to work fast. A big part of that means making sure we’re building the tools we need to increase efficiency and streamline the grunt work that hampers our velocity. As developers coding in a browser-based workspace, one of the pain points we felt keenly was the startup cost of setting up a new workspace with all the dependencies we needed, and the environment configuration we wanted. So, one of our priorities in building IDX was to address that pain point with streamlined workspace configuration — which we did by building Nix into IDX.&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://images.ctfassets.net/um5csblqkmvt/h0ZB4xNUuyG8LCimu2Zf2/c8ebeeabd5506411ad834675f943cc35/Idx.preview_-_01_-_visual.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;idx&lt;a href=&quot;#idx&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;env&lt;/code&gt;は飛ばしておいて、次に鬼門となる&lt;code&gt;idx&lt;/code&gt;フィールドです。&lt;/p&gt;&lt;p&gt;この&lt;code&gt;idx&lt;/code&gt;フィールドが最も設定する部分が広いです。開発していくWebアプリをプレビューするのかどうかもここに書いていきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;idx&lt;/code&gt;フィールドでは主に4種類にフィールドが分かれています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;extensions&lt;/code&gt;・・・IDEで予めインストールしたい拡張機能をリスト形式で書きます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;workspace&lt;/code&gt;・・・ワークスペースを作ったり開いた時に実行したいことを書きます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;previews&lt;/code&gt;・・・・プレビューを表示するための事柄を書きます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;code&gt;extensions&lt;/code&gt;フィールドでは、拡張機能のパッケージの識別子を完全修飾された拡張機能 ID のリストで書いていきます。&lt;code&gt;${publisherId}.${extensionId}&lt;/code&gt;みたいな感じです。&lt;/p&gt;&lt;p&gt;エディタの拡張機能の部分で探したり、&lt;code&gt;Open VSX Registry&lt;/code&gt;から探して記載しています。&lt;/p&gt;&lt;a href=&quot;https://open-vsx.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;open-vsx.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Open VSX Registry&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;open-vsx.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;code&gt;workspace&lt;/code&gt;フィールドでは、&lt;code&gt;onCreate&lt;/code&gt;と&lt;code&gt;onStart&lt;/code&gt;の2種類のトリガーで行う処理（Bashコマンド）を記述していきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;onCreate&lt;/code&gt;はワークスペースが作られる時に参照されるフィールドです。なので、ワークスペースをリビルドする時にはこのフィールドで宣言されている&lt;code&gt;install&lt;/code&gt;の内容は実行されません。なので、ビルドの仕様がまだ決まっていない時は、&lt;code&gt;onStart&lt;/code&gt;のフィールドの方の&lt;code&gt;install&lt;/code&gt;に実行内容を書く方が良さそうです。（ビルドする内容が固まったら、&lt;code&gt;onCreate&lt;/code&gt;だけに記載して、ワークスペースを再開する時にいちいちコマンドが実行されないようにしても良さそう。）&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;previewフィールド&lt;/code&gt;で、アプリのプレビューをしていくかどうかを決めることが出来ます。&lt;code&gt;enable = true;&lt;/code&gt;と書けばプレビューできるようになります。しかし、その&lt;code&gt;enable&lt;/code&gt;フィールドの隣にさらに&lt;code&gt;previews&lt;/code&gt;フィールドがあって、（&lt;code&gt;idx.preview.preview&lt;/code&gt;ということです。）その中でプレビューするためのコマンドと、ポート番号などを書いていきます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Python Flaskアプリを参考に設定していく。&lt;a href=&quot;#python-flaskアプリを参考に設定していく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、公式テンプレートのPython Flaskアプリから、構成ファイルをまねていきたいと思います。&lt;/p&gt;&lt;p&gt;Python Flaskテンプレートでは、このような構成になっています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# To learn more about how to use Nix to configure your environment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# see: https://developers.google.com/idx/guides/customize-idx-env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;, ... }: {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Which nixpkgs channel to use.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;channel&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;stable-24.05&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;# or &quot;unstable&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Use https://search.nixos.org/packages to find packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;packages&lt;/span&gt;&lt;span&gt;&lt;span&gt; = [ &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;idx&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Search for the extensions you want on https://open-vsx.org/ and use &quot;publisher.id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;extensions&lt;/span&gt;&lt;span&gt; = [ &lt;/span&gt;&lt;span&gt;&quot;ms-python.python&quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;workspace&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# Runs when a workspace is first created with this `dev.nix` file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;onCreate&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;python -m venv .venv &amp;amp;&amp;amp; source .venv/bin/activate &amp;amp;&amp;amp; pip install -r requirements.txt&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Open editors for the following files by default, if they exist:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;openFiles&lt;/span&gt;&lt;span&gt; = [ &lt;/span&gt;&lt;span&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.html&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;main.py&quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}; &lt;/span&gt;&lt;span&gt;# To run something each time the workspace is (re)started, use the `onStart` hook&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Enable previews and customize configuration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;previews&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;previews&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;web&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; = [ &lt;/span&gt;&lt;span&gt;&quot;./devserver.sh&quot;&lt;/span&gt;&lt;span&gt; ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt; = { &lt;/span&gt;&lt;span&gt;PORT&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;$PORT&quot;&lt;/span&gt;&lt;span&gt;; };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;manager&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;web&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;channel&lt;/code&gt;は最新版の&lt;code&gt;stable-24.05&lt;/code&gt;ですね。そして、idxフィールドでは、&lt;code&gt;workspace.onCreate&lt;/code&gt;と&lt;code&gt;previews&lt;/code&gt;が目立ちます。&lt;code&gt;onCreate.install&lt;/code&gt;で、Pythonの仮想環境を作ってその中にpip installしていますね。そして、&lt;code&gt;default.openFiles&lt;/code&gt;ではワークスペースを作成した時に予め最初に開いておくファイルが書いてあります。&lt;code&gt;onCreate.install&lt;/code&gt;の部分は拝借しておきましょう。&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;previews.previews&lt;/code&gt;では、&lt;code&gt;./devserver.sh&lt;/code&gt;というものを使ってプレビューを再現しているようです。その中身を見てみましょう。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#!/bin/sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.venv/bin/activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flask&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PORT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--debug&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;venv&lt;/code&gt;の中に入って、Flaskを起動するようになっていますね。この部分をFastAPIを起動するように編集すれば良さそうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最終的なFastAPI用のdev.nix&lt;a href=&quot;#最終的なfastapi用のdevnix&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これが最終的な&lt;code&gt;.idx/dev.nix&lt;/code&gt;です。少々長いですが、何が必要なのかどうかが分かっていないので冗長に書いています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# To learn more about how to use Nix to configure your environment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# see: https://developers.google.com/idx/guides/customize-idx-env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;, ... }: {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;channel&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;stable-24.05&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;# &quot;stable-23.05&quot; or &quot;unstable&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Use https://search.nixos.org/packages to  find packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;packages&lt;/span&gt;&lt;span&gt; = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python311Packages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;google-cloud-sdk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python311Packages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fastapi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python311Packages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;uvicorn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;python311Packages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;panel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Sets environment variables in the workspace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt; = { };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;idx&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# search for the extension on https://open-vsx.org/ and use &quot;publisher.id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;extensions&lt;/span&gt;&lt;span&gt; = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;ms-python.python&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;rangav.vscode-thunder-client&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;workspace&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# runs when a workspace is first created with this `dev.nix` file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# to run something each time the environment is rebuilt, use the `onStart` hook&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;onCreate&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;create-venv&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;python -m venv .venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;source .venv/bin/activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pip install --no-cache-dir -r requirements/dev.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;onStart&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# install = &apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;#   python -m venv .venv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;#   source .venv/bin/activate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;#   pip install --no-cache-dir -r requirements/dev.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# &apos;&apos;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Open editors for the following files by default, if they exist:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;openFiles&lt;/span&gt;&lt;span&gt; = [ &lt;/span&gt;&lt;span&gt;&quot;README.md&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;app.py&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# default.openFiles = [ &quot;README.md&quot; ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# run-server = &quot;./devserver.sh&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Example: start a background task to watch and re-build backend code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# watch-backend = &quot;npm run watch-backend&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# preview configuration, identical to monospace.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;previews&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;previews&lt;/span&gt;&lt;span&gt; = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt; = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;./devserver.sh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;PORT&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;$PORT&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;web&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;manager&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;web&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# previews = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#   enable = true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#   previews = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       command = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#         &quot;./devserver.sh&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       env = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#         PORT = &quot;$PORT&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       id = &quot;web&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#       manager = &quot;web&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#   ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;requirements.txtの中身&lt;a href=&quot;#requirementstxtの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;現時点で最も怪しいと思っている、&lt;code&gt;requirements.txt&lt;/code&gt;の中身です。基本的には、後述のFastAPIをProject IDXで構成する同志の方々のものを真似ていますが、これでPanelのプレビュー画面を再現するまでには至っていません・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;annotated-types==0.7.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;anyio==4.7.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;autopep8==2.0.4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;click==8.1.7&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;exceptiongroup==1.2.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fastapi==0.115.6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;h11==0.14.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;idna==3.10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pycodestyle==2.11.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pydantic==2.10.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pydantic_core==2.27.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sniffio==1.3.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;starlette==0.41.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tomli==2.0.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;typing_extensions==4.12.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;uvicorn&amp;gt;=0.32.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Panel&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;panel[fastapi]&amp;gt;=1.5.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;functions_framework&amp;gt;=3.5.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Cloud SQL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cloud-sql-python-connector[pg8000]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sqlalchemy&amp;gt;=2.0.36&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;パッケージ達の概要としてはこんな感じです。HTTP関連のヤツらまでは必須だと思います。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;コアとなるパッケージ:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fastapi==0.105.0&lt;/strong&gt;: 高速でモダンなWeb APIフレームワーク。Pythonの型ヒントを利用して、APIの定義、検証、ドキュメント生成を効率的に行えます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uvicorn==0.24.0.post1&lt;/strong&gt;: ASGI（Asynchronous Server Gateway Interface）サーバー。FastAPIアプリケーションを実行するために使用されます。高速で軽量なサーバーとして知られています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;starlette==0.27.0&lt;/strong&gt;: ASGIツールキットおよびフレームワーク。FastAPIはStarletteをベースに構築されています。ルーティング、ミドルウェア、WebSocketなどの機能を提供します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pydantic==2.5.2&lt;/strong&gt;: データ検証と設定管理ライブラリ。Pythonの型ヒントを使用して、データの型、制約、変換などを定義できます。FastAPI は Pydantic を使用してリクエストボディとレスポンスボディを検証します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pydantic_core==2.14.5&lt;/strong&gt;: Pydantic 2 のコアバリデーションロジックを提供するライブラリ。パフォーマンス向上のため分離されています。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;非同期処理関連:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;anyio==3.7.1&lt;/strong&gt;: 非同期プログラミングのためのライブラリ。異なる非同期イベントループ実装（&lt;code&gt;asyncio&lt;/code&gt;, &lt;code&gt;trio&lt;/code&gt;）を抽象化し、移植性の高いコードを書くことができます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sniffio==1.3.0&lt;/strong&gt;: 実行時にどの非同期ライブラリ（&lt;code&gt;asyncio&lt;/code&gt;, &lt;code&gt;trio&lt;/code&gt;）が使用されているかを検出するライブラリ。anyioのようなライブラリで使用されます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;HTTP関連:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;h11==0.14.0&lt;/strong&gt;: HTTP/1.1プロトコルを実装した低レベルライブラリ。&lt;code&gt;uvicorn&lt;/code&gt;などのASGIサーバーで使用されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;idna==3.6&lt;/strong&gt;: 国際化ドメイン名（IDNA）を処理するためのライブラリ。URLパーサーなどで使用されます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;型ヒント関連:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;typing_extensions==4.9.0&lt;/strong&gt;: Pythonの標準ライブラリのtypingモジュールに含まれていない型ヒントを提供するライブラリ。新しいPythonバージョンで導入された型ヒントを古いバージョンで使用する場合などに利用されます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;annotated-types==0.6.0&lt;/strong&gt;: 型ヒントにアノテーションを追加するためのライブラリ。より詳細な型情報を提供できます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;ユーティリティ:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;click==8.1.7&lt;/strong&gt;: コマンドラインインターフェース（CLI）を作成するためのライブラリ。FastAPIアプリケーションでCLIコマンドを定義するために使用できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tomli==2.0.1&lt;/strong&gt;: TOMLファイルのパーサー。設定ファイルの読み込みなどに使用できます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;コードフォーマット/静的解析:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;autopep8==2.0.4&lt;/strong&gt;: PEP 8スタイルガイドに従ってPythonコードを自動的にフォーマットするツール。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pycodestyle==2.11.1&lt;/strong&gt;: PEP 8スタイルガイドに準拠しているかをチェックする静的解析ツール。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;構成時の引っかかりポイント&lt;a href=&quot;#構成時の引っかかりポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結局引っかかったままでしたが、途中で遭遇した引っかかりポイントをまとめます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. VSX（拡張機能）の再インストール&lt;a href=&quot;#1-vsx拡張機能の再インストール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;dev.nix&lt;/code&gt;で言うところの、&lt;code&gt;idx.extensions&lt;/code&gt;のフィールドに当たります。この拡張機能のインストール処理は、まあよく分かりません。拡張機能がインストールされたら、エディタ上にインストールされた旨が表示されるものですが、不思議なことに表示されません。なので、実際にはインストールされているのにインストールされていないことになっている。（もしくはインストールされていないのにインストールされていることになっている。）&lt;/p&gt;&lt;p&gt;このアベコベ状態を解消するのは、Project IDXの開発陣の方々にお任せして、使う側としてまず覚えておく必要があることは、&lt;code&gt;idx.extensions&lt;/code&gt;で指定した拡張機能は「ワークスペースを作った時にだけ指定すれば良い。」ということです。&lt;/p&gt;&lt;p&gt;まあ、このdev.nixという構成ファイルはワークスペースを作って開いた後も編集して、ワークスペースを「リビルド」することが出来るのですが、その際にビルド時に元々書いてあった&lt;code&gt;idx.extensions&lt;/code&gt;のフィールドにある拡張子はコメントアウトしましょう。そうしないと、dev.nix内の処理がつっかえてしまいます。&lt;code&gt;installatoin failed. already installed.&lt;/code&gt;みたいなエラーログだったり、こんなエラーログと共に。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Installing extensions… Updating the extension ‘ms-python.python’ to the version 2024.20.0 Installing extension ‘ms-python.python’ v2024.20.0… Error while installing extension ms-python.python: Can’t install ‘ms-python.python’ extension because it is not compatible with the current version of Code OSS for Cloud Workstations (version 1.89.1). Failed Installing Extensions: ms-python.python&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;特にバージョン指定をしなくても、ただエディタ上でPythonを使いたいだけなので、とりあえず一度Pythonを入れてしまって、リビルドの際にはコメントアウトです。他の拡張機能も同様ですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. どのパッケージを参照しているんだか分からない。&lt;a href=&quot;#2-どのパッケージを参照しているんだか分からない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;requirements.txt&lt;/code&gt;のパッケージを参照してソースが動いているんだか、&lt;code&gt;packages&lt;/code&gt;フィールドで指定したパッケージを参照して動いているんだかよく分からないんですよね。まあでも、Python Flaskテンプレートを見たら、PythonをNixパッケージで入れたら、あとは&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;か・・・。&lt;/p&gt;&lt;p&gt;しかし、後述のFastAPIをProject IDXで構成する同志の方々は&lt;code&gt;pkgs.python311Packages.pip&lt;/code&gt;をパッケージの中に入れている・・・。うーむ、解せん。まだよく分かっていません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. プレビュー画面が表示されない。（その1：バージョンが古い）&lt;a href=&quot;#3-プレビュー画面が表示されないその1バージョンが古い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最大の峠がここでした。未だに越えきれていません。&lt;/p&gt;&lt;p&gt;FastAPIをProject IDXで構成する同志の方々のdev.nixを拝見させていただいて、FastAPIをプレビューできる構成ファイルを見つけたのでここに共有しておきます。&lt;/p&gt;&lt;a href=&quot;https://github.com/prakhar1989/idx-templates/tree/main/fastapi&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;idx-templates/fastapi at main · prakhar1989/idx-templates&lt;/div&gt;&lt;div&gt;Contribute to prakhar1989/idx-templates development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/24d1fe88d28ea6b91149bd6d4bbef0cd1634b91f007dcef99427c87852733a12/prakhar1989/idx-templates&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この構成ファイルは、 &lt;code&gt;channel = &quot;stable-23.05&quot;;&lt;/code&gt; で少し古いのですが、これでビルドするとFastAPIのページをプレビューすることが出来るようになります。これにはかなり助かりました。&lt;/p&gt;&lt;p&gt;しかし、このdev.nixのままでは、FastAPIでPanelを表示するページのプレビューは表示できませんでした。なので、その際に色々奮闘して、奇跡的に成功した &lt;code&gt;dev.nix&lt;/code&gt; では、 &lt;code&gt;channel = &quot;stable-24.05&quot;;&lt;/code&gt; になっていたので、おそらくそのバージョンでないとPanelの画面はプレビュー出来ないのでは無いのかと思っています。&lt;/p&gt;&lt;p&gt;それでは、ここから長い長いプレビュー画面を探求する旅路の記録へと参ります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. プレビュー画面が表示されない。（その2：Try again実行が早い。）&lt;a href=&quot;#4-プレビュー画面が表示されないその2try-again実行が早い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プレビュー表示されなくなるというのは、 &lt;code&gt;Error starting preview&lt;/code&gt; が表示される状態を指します。この状態は、 &lt;code&gt;dev.nix&lt;/code&gt; の実行中でエラーが発生しています。なので、 &lt;code&gt;dev.nix&lt;/code&gt; もしくはそのファイルで参照しているファイルを直してから &lt;code&gt;Try again&lt;/code&gt; をすると再実行されます。修正部分が正しかったら、ちゃんとプレビューが表示されるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1604&quot; height=&quot;1033&quot; src=&quot;/_astro/21.D8bK7jLX_Z2qipS3.webp&quot; srcset=&quot;/_astro/21.D8bK7jLX_Zayld7.webp 640w, /_astro/21.D8bK7jLX_F9Upm.webp 750w, /_astro/21.D8bK7jLX_KceGh.webp 828w, /_astro/21.D8bK7jLX_Z1fXCtk.webp 1080w, /_astro/21.D8bK7jLX_1YmySe.webp 1280w, /_astro/21.D8bK7jLX_Z2qipS3.webp 1604w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Error starting preview&lt;/code&gt; が表示される原因として、pipなどによるパッケージがまだインストールが完了していないことが考えられます。その場合は、インストールが完了するまで待ちましょう。と言っても、いつ完了するのかを確認する方法が分からないので、1分ぐらい待てば確実でしょうか。&lt;/p&gt;&lt;p&gt;奇跡的に成功した環境で、 &lt;code&gt;Error starting preview&lt;/code&gt; が表示された際には、ワークスペースが開いてから少し待っていたら開いたというわけです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. プレビュー画面が表示されない。（その3：「Try again」を実行したかどうか。）&lt;a href=&quot;#5-プレビュー画面が表示されないその3try-againを実行したかどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは先程とは逆のパターンですね。&lt;code&gt;Error starting preview&lt;/code&gt;の文字を見た瞬間にすぐさまリビルドしてしまうパターン。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Try again&lt;/code&gt;を実行すると、&lt;code&gt;No Module Named&lt;/code&gt;が表示されたりする時もありますが、待機していると無事正常にレンダリングされるようになったりします。&lt;code&gt;Try again&lt;/code&gt;してから30秒は待ち続けた方が良いと再度記しておきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. プレビュー画面が表示されない。（その4：「&lt;strong&gt;pycache&lt;/strong&gt;」や「.venv」があるかどうか。）&lt;a href=&quot;#6-プレビュー画面が表示されないその4pycacheやvenvがあるかどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pythonで&lt;code&gt;pip&lt;/code&gt;とかでパッケージをインストールするとディレクトリの中に出てきますよね、&lt;code&gt;__pycache__&lt;/code&gt;や&lt;code&gt;.venv&lt;/code&gt;。
それらがあると、自分が今設定した内容が果たして本当に思い描いている環境を再現する至っているのか、それが分からなくなります。&lt;/p&gt;&lt;p&gt;なので、リビルドする際には、&lt;code&gt;__pycache__&lt;/code&gt;や&lt;code&gt;.venv&lt;/code&gt;は消しておいた方が良い。環境差異が発生しにくくなります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. プレビュー画面が表示されない。（その5：「リビルド＝ゼロからやり直す」わけではない。）&lt;a href=&quot;#7-プレビュー画面が表示されないその5リビルドゼロからやり直すわけではない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、コンテナをいつも使っていたりすると引っかかりそうですが・・・。（僕が沼った最大の原因はここかもしれません。）&lt;/p&gt;&lt;p&gt;Project IDXのワークスペースをリビルドすることは、環境をゼロから作り直しているわけではなく、加筆しているような感覚です。つまり、リビルドした後に上手く環境を構築できたと思ってその瞬間のファイルをメモしたら、そのリビルドの前にやったファイルの内容もメモっておく必要があったりするわけです。&lt;/p&gt;&lt;p&gt;なので、リビルドする前に&lt;code&gt;requirements.txt&lt;/code&gt;の中身を消したりしていると、その中身がビルドに必要なものだったりする可能性もあるわけです。僕は、この点を理解していなくて、奇跡的に成功したワークスペースで一体どういう構成ファイルを使ってリビルドしてきたかどうかを忘れてしまったのでした。そして未だに再現できていない・・・。&lt;/p&gt;&lt;p&gt;そのため、新しい環境のビルドを試している間は、自分がビルドに使ったパッケージ等はしっかりメモしておくことが必要です。コンテナを読み込み直したり、VMを再起動しているわけではないんですねえ。（もしくは、Project IDXのHome画面に戻って、ワークスペースの横にある横三点リーダーをクリックして&lt;code&gt;Reset&lt;/code&gt;で再起動することができます。その分だけ時間が掛かるんですけどね・・・。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. Panelのページのプレビュー画面に出てくるエラー出力が貧弱すぎる。&lt;a href=&quot;#9-panelのページのプレビュー画面に出てくるエラー出力が貧弱すぎる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;FastAPIの表示に上手くいくと、JSONは間違いなくちゃんと返してくれるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1296&quot; height=&quot;1013&quot; src=&quot;/_astro/31.Ck0oiQ9i_ZNe5J3.webp&quot; srcset=&quot;/_astro/31.Ck0oiQ9i_2cPG2F.webp 640w, /_astro/31.Ck0oiQ9i_Z240DI7.webp 750w, /_astro/31.Ck0oiQ9i_Z215D4n.webp 828w, /_astro/31.Ck0oiQ9i_1efQpj.webp 1080w, /_astro/31.Ck0oiQ9i_i7lPQ.webp 1280w, /_astro/31.Ck0oiQ9i_ZNe5J3.webp 1296w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そんな感じでFastAPIの表示には上手くいくものの、Panelの表示が出来ない時、&lt;code&gt;Internal Server Error&lt;/code&gt;とだけ表示されます。&lt;code&gt;Internal Server Error&lt;/code&gt;としか表示されません。
&lt;img loading=&quot;lazy&quot; width=&quot;1174&quot; height=&quot;841&quot; src=&quot;/_astro/32.C61GP1c6_ZcXOMo.webp&quot; srcset=&quot;/_astro/32.C61GP1c6_ZgitP2.webp 640w, /_astro/32.C61GP1c6_Z1b84IG.webp 750w, /_astro/32.C61GP1c6_23YRyc.webp 828w, /_astro/32.C61GP1c6_2f7l29.webp 1080w, /_astro/32.C61GP1c6_ZcXOMo.webp 1174w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ブラウザを使って中身を見れるわけでも無いので、もうお手上げです。奇跡的に成功したワークスペースを参考に色々とパッケージを揃えていくものの、ずーっと、&lt;code&gt;Internal Server Error&lt;/code&gt;とだけ表示されます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Project IDXというクラウドIDEでPanelライブラリとFastAPIフレームワークによるWebアプリの開発で挫折した記事でした。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Project IDXのワークスペースは、&lt;code&gt;.idx/dev.nix&lt;/code&gt;というファイルで構成していく。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;idx.workspace&lt;/code&gt;の&lt;code&gt;onCreate&lt;/code&gt;の時などに、既に拡張機能をインストールしていたら、&lt;code&gt;onStart&lt;/code&gt;時にはインストールする必要はない。むしろエラーの原因になるので、既に入っている拡張機能はコメントアウトしておく。&lt;/li&gt;
&lt;li&gt;ワークスペースが開いて、&lt;code&gt;Error starting preview&lt;/code&gt;が表示されたら、&lt;code&gt;Try again&lt;/code&gt;をクリックして30秒ぐらい待っておくと、ちゃんとプレビューが開くことがある。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__pycache__&lt;/code&gt;や&lt;code&gt;.venv&lt;/code&gt;によって、プレビューが開くかどうか左右されたりもする。&lt;/li&gt;
&lt;li&gt;「リビルド＝ゼロからやり直す」わけではない。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Project IDXに関する情報は、以下の公式ページでも確認することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/docs/studio/idx-is-firebase-studio?hl=ar&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/firebase/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;أصبح Project IDX الآن جزءًا من Firebase Studio&lt;/div&gt;&lt;div&gt;إعلان عن أنّ Project IDX أصبح جزءًا من Firebase Studio، مع تفاصيل حول عملية الانتقال للمستخدمين الحاليين والميزات الجديدة&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;なんか公式のトラブルシューティング関連のページもありました。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/docs/studio/idx-is-firebase-studio?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/firebase/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されました&lt;/div&gt;&lt;div&gt;Project IDX が Firebase Studio に統合されたことをお知らせする記事。既存のユーザー向けの移行の詳細と新機能について説明しています。&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Project IDXのコミュニティはここにあります。ここでもIDXを使っている開発者達が互いにトラブルシューティングし合っています。&lt;/p&gt;&lt;a href=&quot;https://community.firebasestudio.dev/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex002/uploads/idxcommunity/optimized/2X/0/05cc5000dc797bb1b97c8c161924563cf58e87b7_2_32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase Studio Community&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Firebase Studio Community&lt;/div&gt;&lt;div&gt;The Firebase Studio Community is the place to get your questions answered, hear directly from the team, and share your knowledge.&lt;/div&gt;&lt;div&gt;community.firebasestudio.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex002/uploads/idxcommunity/original/2X/1/1204d88fd5c62f6462a67e84e9d5920410869d9d.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回のProject IDXの構成の話って、もしかしてNginxを分かっていないとムズカシイ・・・？ くそう、やったことないぞ・・・。（今度NASを組むから齧るかもしれないが。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;クラウドIDE関連記事&lt;a href=&quot;#クラウドide関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のクラウドIDE関連の記事を貼っておきます。やっぱり当分はコイツで開発することにします。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Nginx関連の書籍&lt;a href=&quot;#nginx関連の書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ONsVGw&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;nginx実践ガイド (impress top gear)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ONsVGw&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49y20YU&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;nginx実践入門 (WEB+DB PRESS plus)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49y20YU&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZILt0P&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Nginx ポケットリファレンス&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZILt0P&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49sLVmY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;NGINX Unit Cookbook: Recipes for Using a Versatile Open Source Server&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49sLVmY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これからどう化けるかか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず今回は疲れた・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】ffmpegでmp4をgifに変換する</title><link>https://endorphinbath.com/posts/powershell-ffmpeg-mp4-to-gif/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-ffmpeg-mp4-to-gif/</guid><description>PowerShellでffmpegというパッケージを使って、mkvやmp4拡張子の動画をGIFに変換するツールを作るための記事です。</description><pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GIFにしたいよなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;軽くしたいよなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;mp4をgifに変換したい。&lt;a href=&quot;#mp4をgifに変換したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;動画として何かしらを残しておきたい時、音声フォーマットは要らないんだよなあ。という時があります。&lt;/p&gt;&lt;p&gt;つまり、MP4じゃなくていい、GIFでいい。&lt;/p&gt;&lt;p&gt;というわけで今回は、PowerShellからmp4ファイルをgifファイルに変換していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ffmpegで変換していく。&lt;a href=&quot;#ffmpegで変換していく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、mp4からgifにファイルを変換するために、「ffmpeg」のライブラリを使っていきます。情報は沢山出てきました。定番みたいですね。&lt;/p&gt;&lt;a href=&quot;https://www.ffmpeg.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.ffmpeg.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.ffmpeg.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;FFmpeg&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.ffmpeg.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ffmpegは様々なパッケージ管理ライブラリからインストールできます。今回は、Scoopからインストールしていきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install ffmpeg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、ffmpegでファイルを変換していきます。実行するバッチファイルはこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setlocal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enabledelayedexpansion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;%1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Check&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;space&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contained.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;filePath=%~1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Check if the source file name contains SPACE characters. That causes a bug.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp=&quot;The process is starting. Input any key.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/WAIT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Windowstyle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Normal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-NoProfile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ExecutionPolicy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Unrestricted&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-File&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.\Z5-5_convert_mp4_to_gif.ps1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;%1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1080&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:FINISH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp=&quot;The process is terminated. Input any key.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;PowerShellファイルの中身はこんな感じです。&lt;/p&gt;&lt;p&gt;ffmpegの&lt;code&gt;-vf&lt;/code&gt;オプションを&lt;code&gt;&quot;split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&quot;&lt;/code&gt;と指定すると、高画質に出力されます。しかし、サイズがかなり大きくなります。&lt;/p&gt;&lt;p&gt;逆に、&lt;code&gt;&quot;scale=1920:-1&quot;&lt;/code&gt;という感じで指定すると、アスペクト比を維持しながら出力して、画質は悪くなりますがサイズがかなり減らせます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Convert-Mp4ToGif&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcMovieAbsName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Int32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$loop&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Int32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$fps&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Int32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$imgWidth&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Synopsis&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Converts an input video into an animated GIF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Converts an input video into a high-quality animated GIF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Supported extensions are mp4, mkv.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;INPUTS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.String # Path to the source MP4 file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Int32 # 0: output GIF with loops forever. -1: output GIF with no loops.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Int32 # FPS of the output GIF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Int32 # Width of the output GIF. 0: Outputs with higher quality with default width.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-Mp4ToGif -srcMovieAbsName &quot;C:\path\to\video.mp4&quot; -fps 30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem -Path &quot;C:\path\to\videos&quot; -Filter &quot;*.mp4&quot; | ForEach-Object { Convert-Mp4ToGif -srcMovieAbsName $_.FullName -loop 0 -fps 15 -imgWidth 0 }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem -Path &quot;C:\path\to\videos&quot; -Filter &quot;*.mkv&quot; | ForEach-Object { Convert-Mp4ToGif -srcMovieAbsName $_.FullName -loop 0 -fps 15 -imgWidth 0 }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Link&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Nothing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Enjoy.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: converting mp4 to gif.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;Input: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;srcMovieAbsName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcFile&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcMovieAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;{0}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstExt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.gif&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcFileDirectory&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcFile.FullName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstMovieAbsName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcFile.Directory&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$dstExt&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: destination decided.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;directory: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;srcFileDirectory&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;destination to output: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dstMovieAbsName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$vfStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$imgWidth&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$vfStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;scale={0}:-1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgWidth&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ffmpeg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;srcMovieAbsName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;vf &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$vfStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;r &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$fps&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;loop &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$loop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstMovieAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: finished converting mp4 to gif.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstMovieAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcMovieAbsName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$dstFps&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$dstImgWidth&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: destination decided.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;srcMovieAbsName: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;srcMovieAbsName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$srcMovieAbsName.Contains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Source file name contains space characters. Input &apos;y&apos; to cancel this process.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcMovieAbsName.Contains&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.&quot;&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Source file name does not contain a dot as extension. Input &apos;y&apos; to cancel this process.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Convert-Mp4ToGif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcMovieAbsName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstFps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstImgWidth&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; to move source files and terminate this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;y&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.\5_original_files&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (!(&lt;/span&gt;&lt;span&gt;Test-path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;New-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Name &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ItemType Directory;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Move-Item -Path .\*.mp4 -Destination $folderName -Exclude *$suffix*;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;変換されたGIFはこんな風に動きました。FPS10です。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;486&quot; src=&quot;/_astro/11.C_C7VidV_3vSus.webp&quot; srcset=&quot;/_astro/11.C_C7VidV_Z1YnfAU.webp 640w, /_astro/11.C_C7VidV_Z2cBWbd.webp 750w, /_astro/11.C_C7VidV_7TK1r.webp 828w, /_astro/11.C_C7VidV_3vSus.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事では、ffmpegライブラリを使って、mp4をgifに変換する流れを紹介しました。&lt;/p&gt;&lt;p&gt;これで動画を手頃なサイズで共有できるようになりましたね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShell関連記事&lt;a href=&quot;#powershell関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のPowerShell関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-html-image-trimming-by-coordinates/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell、HTML】画像の不要な部分を数値化して、その座標でトリミングする&lt;/div&gt;&lt;div&gt;HTMLとJavaScriptとPowerShellで画像を一気にトリミングする記事です。OutOfMemoryExceptionとExternalExceptionをWrite-Errorでやり過ごしたりします。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241207_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;軽くなったなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GIFになったなあ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud SQL】GolangでDBインスタンスの開始停止をDiscordで通知する</title><link>https://endorphinbath.com/posts/golang-cloud-sql-saving-then-discord-notification/</link><guid isPermaLink="true">https://endorphinbath.com/posts/golang-cloud-sql-saving-then-discord-notification/</guid><description>Go言語でCloud SQLに作成したDBインスタンスを自動で開始および停止するCloud Run Functionsが実行された時に、Discord上で通知を飛ばす機能を実装する手順を紹介します。</description><pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_002.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、あの関数って実行されたのかなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いちいちコンソールを開くのは面倒だよなあ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以前に作ったCloud SQLを自動で制御するツール&lt;a href=&quot;#以前に作ったcloud-sqlを自動で制御するツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にCloud SQLにDBインスタンスを自動で起動もしくは停止するCloud Run Functionsを作成して、自動実行させるようにしました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/golang-cloud-sql-saving/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Cloud SQL】GolangでDBインスタンスの開始停止をスケジュール実行して節約する&lt;/div&gt;&lt;div&gt;Golangで書いたCloud Run FunctionでCloud SQLインスタンスの起動と停止を行い、Cloud SchedularとPub/Subでスケジュール実行してコスト削減を図ります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241204_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;いやぁ、ちゃんと自動で実行されているとは思うんですけど、もしかしたらちゃんと実行されてないかもしれないじゃないですか。いや、されてると思うんですけど。しかし、Google Cloudのコンソールをいちいち開くのは面倒くさい。&lt;/p&gt;&lt;p&gt;・・・という心配の種が生まれないように、今回はGoで実装したCloud Run Functionsに、Discordに関数の実行を通知する機能を追加したいと思います。それではやっていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;DiscordのWebhookを叩きます。&lt;a href=&quot;#discordのwebhookを叩きます&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Discord Go」でググると、こんなパッケージがヒットします。&lt;/p&gt;&lt;a href=&quot;https://github.com/bwmarrin/discordgo&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub - bwmarrin/discordgo: (Golang) Go bindings for Discord&lt;/div&gt;&lt;div&gt;(Golang) Go bindings for Discord. Contribute to bwmarrin/discordgo development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/799b35989c14d0c301351a0e8a006dc4c47fbb82d8b29d959b6fc4fefe4ea120/bwmarrin/discordgo&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし今回は、ただWebhookを叩けばいいだけなので、その「discordgo」のパッケージは使わないことにします。
Discord Webhook APIのリファレンスがこちら。&lt;/p&gt;&lt;a href=&quot;https://docs.discord.com/developers/resources/webhook&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.discord.com/mintlify-assets/_mintlify/favicons/discord/7K4RgSZ9MXrlU2Yd/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Documentation - Discord&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Webhook Resource - Documentation - Discord&lt;/div&gt;&lt;div&gt;Reference for Discord webhook objects and management endpoints.&lt;/div&gt;&lt;div&gt;docs.discord.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://discord.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DHTTP%2BAPI%2BResources%26appearance%3Ddark%26title%3DWebhook%2BResource%26description%3DReference%2Bfor%2BDiscord%2Bwebhook%2Bobjects%2Band%2Bmanagement%2Bendpoints.%26logoLight%3Dhttps%253A%252F%252Fmintcdn.com%252Fdiscord%252FCoUXJJtPEdmG4KWD%252Flogo%252Fdocs-light.svg%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DCoUXJJtPEdmG4KWD%2526q%253D85%2526s%253D285b335b09d978db85c5965b2836deeb%26logoDark%3Dhttps%253A%252F%252Fmintcdn.com%252Fdiscord%252FCoUXJJtPEdmG4KWD%252Flogo%252Fdocs-dark.svg%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DCoUXJJtPEdmG4KWD%2526q%253D85%2526s%253D4f680c860d33609aadb33111a6567646%26primaryColor%3D%25235865f2%26lightColor%3D%2523798df9%26darkColor%3D%25235865f2%26backgroundLight%3D%2523ffffff%26backgroundDark%3D%2523202024&amp;amp;w=1200&amp;amp;q=100&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Discordを開いて、Webhook URLを取得しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;659&quot; src=&quot;/_astro/11.BKAlsHBr_Z17q18H.webp&quot; srcset=&quot;/_astro/11.BKAlsHBr_ZgUie5.webp 640w, /_astro/11.BKAlsHBr_2vU7Gy.webp 750w, /_astro/11.BKAlsHBr_kyIkW.webp 828w, /_astro/11.BKAlsHBr_ocY46.webp 1080w, /_astro/11.BKAlsHBr_Z17q18H.webp 1267w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは早速Discordに通知する機能の実装部分です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Package mypkg contains a Function to request to Discord Webhooks.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;bytes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;encoding/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;errors&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;net/http&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Payload represents the payload structure for Discord notification.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Username&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;`json:&quot;username&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Content&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;`json:&quot;content&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Embeds&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt;{} &lt;/span&gt;&lt;span&gt;`json:&quot;embeds,omitempty&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;TTS&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;`json:&quot;tts&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Embed represents a single embed structure.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Embed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Title&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;title&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Color&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;`json:&quot;color&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;url&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Footer&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Footer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;footer&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Timestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;timestamp,omitempty&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Footer represents the footer for an embed.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Footer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;text&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;IconURL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;icon_url&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// CreatePayloadOfDiscordNotification creates a payload for Discord webhook notification.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CreatePayloadOfDiscordNotification&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;botName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Embed&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTTS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;botName&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2000&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;New&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;botName&apos; must be less than or equal to 2000 characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2000&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;New&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;content&apos; must be less than or equal to 2000 characters&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;{}, &lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;New&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;length of &apos;embeds&apos; must be less than or equal to 10&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Username&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;botName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Content&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Embeds&lt;/span&gt;&lt;span&gt;:   &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;TTS&lt;/span&gt;&lt;span&gt;:      &lt;/span&gt;&lt;span&gt;isTTS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// CreateEmbedsToNotifyCloudSql creates embeds for notification about DB booting.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CreateEmbedsToNotifyCloudSql&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlToTransit&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;iconURL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;Embed&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;Embed&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4569935&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;:   &lt;/span&gt;&lt;span&gt;urlToTransit&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Footer&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Footer&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;Text&lt;/span&gt;&lt;span&gt;:    &lt;/span&gt;&lt;span&gt;&quot;GoogleCloudSQL&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;IconURL&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;iconURL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// NotifyToDiscord sends a notification to a Discord webhook.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotifyToDiscord&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;webhookURL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;payloadBytes&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Marshal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;failed to marshal payload: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;webhookURL&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bytes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewBuffer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payloadBytes&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;failed to create HTTP request: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Header&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Client&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;failed to send HTTP request: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;defer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Body&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusOK&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusNoContent&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Errorf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;unexpected HTTP response: &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Status&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Notification sent successfully&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// NotifyDbBooting sends a notification about Google Cloud SQL.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NotifyDbBooting&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlOfConsoleForDbInstance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;webhookUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;botName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;CloudSQLあゆ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CreateEmbedsToNotifyCloudSql&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlOfConsoleForDbInstance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CreatePayloadOfDiscordNotification&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;botName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NotifyToDiscord&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;webhookUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;destinations&quot;&lt;/span&gt;&lt;span&gt;:    &lt;/span&gt;&lt;span&gt;&quot;discord&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;discord_content&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;こんな風に叩けば動く「&lt;code&gt;NotifyDbBooting&lt;/code&gt;」という関数が出来ました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;データベース起動！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;DBを起動したよ！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;urlOfConsoleForDbInstance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LookupEnv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;MY_DB_INSTANCE_URL&quot;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;webhookURL&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LookupEnv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;MY_DISCORD_WEBHOOK_URL&quot;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;iconURL&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;LookupEnv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;CLOUD_SQL_ICON_URL&quot;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ok&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NotifyDbBooting&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textToTransit&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlOfConsoleForDbInstance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;webhookURL&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;iconURL&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error: &lt;/span&gt;&lt;span&gt;%v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Notification result: &lt;/span&gt;&lt;span&gt;%+v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;リクエストでpostするJSONの内容（ペイロード）は、このように構成されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Username：Webhookで送られる通知の送り主（ボット）の名前。&lt;/li&gt;
&lt;li&gt;Content：Webhookで送られる通知の文章。&lt;/li&gt;
&lt;li&gt;Embeds：Webhookで送られる通知では一部の情報を埋め込んで、その情報を目立たせることが出来る。その「埋め込み」の内容。&lt;/li&gt;
&lt;li&gt;TTS：そのWebhookで送られた通知を表示する時に、その内容を音声として再生させるかどうか。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;リクエストでpostするJSON内の&lt;code&gt;&quot;Embeds&quot;&lt;/code&gt;フィールドの中身は、このように構成されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Title：埋込み内のテキストの内容。&lt;/li&gt;
&lt;li&gt;Color：埋込みの帯の色。&lt;/li&gt;
&lt;li&gt;URL：埋込み内のテキストにリンクされているURL。&lt;/li&gt;
&lt;li&gt;Footer
&lt;ul&gt;
&lt;li&gt;Text：フッターのテキストの内容。&lt;/li&gt;
&lt;li&gt;IconURL：フッターにはアイコンを付けられる。そのアイコン画像のURL。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Run Functionsの更新。&lt;a href=&quot;#cloud-run-functionsの更新&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、「cloudsql-launcher」という名前のCloud Run Fucntionsをデプロイします。既に同じ関数名でデプロイしてあったら上書きされます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudsql-launcher&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--gen2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--runtime=go123&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;My_PROJECT}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--region=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_REGION}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--source=.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--entry-point=ProcessPubSub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--trigger-service-account=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_APP_ENGINE_SERVICE_ACCOUNT}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--trigger-topic=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_PUBSUB_TOPIC_ID}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--allow-unauthenticated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--timeout=180s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Schedulerメッセージの追加。&lt;a href=&quot;#cloud-schedulerメッセージの追加&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pub/Subトピックから決まった時間に発行するCloud Schedulerジョブを新規作成します。
まずは、DBインスタンス起動用のジョブを追加します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start-{MY_DB_INSTANCE}-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--schedule=&lt;/span&gt;&lt;span&gt;&quot;0 4 * * 0-6&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Trigger Cloud Functions to start Cloud SQL instance.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;{My_PROJECT}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;{MY_LOCATION}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--time-zone=&lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--topic=&lt;/span&gt;&lt;span&gt;&quot;{MY_PUBSUB_TOPIC_ID}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--message-body=&lt;/span&gt;&lt;span&gt;&quot;{ &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DB_INSTANCE_ID}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_PROJECT_ID}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;DbInstanceUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DB_INSTANCE_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;DiscordWebhookUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DISCORD_WEBHOOK_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;CloudSqlIconUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{CLOUD_SQL_ICON_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;まずは、DBインスタンス停止用のジョブを追加します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop-{MY_DB_INSTANCE}-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--schedule=&lt;/span&gt;&lt;span&gt;&quot;0 7 * * 0-6&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Trigger Cloud Functions to stop Cloud SQL instance.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;{My_PROJECT}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;{MY_LOCATION}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--time-zone=&lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--topic=&lt;/span&gt;&lt;span&gt;&quot;{MY_PUBSUB_TOPIC_ID}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--message-body=&lt;/span&gt;&lt;span&gt;&quot;{ &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DB_INSTANCE_ID}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_PROJECT_ID}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;DbInstanceUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DB_INSTANCE_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;DiscordWebhookUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{MY_DISCORD_WEBHOOK_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;CloudSqlIconUrl&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{CLOUD_SQL_ICON_URL}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Cloud Schdulerで発行されるジョブを新しく追加しました。古いものは後で一時停止しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;549&quot; src=&quot;/_astro/21.D1eD_Fpg_X2ya7.webp&quot; srcset=&quot;/_astro/21.D1eD_Fpg_Z2fpiTF.webp 640w, /_astro/21.D1eD_Fpg_1Gt7cc.webp 750w, /_astro/21.D1eD_Fpg_EaI1O.webp 828w, /_astro/21.D1eD_Fpg_Z2jGqvy.webp 1080w, /_astro/21.D1eD_Fpg_X2ya7.webp 1104w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Note&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;ちなみに、gcloud scheduler jobs createでジョブを作成した後&lt;code&gt;[1]+ Done gcloud scheduler jobs create&lt;/code&gt;というメッセージがCLI上で表示されたら、コマンドのどこかが間違っている可能性があります。例えば、JSONの中のURLが間違ってたり。（クエリパラメーターの&lt;code&gt;?&lt;/code&gt;（クエスチョンマーク）や&lt;code&gt;&amp;amp;&lt;/code&gt;（アンパサンド）をエスケープしていなかったり。でも二重引用符をエスケープしていたらエスケープする必要がなかったり。）&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Run関数の実行結果を確認。&lt;a href=&quot;#cloud-run関数の実行結果を確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではデプロイしたCloud Run FunctionsおよびPub/Subの実行結果をDiscordで確認します。
しっかりDBの起動もしくは停止の関数が動くと、関数が起動した時間にDiscordでボットから通知が飛んでいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1226&quot; height=&quot;635&quot; src=&quot;/_astro/31.ClyrkSJM_Z1LmPu1.webp&quot; srcset=&quot;/_astro/31.ClyrkSJM_2k1pXB.webp 640w, /_astro/31.ClyrkSJM_1ULVRQ.webp 750w, /_astro/31.ClyrkSJM_ZfyrsK.webp 828w, /_astro/31.ClyrkSJM_ZaaWPc.webp 1080w, /_astro/31.ClyrkSJM_Z1LmPu1.webp 1226w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1196&quot; height=&quot;571&quot; src=&quot;/_astro/32.D5_qfpd2_ZKTCBn.webp&quot; srcset=&quot;/_astro/32.D5_qfpd2_2gYEOq.webp 640w, /_astro/32.D5_qfpd2_Zkjr7G.webp 750w, /_astro/32.D5_qfpd2_2kU5xE.webp 828w, /_astro/32.D5_qfpd2_RBeVR.webp 1080w, /_astro/32.D5_qfpd2_ZKTCBn.webp 1196w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Go言語でCloud SQLに作成したDBインスタンスを自動で開始および停止するCloud Run Functionsが実行された時に、Discord上で通知を飛ばす機能を実装する手順を紹介しました。&lt;/p&gt;&lt;p&gt;これで、Cloud Run Functionsが実行されたことをDiscord上で把握できます。助かるぞお。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今日も実行されたな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;DB停止！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Project IDXというクラウドIDEを触ってみました。</title><link>https://endorphinbath.com/posts/project-idx-cloud-ide-first-impression/</link><guid isPermaLink="true">https://endorphinbath.com/posts/project-idx-cloud-ide-first-impression/</guid><description>Googleが現在開発中でベータ版のProject IDXというIDEに関する記事です。Cloud Shell Editorを使っている身からしたらどれぐらい強くなるのかワクワクです。</description><pubDate>Sun, 08 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだぁ？　このIDEはぁ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;使えるかもしれん。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Project IDXとかいうクラウドIDE&lt;a href=&quot;#project-idxとかいうクラウドide&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;つい最近に存在を知った、クラウドIDEの一種です。&lt;/p&gt;&lt;p&gt;最近、ちょっとした便利ツールの開発にはCloud Shell Editorを使ってばかりいますが、コイツには使用制限時間というものがあります。1週間で50時間まで。それでまあ、色々と作りたくなってくるとこんな1日7時間なんていう時間では収まらなくなるものでして、何かしら2つ目のIDEが欲しくなってきたんですよね。&lt;/p&gt;&lt;p&gt;そこで最近、パラパラパラ～っと調べてみると、なんかあるじゃないですか。Cloud Shell Editorに似たようなIDEが！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02.DfII1lo-_1aL7f8.webp&quot; srcset=&quot;/_astro/02.DfII1lo-_HMsvS.webp 640w, /_astro/02.DfII1lo-_Z1DHEug.webp 750w, /_astro/02.DfII1lo-_ZOKG8P.webp 828w, /_astro/02.DfII1lo-_QnW5Q.webp 1080w, /_astro/02.DfII1lo-_1Pyr2q.webp 1280w, /_astro/02.DfII1lo-_Z1xif9m.webp 1668w, /_astro/02.DfII1lo-_1aL7f8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのIDEの名前は、「Project IDX」。&lt;/p&gt;&lt;p&gt;このIDEも、クラウド上、Web上で触ることが出来るIDEでして、開発元はCloud Shell Editorと同じくGoogle様です。&lt;/p&gt;&lt;p&gt;そんなわけで、Geminiが組み込まれていたり、Google CloudやFirebaseとの連携がスムーズに出来そう。&lt;/p&gt;&lt;p&gt;2024-12-05時点では、無料で利用することが出来ます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Project IDXの概要&lt;a href=&quot;#project-idxの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Project IDXは、巷で盛んなフレームワークとプログラミング言語をサポートしていて、コーディング、ビルド、デプロイ、デバッグなどの一通りの機能を備えています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Project IDXの理念&lt;a href=&quot;#project-idxの理念&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Project IDX公式のブログを見てみたいと思います。&lt;/p&gt;&lt;p&gt;Project IDXのIntroduction的なページから確認してみます。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/blog/article/introducing-project-idx/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://firebase.google.com/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase Studio&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Introducing Project IDX, An Experiment to Improve Full-stack, Multiplatform App Development&lt;/div&gt;&lt;div&gt;Introducing Project IDX, An Experiment to Improve Full-stack, Multiplatform App Development&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://images.ctfassets.net/um5csblqkmvt/1mQCsNQ3LrGMjQvfaf3st8/6c30596b01daf50974487e03dd9670a9/idx-logo.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;p&gt;At the heart of Project IDX is our conviction that you should be able to develop from anywhere, on any device, with the full fidelity of local development. Every Project IDX workspace has the full capabilities of a Linux-based VM, paired with the universal access that comes with being hosted in the cloud, in a datacenter near you.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;ですよねえ。
どこからでも、どのデバイスからでも開発できるっていうIDEが欲しいんですよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プラットフォーム間でアプリをプレビューする&lt;a href=&quot;#プラットフォーム間でアプリをプレビューする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Project IDXでは、Webアプリのプレビューが出来て、さらにモバイルアプリのプレビューも可能なようです。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Creating successful apps today means optimizing your app design and behavior across platforms, and previewing your apps just as your users would see them. To make this easier, Project IDX includes a built-in web preview and, coming soon, a fully-configured Android emulator and an embedded iOS simulator, all available directly in the browser.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Project IDX には、組み込みの Web プレビューが搭載されていて、ゆくゆくは完全に構成された Android エミュレーターと組み込みの iOS シミュレーターが、全てのブラウザーで直接利用できるようになるみたいです。今回は確認しませんでしたが、モバイル開発がスムーズに行えそうな印象です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フレームワークとプログラミング言語のテンプレート&lt;a href=&quot;#フレームワークとプログラミング言語のテンプレート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Project IDXでは、フレームワークとプログラミング言語のテンプレートが用意されているので、そのテンプレから開発を始めることが出来ます。2024-12-05時点では以下のランタイムのテンプレが提供されています。（あれ、モバイルのところにKotlinが無いのが意外。）&lt;/p&gt;&lt;p&gt;フロントエンド:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;Astro&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Svelte&lt;/li&gt;
&lt;li&gt;Simple HTML&lt;/li&gt;
&lt;li&gt;Vue.js&lt;/li&gt;
&lt;li&gt;SolidJS&lt;/li&gt;
&lt;li&gt;Preact&lt;/li&gt;
&lt;li&gt;Nuxt&lt;/li&gt;
&lt;li&gt;React + Google Maps Platform&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;バックエンド:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;Python Flask&lt;/li&gt;
&lt;li&gt;Node Express&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Laravel&lt;/li&gt;
&lt;li&gt;Python Django&lt;/li&gt;
&lt;li&gt;Gemini API (Go Backend)&lt;/li&gt;
&lt;li&gt;Gemini API (Python Backend)&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Dart&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;モバイル:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;li&gt;React Native + Expo&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;AI &amp;amp; ML:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Gemini API&lt;/li&gt;
&lt;li&gt;LangChain with Gemini&lt;/li&gt;
&lt;li&gt;Firebase Genkit&lt;/li&gt;
&lt;li&gt;IDX Agents: GitHub Action&lt;/li&gt;
&lt;li&gt;IDX Agents: VSCode Extension&lt;/li&gt;
&lt;li&gt;Gemini API Notebook&lt;/li&gt;
&lt;li&gt;Gemini API + Google Maps Platform&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Databases:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Postgres&lt;/li&gt;
&lt;li&gt;MySQL (Experimental)&lt;/li&gt;
&lt;li&gt;Prisma&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Firebase Data Connect&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;その他:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Blank Workspace&lt;/li&gt;
&lt;li&gt;React + Google Maps Platform&lt;/li&gt;
&lt;li&gt;Firebase Data Connect&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そしてこれらの言語やフレームワークなどのテンプレに加えて、アプリのテンプレもありました。&lt;code&gt;Solutions&lt;/code&gt;というセクションの中にありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1566&quot; src=&quot;/_astro/04.BC650Iy0_2vpiJQ.webp&quot; srcset=&quot;/_astro/04.BC650Iy0_18YEUs.webp 640w, /_astro/04.BC650Iy0_Zw5uok.webp 750w, /_astro/04.BC650Iy0_1a0KQ3.webp 828w, /_astro/04.BC650Iy0_2vpiJQ.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GitHubからのインポートから、ワークスペースからのデプロイまで&lt;a href=&quot;#githubからのインポートからワークスペースからのデプロイまで&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Project IDXで作業を開始する時に、独自のアプリを IDX に持ち込むか、GitHub のパブリック リポジトリまたはプライベート リポジトリから作業を開始できます。&lt;/p&gt;&lt;p&gt;そして、色々と開発を進めていって、そのワークスペースから直接、Web プロジェクトまたは Flutter Web プロジェクトを Firebase Hosting 等にデプロイ出来るようです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AIによるコーディング支援&lt;a href=&quot;#aiによるコーディング支援&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Shell EditorでもGeminiが使えるように、Project IDXでもGeminiを使ってコーディングを加速させることが出来ます。&lt;/p&gt;&lt;p&gt;コードの候補を表示したり、チャットベースでコードを作成してもらうことも可能です。&lt;/p&gt;&lt;p&gt;Geminiとチャットしたデータは学習に利用されるようです。データは18ヶ月間保存されるらしい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ワークスペースの数は無料で5個まで&lt;a href=&quot;#ワークスペースの数は無料で5個まで&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そんなにあれやこれやとワークスペースを無尽蔵に作成できるわけではなく、Google Developer Programのスタンダードプラン（無料）に参加すると、5個までIDXのワークスペースを作成できるようになるようです。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/profile/u/me/settings&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Settings | Google Developer Program | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/images/developer-profile-share.svg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以下が、Google Developer Programのスタンダードプランの参加特典のようです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Gemini in developer documentation and tools・・・AI チャットを使用すると、役立つドキュメント、サンプル コード、学習コンテンツを入手できます。API を調べて、ドキュメントの検索エクスペリエンスを強化します。Android Studio と IDX の AI コンパニオンを利用すると、コードの生成、エラーのトラブルシューティング、ベスト プラクティスの学習が可能になり、高品質のアプリをより迅速に構築できるようになります。&lt;/li&gt;
&lt;li&gt;Additional IDX workspaces・・・開発用に 3 つの追加の IDX ワークスペースのロックを解除します (メンバーシップがない場合のデフォルトは 2 つ)。&lt;/li&gt;
&lt;li&gt;Google Cloud ラーニング・・・Cloud Innovators のメンバーには、プレミアム クラウド学習のためのクレジットが毎月 35 クレジット (小売価格 35 ドル/月) 無料で提供されます。&lt;/li&gt;
&lt;li&gt;Save progress and collections・・・Android、Cloud、Firebase をはじめとする 30 以上の Google デベロッパー プロダクトに関する学習の進捗状況を記録し、カスタム コレクションを作成できます。&lt;/li&gt;
&lt;li&gt;Early access to new products and features・・・リリース前に新製品を試すための特別招待を受け取ります。Google のエンジニアリング チームにフィードバックを共有してください。&lt;/li&gt;
&lt;li&gt;バッジを獲得・・・イベントへの参加やさまざまなデベロッパーの実績に応じて、700 以上のバッジを獲得できます。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;とりあえず入ってみる。&lt;a href=&quot;#とりあえず入ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;スマホから入ってみる。&lt;a href=&quot;#スマホから入ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではProject IDXの中身を見ていきましょう。&lt;/p&gt;&lt;p&gt;2024-12-05時点では、Waitlistなどに申請する必要はなく、すぐにエディタを触り始めることが出来ます。&lt;/p&gt;&lt;p&gt;まずは、スマホのブラウザから確認してみます。なんと、スマホからでもHome画面は特に問題なく覗くことが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/06.QrjhmXK8_1neSkW.webp&quot; srcset=&quot;/_astro/06.QrjhmXK8_Z1zpbmo.webp 640w, /_astro/06.QrjhmXK8_Zb0Boj.webp 750w, /_astro/06.QrjhmXK8_1iL41H.webp 828w, /_astro/06.QrjhmXK8_1neSkW.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同じGoogleが開発しているCloud Shell Editorでは、スマホから開こうとすると「モバイルブラウザはサポートされていません。GCPアプリでCloud Shellをお試しください。」という警告文が表示されます。もしかして、Android、Chromebookから開発できるようにしているということか？？（単にベータ版だから表示していないだけかも。）
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1214&quot; src=&quot;/_astro/07.C8EYsLNw_Z2kqC4p.webp&quot; srcset=&quot;/_astro/07.C8EYsLNw_Z1YGaUK.webp 640w, /_astro/07.C8EYsLNw_Z22VKAo.webp 750w, /_astro/07.C8EYsLNw_Z25YpSt.webp 828w, /_astro/07.C8EYsLNw_Z2kqC4p.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは立ち戻ってProject IDXです。今回は適当にPython Flaskアプリを作成してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/11.hUtTqpNf_Z1jd7YP.webp&quot; srcset=&quot;/_astro/11.hUtTqpNf_1hoflF.webp 640w, /_astro/11.hUtTqpNf_Z2oojub.webp 750w, /_astro/11.hUtTqpNf_ZTBD4a.webp 828w, /_astro/11.hUtTqpNf_Z1jd7YP.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;VMが立ち上がって、Flaskの環境が構築されていきます・・・。アプリを作り始めるところまでの環境の全てを自動でセットアップしてくれます。Cloud Shellでは、&lt;code&gt;gcloud&lt;/code&gt;やPythonやGoが最初から入っていたりはするんですけど、Flaskなどのフレームワークによるアプリの雛形を構築するような機能は無いんですよね。便利ですねえ。（まあ、ここで手に入れたテンプレをGitHubにテンプレートリポジトリとしてプッシュするのもアリな気がしてきた。）
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/12.BidgpCfv_1Mk1QH.webp&quot; srcset=&quot;/_astro/12.BidgpCfv_Z23C08u.webp 640w, /_astro/12.BidgpCfv_ZEdqap.webp 750w, /_astro/12.BidgpCfv_OyffB.webp 828w, /_astro/12.BidgpCfv_1Mk1QH.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;セットアップが終わりました！　それではスマホから編集ができるかどうかを確かめてみます。&lt;/p&gt;&lt;p&gt;・・・でも、やっぱり画面がこの状態からスクロールすることが出来ず、スワイプでズームしても意図したところにフォーカスすることは出来ませんでした。さすがにまだスマホから開発を進めることは難しそうです・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot; src=&quot;/_astro/13.CWiVZvzZ_Z1LJHPx.webp&quot; srcset=&quot;/_astro/13.CWiVZvzZ_Vsjww.webp 640w, /_astro/13.CWiVZvzZ_2kQSuB.webp 750w, /_astro/13.CWiVZvzZ_Z1fxySj.webp 828w, /_astro/13.CWiVZvzZ_Z1LJHPx.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スマホの向きを横にしても厳しそうでした。これ以上は無理ダッッ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;486&quot; src=&quot;/_astro/14.BtcClx9V_Z58GVn.webp&quot; srcset=&quot;/_astro/14.BtcClx9V_Z1r73x3.webp 640w, /_astro/14.BtcClx9V_ZnEW9u.webp 750w, /_astro/14.BtcClx9V_Z1Dzy6Q.webp 828w, /_astro/14.BtcClx9V_Z58GVn.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PCから入ってみる。&lt;a href=&quot;#pcから入ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;さて、今度はPCからProject IDXの玄関をちゃんと見てみます。&lt;/p&gt;&lt;p&gt;PCから閲覧すると、先程紹介したGoogle Developer Programへの参加を促すダイアログが表示されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31.CQ-lT1m__Z76XcX.webp&quot; srcset=&quot;/_astro/31.CQ-lT1m__ZiM6Nw.webp 640w, /_astro/31.CQ-lT1m__2oSSYg.webp 750w, /_astro/31.CQ-lT1m__Z1Qlgtf.webp 828w, /_astro/31.CQ-lT1m__Zqu8mf.webp 1080w, /_astro/31.CQ-lT1m__xFlzk.webp 1280w, /_astro/31.CQ-lT1m__2f0Nct.webp 1668w, /_astro/31.CQ-lT1m__Z76XcX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Home画面に遷移すると、先程作成したFlask アプリが見えたので、引き続きやっていきたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.CI3PnuFR_Z1Lu2g2.webp&quot; srcset=&quot;/_astro/32.CI3PnuFR_1L1ucD.webp 640w, /_astro/32.CI3PnuFR_ZAtCNv.webp 750w, /_astro/32.CI3PnuFR_dskwU.webp 828w, /_astro/32.CI3PnuFR_Z25Rcpj.webp 1080w, /_astro/32.CI3PnuFR_Z16GHsJ.webp 1280w, /_astro/32.CI3PnuFR_zCJ9p.webp 1668w, /_astro/32.CI3PnuFR_Z1Lu2g2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがProject IDXをPCから見た時の画面になります。&lt;/p&gt;&lt;p&gt;ワークスペースにあるファイルの内容を、ワークスペース右側で確認することが出来るようになっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33.B6WRoCWr_2my1Nh.webp&quot; srcset=&quot;/_astro/33.B6WRoCWr_ZdSEg2.webp 640w, /_astro/33.B6WRoCWr_2tMlwK.webp 750w, /_astro/33.B6WRoCWr_Z1LrNUK.webp 828w, /_astro/33.B6WRoCWr_23aQE0.webp 1080w, /_astro/33.B6WRoCWr_Z22PMdm.webp 1280w, /_astro/33.B6WRoCWr_ZlvkAd.webp 1668w, /_astro/33.B6WRoCWr_2my1Nh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ファイルを更新すれば、右側のプレビューも更新できます。プレビューの更新方法としては&lt;code&gt;Hot Reload``Full Reload``Hard Restart&lt;/code&gt;の3種類が選べました。Hot Reloadでは、ファイルを保存すると自動的に更新されるので開発が楽に進められそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/34.DB9_bHpL_1mabTR.webp&quot; srcset=&quot;/_astro/34.DB9_bHpL_Sah9e.webp 640w, /_astro/34.DB9_bHpL_Z1tkPQU.webp 750w, /_astro/34.DB9_bHpL_ZEnRvu.webp 828w, /_astro/34.DB9_bHpL_12M1KA.webp 1080w, /_astro/34.DB9_bHpL_21WvHa.webp 1280w, /_astro/34.DB9_bHpL_Z1lTatC.webp 1668w, /_astro/34.DB9_bHpL_1mabTR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは適当に&lt;code&gt;/student&lt;/code&gt;というパスを追加して、そのパスで表示するページの内容も確認してみます。ファイルの中でエラーが発生すると、右側のプレビューでエラートレースを確認することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/35.VTKV_yD__Z1dPna7.webp&quot; srcset=&quot;/_astro/35.VTKV_yD__277u6d.webp 640w, /_astro/35.VTKV_yD__ZfnCTV.webp 750w, /_astro/35.VTKV_yD__yykqu.webp 828w, /_astro/35.VTKV_yD__Z1xdxjo.webp 1080w, /_astro/35.VTKV_yD__Zy33mO.webp 1280w, /_astro/35.VTKV_yD__18hofk.webp 1668w, /_astro/35.VTKV_yD__Z1dPna7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ファイルを修正してプレビューを更新します。右側のプレビューの検索窓には元々「/」と入力されていましたが、そこを&lt;code&gt;/student&lt;/code&gt;に変えてリロードすると、&lt;code&gt;/student&lt;/code&gt;のパスの処理が実行されて、ページを更新することが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/36.gFHgjR6L_1B1nUK.webp&quot; srcset=&quot;/_astro/36.gFHgjR6L_ZfodX5.webp 640w, /_astro/36.gFHgjR6L_2shLOH.webp 750w, /_astro/36.gFHgjR6L_Z1MWnCN.webp 828w, /_astro/36.gFHgjR6L_1hDdLt.webp 1080w, /_astro/36.gFHgjR6L_2gNHI3.webp 1280w, /_astro/36.gFHgjR6L_Z172XsJ.webp 1668w, /_astro/36.gFHgjR6L_1B1nUK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サイドバーを確認してみる。&lt;a href=&quot;#サイドバーを確認してみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ワークスペース左側のサイドバーを確認していきます。&lt;/p&gt;&lt;p&gt;上から、ナビゲーションメニュー、ディレクトリ内のファイル閲覧、ファイルの検索、ソース管理、デバッグ、拡張機能、テスト、最後には&lt;code&gt;Project IDX&lt;/code&gt;というボタンもありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37.B_nZ7hFq_ZYcxy1.webp&quot; srcset=&quot;/_astro/37.B_nZ7hFq_Z1txjLH.webp 640w, /_astro/37.B_nZ7hFq_1e8G15.webp 750w, /_astro/37.B_nZ7hFq_235Emv.webp 828w, /_astro/37.B_nZ7hFq_Z1izHHi.webp 1080w, /_astro/37.B_nZ7hFq_ZjpdKI.webp 1280w, /_astro/37.B_nZ7hFq_1mUdQq.webp 1668w, /_astro/37.B_nZ7hFq_ZYcxy1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;拡張機能は、&lt;a href=&quot;https://open-vsx.org/&quot; target=&quot;_blank&quot;&gt;OpenVSX&lt;/a&gt;からインストールできるみたいです。最初はPythonしかインストールされていませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38.wkGs0KCy_2pmIwi.webp&quot; srcset=&quot;/_astro/38.wkGs0KCy_1Jgzmq.webp 640w, /_astro/38.wkGs0KCy_ZCexDI.webp 750w, /_astro/38.wkGs0KCy_bHpGH.webp 828w, /_astro/38.wkGs0KCy_25Yyn1.webp 1080w, /_astro/38.wkGs0KCy_Z2025ul.webp 1280w, /_astro/38.wkGs0KCy_ZiGCRc.webp 1668w, /_astro/38.wkGs0KCy_2pmIwi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;試しに、Markdown Preview GitHub Stylingを入れてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39.DHjqT-03_Z2csptw.webp&quot; srcset=&quot;/_astro/39.DHjqT-03_ZwT60v.webp 640w, /_astro/39.DHjqT-03_2aLTMh.webp 750w, /_astro/39.DHjqT-03_Z25sfFe.webp 828w, /_astro/39.DHjqT-03_Z2vPzCN.webp 1080w, /_astro/39.DHjqT-03_Z1wF5Ge.webp 1280w, /_astro/39.DHjqT-03_9ElUU.webp 1668w, /_astro/39.DHjqT-03_Z2csptw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;拡張機能が動いて、Markdownのプレビューを確認することができました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/40.CiTf7p_6_Z1L2FzP.webp&quot; srcset=&quot;/_astro/40.CiTf7p_6_1V2KUT.webp 640w, /_astro/40.CiTf7p_6_Zqsm5f.webp 750w, /_astro/40.CiTf7p_6_ntBgb.webp 828w, /_astro/40.CiTf7p_6_Z25pPJ7.webp 1080w, /_astro/40.CiTf7p_6_Z16flMx.webp 1280w, /_astro/40.CiTf7p_6_A55OB.webp 1668w, /_astro/40.CiTf7p_6_Z1L2FzP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに、サイドバーから&lt;code&gt;Project IDX&lt;/code&gt;を選択すると、Google系のクラウドサービスへのデプロイやその他APIをアプリに組み込むことが出来そうです。IDE上で表示されていたのは以下のサービスでした。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Host Web App with Firebase&lt;/li&gt;
&lt;li&gt;Deploy to Cloud Run&lt;/li&gt;
&lt;li&gt;Add Gemini API&lt;/li&gt;
&lt;li&gt;Add Google Maps Platform&lt;/li&gt;
&lt;li&gt;Add Secret Manager&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、拡張機能を一気にインポートできるように、プロファイルのインポート機能もありました。そのために、エクスポートからする必要がありますが、現時点では以下の項目をエクスポート出来るようです。つまり利用できるのは、&lt;code&gt;settings.json&lt;/code&gt;、「UIの状態」や「拡張機能」ってことですかね。キーバインドはまだですかね？
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41.BHwtxcDP_Z1lzych.webp&quot; srcset=&quot;/_astro/41.BHwtxcDP_Z2tiH9r.webp 640w, /_astro/41.BHwtxcDP_eniDl.webp 750w, /_astro/41.BHwtxcDP_13kgYL.webp 828w, /_astro/41.BHwtxcDP_Z1EWIly.webp 1080w, /_astro/41.BHwtxcDP_ZFMeoY.webp 1280w, /_astro/41.BHwtxcDP_10xdda.webp 1668w, /_astro/41.BHwtxcDP_Z1lzych.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;試しに、Cloud Shell Editorにあるプロファイルをインポートしてみます。
あっ、キーバインドとスニペットもインポートできるみたいです。新規のプロファイルを作ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/42.BbTbnNyv_IGQas.webp&quot; srcset=&quot;/_astro/42.BbTbnNyv_Z1g9uuS.webp 640w, /_astro/42.BbTbnNyv_1rwvhT.webp 750w, /_astro/42.BbTbnNyv_2gttDk.webp 828w, /_astro/42.BbTbnNyv_pjG1b.webp 1080w, /_astro/42.BbTbnNyv_1ouaWK.webp 1280w, /_astro/42.BbTbnNyv_Z1Ymve2.webp 1668w, /_astro/42.BbTbnNyv_IGQas.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インポートが終わりました。プロファイル内にあるOpenVSXの拡張機能はしっかりインストールされて、UIもプロファイルのものに反映されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43.DdHRGerS_1Sd0bG.webp&quot; srcset=&quot;/_astro/43.DdHRGerS_5andw.webp 640w, /_astro/43.DdHRGerS_Z2hkJMC.webp 750w, /_astro/43.DdHRGerS_Z1snLrc.webp 828w, /_astro/43.DdHRGerS_1yOP2p.webp 1080w, /_astro/43.DdHRGerS_Z2wbNOW.webp 1280w, /_astro/43.DdHRGerS_ZOQmcN.webp 1668w, /_astro/43.DdHRGerS_1Sd0bG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その他にもUIをゴニョゴニョ変えられそうですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44.ByLKpwgR_1X334R.webp&quot; srcset=&quot;/_astro/44.ByLKpwgR_Z1nICgV.webp 640w, /_astro/44.ByLKpwgR_1jWnvQ.webp 750w, /_astro/44.ByLKpwgR_28TlRh.webp 828w, /_astro/44.ByLKpwgR_1DERUA.webp 1080w, /_astro/44.ByLKpwgR_Z2rlKVL.webp 1280w, /_astro/44.ByLKpwgR_ZK1jjC.webp 1668w, /_astro/44.ByLKpwgR_1X334R.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;gcloudとか出来るのでしょうか&lt;a href=&quot;#gcloudとか出来るのでしょうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そういえば、Terminalをまだ触っていませんでした。
試しに&lt;code&gt;gcloud&lt;/code&gt;がインストールされているかどうかを試してみます。&lt;code&gt;gcloud version&lt;/code&gt;が通ったので、&lt;code&gt;gcloud&lt;/code&gt;は最初からインストールされているみたいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51.KZVeDizh_Z1c8X3t.webp&quot; srcset=&quot;/_astro/51.KZVeDizh_967O4.webp 640w, /_astro/51.KZVeDizh_Z2dp0c5.webp 750w, /_astro/51.KZVeDizh_Z1os1PE.webp 828w, /_astro/51.KZVeDizh_Z1vw8cK.webp 1080w, /_astro/51.KZVeDizh_ZwlDgb.webp 1280w, /_astro/51.KZVeDizh_19XNlX.webp 1668w, /_astro/51.KZVeDizh_Z1c8X3t.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;gcloud app deploy&lt;/code&gt;と打ってみると、認証が始まりそうな感じがしました。そうですね、Cloud Shell Editorとは違って、Google Cloudのプロジェクトにはまだログインしていない状態ですよね。&lt;code&gt;gcloud auth login&lt;/code&gt;をすれば、このFlaskアプリをデプロイ出来そうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/52.DPgOy_c-_GEKse.webp&quot; srcset=&quot;/_astro/52.DPgOy_c-_Z2ffQ4y.webp 640w, /_astro/52.DPgOy_c-_sq9Ie.webp 750w, /_astro/52.DPgOy_c-_1hn84E.webp 828w, /_astro/52.DPgOy_c-_nhAiW.webp 1080w, /_astro/52.DPgOy_c-_1ms5fw.webp 1280w, /_astro/52.DPgOy_c-_Z21oAVg.webp 1668w, /_astro/52.DPgOy_c-_GEKse.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Googleが開発していてベータ版が公開されている（2024-12-05時点）「Project IDX」というクラウドIDEの紹介記事でした。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Project IDXでは、Webブラウザ上でGitHubリポジトリのクローン、コーディング、クラウドサービスへのアプリのデプロイまで一貫して行うことが出来る。&lt;/li&gt;
&lt;li&gt;フレームワークとプログラミング言語のテンプレートが用意されていて、セットアップやファイルの準備まで自動で行ってくれる。すぐに開発を始められる。&lt;/li&gt;
&lt;li&gt;モバイルアプリの開発およびエミュレーターで挙動を確認することが出来る。&lt;/li&gt;
&lt;li&gt;Project IDXでは、無料でワークスペースを5個まで作成することが出来る。&lt;/li&gt;
&lt;li&gt;Project IDXは、もしかしたらAndroidのブラウザからでも開発できるようになるかもしれない。&lt;/li&gt;
&lt;li&gt;別のクラウドIDEやVSCodeなどにあるプロファイルをそのままインポート出来る。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Project IDXに関する情報は、以下の公式ページでも確認することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://firebase.google.com/docs/studio/idx-is-firebase-studio?hl=ar&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/firebase/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Firebase&lt;/span&gt;&lt;/div&gt;&lt;div&gt;أصبح Project IDX الآن جزءًا من Firebase Studio&lt;/div&gt;&lt;div&gt;إعلان عن أنّ Project IDX أصبح جزءًا من Firebase Studio، مع تفاصيل حول عملية الانتقال للمستخدمين الحاليين والميزات الجديدة&lt;/div&gt;&lt;div&gt;firebase.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今度触る時は、Androidのエミュレーターがちゃんと動くかどうか等を確認してみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;クラウドIDE関連記事&lt;a href=&quot;#クラウドide関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のクラウドIDE関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これからどう化けるかか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;楽しみだ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell、HTML】画像の不要な部分を数値化して、その座標でトリミングする</title><link>https://endorphinbath.com/posts/powershell-html-image-trimming-by-coordinates/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-html-image-trimming-by-coordinates/</guid><description>HTMLとJavaScriptとPowerShellで画像を一気にトリミングする記事です。OutOfMemoryExceptionとExternalExceptionをWrite-Errorでやり過ごしたりします。</description><pubDate>Sat, 07 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんなにいっぱいトリミングは大変だぁぁッ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、一気に出来るようにしよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;HTMLとJavaScriptとPowerShellで一気にトリミング。&lt;a href=&quot;#htmlとjavascriptとpowershellで一気にトリミング&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;色々と記事を書いていて、そのための画像を作っていると必要になってくるんですよね。画像のトリミングツール。&lt;/p&gt;&lt;p&gt;以前に作ったものもあるんですけど、もうちょい楽に動かせないのかと思って、この際新しく作り直しました。&lt;/p&gt;&lt;p&gt;ツール全体の処理の流れとしては、ブラウザ上で画像を表示してその上でバーを動かしてトリミングする座標を特定して、その座標をPowerShellの関数に渡してその画像があるフォルダ内の画像を一気にトリミングする。といった感じのものです。&lt;/p&gt;&lt;p&gt;トリミングする様子はこんな感じです。それでは行ってみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;2204&quot; height=&quot;1273&quot; src=&quot;/_astro/11.B8pq7bDj_xCcSC.webp&quot; srcset=&quot;/_astro/11.B8pq7bDj_1Yt5en.webp 640w, /_astro/11.B8pq7bDj_29YY8p.webp 750w, /_astro/11.B8pq7bDj_qLPA5.webp 828w, /_astro/11.B8pq7bDj_1hASkX.webp 1080w, /_astro/11.B8pq7bDj_Z2cs03j.webp 1280w, /_astro/11.B8pq7bDj_Z27Gf23.webp 1668w, /_astro/11.B8pq7bDj_ZBrSNi.webp 2048w, /_astro/11.B8pq7bDj_xCcSC.webp 2204w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;HTML、JavaScriptによる座標の可視化&lt;a href=&quot;#htmljavascriptによる座標の可視化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではまずは、画像のどの部分が不要なのかを可視化出来るツールを作っていきます。&lt;/p&gt;&lt;p&gt;以前に、Pythonで&lt;code&gt;matplotlib&lt;/code&gt;と&lt;code&gt;tkinter&lt;/code&gt;のライブラリを使った大所帯でトリミングツールを作りました。今回作ろうと思っているツールも殆ど同じ機能のものです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/trim-multiple-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】複数の画像を一気にトリミングするスクリプトを作った話&lt;/div&gt;&lt;div&gt;複数の画像を一気にトリミングするツールをPythonで作りました。使い方としては、最初に切り出したい範囲を選んで確定したら、そのエリアで後続の画像も切り出します。利用したモジュールは、OpenCVやTkinter、matplotlibになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211101_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、この程度のトリミングツールにそんなに大層なライブラリを使う必要はなく、Pythonをインストールする必要もありません。&lt;/p&gt;&lt;p&gt;今回は、HTMLで作っていきたいと思います。HTMLで作れそうなことは勘付いていましたが、フロントエンド開発の経験が殆どない僕は実際にどういうものを使えば作れるのかは分かっていませんでした。&lt;/p&gt;&lt;p&gt;ですがしかし、生成AI、今回はNVIDIA様のNemotron 70B-Instruct君に聞いたら、使えそうなコードを作ってくれましたので、それを元に作りました。（本当に生成AIって凄いですね・・・。）&lt;/p&gt;&lt;section&gt;&lt;h3&gt;HTMLとJavaScriptのコードの概観&lt;a href=&quot;#htmlとjavascriptのコードの概観&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;というわけで、実際にトリミング座標描画ツールを実装したHTMLおよびJavaScriptコードは以下になります。HTMLに設置したdivタグに画像を表示して、その上にバーも表示してさらに移動させることが出来るみたいです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;index.html&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lang&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;viewport&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;image_trimmer&amp;lt;/&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rel&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;style.css&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;file&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;imageLoader&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accept&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;image/*&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;imageView&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position: relative; width: fit-content;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;imageElement&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Choose an image.&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Vertical Bar（X-axis_upper） --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;draggableBarXUpper&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position: absolute; width: 5px; height: 100%; background-color: red; cursor: grab; left: 0;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Horizontal Bar（Y-axis_upper） --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;draggableBarYUpper&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position: absolute; width: 100%; height: 5px; background-color: blue; cursor: grab; top: 0;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Vertical Bar（X-axis_lower） --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;draggableBarXLower&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position: absolute; width: 5px; height: 100%; background-color: yellow; cursor: grab; left: 0;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;!-- Horizontal Bar（Y-axis_lower） --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;draggableBarYLower&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position: absolute; width: 100%; height: 5px; background-color: green; cursor: grab; top: 0;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;display: flex; gap: 10px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;X: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplay&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readonly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;Y: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplay&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readonly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;display: flex; gap: 10px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;X: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplay&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readonly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;Y: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplay&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readonly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;lockStatus&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;!-- Paragraph to show the status of lock --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;display: flex; gap: 10px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;X: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;Y: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;display: flex; gap: 10px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;X: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateXUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;Y: &amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;width: 100px;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;coordinateYUnit&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;px&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;copyToCb&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;!-- Paragraph to show the status whether coordinates are copied into clipboard or not. --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;script.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;style.css&lt;/code&gt;（要るのか？）:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/* style.css - Image and Bar Basic Styles */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#draggableBarYUpper&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;left: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Initialize position to the left edge of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;top: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Align vertically to the center of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;transform: &lt;/span&gt;&lt;span&gt;translateY&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;-50&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#draggableBarXUpper&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;top: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Initialize position to the top of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;left: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Align horizontally to the center of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* No need for &apos;left: 50%&apos; and &apos;transform&apos; to match the image width */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#draggableBarYLower&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;left: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Initialize position to the left edge of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;top: &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Note: This seems to be a specific offset rather than centering */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;transform: &lt;/span&gt;&lt;span&gt;translateY&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;-50&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#draggableBarXLower&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;top: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Initialize position to the top of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;left: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* Align horizontally to the center of the image */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* No need for &apos;left: 50%&apos; and &apos;transform&apos; to match the image width */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;script.js&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// script.js - Image Loading and Mouse Tracking Bar Functionality&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleImageChange&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isImageChanged&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// Show default lock state post-image loading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;imageLoader&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;change&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;handleImageChange&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleBarsAndCoordinates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// Update lock status on mouse move&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;isLocked&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Allow bar movement only if not locked&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isImageChanged&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mousemove&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;handleBarsAndCoordinates&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateCoordinateInput&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// Update lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isImageChanged&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mousedown&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;updateCoordinateInput&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unlockBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// Update lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; }, { &lt;/span&gt;&lt;span&gt;isImageChanged&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mouseup&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;unlockBar&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isLocking&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flg&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;flg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isLocking&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lockStatus&quot;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// element to indicate lock state&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Locking...&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Releasing now.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Change color based on lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flg&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyToClipboard&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;copyStatusesToCb&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateXUpper&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateYUpper&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateXLower&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateYLower&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;coordinateXUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;coordinateYUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;coordinateXLower&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;coordinateYLower&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clipboard&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;copyText&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;p&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;textContent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;copied!&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;copyStatusesToCb&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;insertAdjacentElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;afterend&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Asynchronous clipboard write failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateStateOfBarActivation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NUMBER_OF_BAR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isBarStateUpdating&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;propsForUpdateCoordAndBar&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;propsForImageChanging&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): updating state start.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isBarStateUpdating&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NUMBER_OF_BAR&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): the active bar is decided.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;imageElement&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyStatusDisplayToCb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;copyToCb&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBoundingClientRect&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXUpperToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYUpperToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXLowerToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYLowerToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;copyToClipboard&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;copyStatusDisplayToCb&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateXUpperToRecord&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateYUpperToRecord&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateXLowerToRecord&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordinateYLowerToRecord&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): coordinates are recorded.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarXUpper&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarYUpper&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXLower&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarXLower&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYLower&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarYLower&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;propsForUpdateCoordAndBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isUpdating&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateBarsAndCoordinates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;barX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordY&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;right&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bottom&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;// Track the bar to the mouse within the image&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;px`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;translateY(-50%)&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Always center align&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barX&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;px`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordX&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBoundingClientRect&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;// Nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXLower&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYLower&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;updateBarsAndCoordinates&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;propsForUpdateCoordAndBar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): bars and coordinates are updated.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;propsForImageChanging&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;propsForImageChanging&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isImageChanged&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;propsForImageChanging&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FileReader&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// Initialize bar after image load&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;50%&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Align to image center&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;translateY(-50%)&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0px&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Align to image left edge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;offsetHeight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;readAsDataURL&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): image is loaded.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;updateStateOfBarActivation(): updating state finished.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateStateOfBarActivation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;このトリミングツールのJavaScriptの関数の依存関係の見取り図はこんな感じです。とりあえず、要素の状態が切り替わる処理を&lt;code&gt;updateStateOfBarActivation&lt;/code&gt;関数に全て集めて、イベント関数からその関数に向かって「何を変えるのか」を一点集中させました。
&lt;img loading=&quot;lazy&quot; width=&quot;1844&quot; height=&quot;617&quot; src=&quot;/_astro/21.DZy31FN0_Z2ntkBs.webp&quot; srcset=&quot;/_astro/21.DZy31FN0_Z1sMIyg.webp 640w, /_astro/21.DZy31FN0_1kaLkW.webp 750w, /_astro/21.DZy31FN0_Z19F7ka.webp 828w, /_astro/21.DZy31FN0_2teqU0.webp 1080w, /_astro/21.DZy31FN0_Z1pF3JI.webp 1280w, /_astro/21.DZy31FN0_1zimMp.webp 1668w, /_astro/21.DZy31FN0_Z2ntkBs.webp 1844w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;生成AIが作ったコードはマズイ&lt;a href=&quot;#生成aiが作ったコードはマズイ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いやー久しぶりにHTMLとピュアJavaScriptを組んでみて、というか生成AIに組ませたらとんでもないことになりましたね。どの要素がどうなってんだか全く追えないコードに成り果てていました。(+д+)ﾏｽﾞｰ&lt;/p&gt;&lt;p&gt;（Gitに履歴が残っていました。AI君が作ったものを半分ぐらい直した状態でした。どの要素をどの処理で使っているのかが全然追えない・・・。）なんか普段、バックエンドのコードを書くことが多いので、フロントエンドのコードだと現時点での生成AIには手に追えなさそうですね・・・、まあライブラリとAPIを教えてくれるのは有り難いですけど。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// script.js - 画像読み込みとマウス追従バーの実装&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;imageElement&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarXUpper&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarYUpper&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXLower&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarXLower&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYLower&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;draggableBarYLower&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplay&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperDisplayToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperDisplayToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYUpperDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerDisplayToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateXLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerDisplayToRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;coordinateYLowerDisplayToRecord&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lockStatus&quot;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// ロック状態表示用要素&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// バーがロックされているかどうかのフラグ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyToCbStatusDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;copyToCb&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;imageLoader&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;change&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;handleImageChange&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mousemove&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Allow bar movement only if not locked&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateBarsAndCoordinates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;barX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordY&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;right&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bottom&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// Track the bar to the mouse within the image&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;px`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;translateY(-50%)&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Always center align&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordY&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;barX&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;px`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordX&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBoundingClientRect&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// Nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarXLower&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draggableBarYLower&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateXLowerDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;coordinateYLowerDisplay&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;updateBarsAndCoordinates&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;draggableBarX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;draggableBarY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordXDisplay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;coordYDisplay&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// Update lock status on mouse move&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mousedown&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, (&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Lock the bar upon click&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// Update lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateCoordinateInput&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Update click coordinates in input field&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;copyToClipboard&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;mouseup&quot;&lt;/span&gt;&lt;span&gt;, () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Unlock on click release&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateStateOfBarActivation&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// Update lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateStateOfBarActivation&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NUMBER_OF_BAR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// let idx = 0;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isBarStateUpdating&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isBarStateUpdating&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NUMBER_OF_BAR&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;indexOfActiveBar&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXUpperDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYUpperDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXLowerDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYLowerDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;propsForCoordRecordInput&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Locking...&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Releasing now.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lockStatusDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isBarLocked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Change color based on lock status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateCoordinateInput&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBoundingClientRect&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientX&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageRect&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateStateOfBarActivation&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;, { &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;y&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handleImageChange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FileReader&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Initialize bar after image load&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;top&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;50%&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Align to image center&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarYUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;translateY(-50%)&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;draggableBarXUpper&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0px&quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Align to image left edge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateXUpperDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;coordinateYUpperDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageElement&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;offsetHeight&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;updateLockStatusDisplay&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// Show default lock state post-image loading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;readAsDataURL&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedImage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyToClipboard&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;coordinateXUpperDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;coordinateYUpperDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;coordinateXLowerDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;coordinateYLowerDisplayToRecord&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clipboard&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;copyText&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;p&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;textContent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;copied!&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;copyToCbStatusDisplay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;insertAdjacentElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;afterend&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Asynchronous clipboard write failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;HTMLとJavaScriptの処理の流れ&lt;a href=&quot;#htmlとjavascriptの処理の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程のMermaidによる依存関係の図をもう一度貼っておいて、処理の流れを見てみます。動かす時の参考にしてみてください。
&lt;img loading=&quot;lazy&quot; width=&quot;1844&quot; height=&quot;617&quot; src=&quot;/_astro/21.DZy31FN0_Z2ntkBs.webp&quot; srcset=&quot;/_astro/21.DZy31FN0_Z1sMIyg.webp 640w, /_astro/21.DZy31FN0_1kaLkW.webp 750w, /_astro/21.DZy31FN0_Z19F7ka.webp 828w, /_astro/21.DZy31FN0_2teqU0.webp 1080w, /_astro/21.DZy31FN0_Z1pF3JI.webp 1280w, /_astro/21.DZy31FN0_1zimMp.webp 1668w, /_astro/21.DZy31FN0_Z2ntkBs.webp 1844w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下記の画像は先程冒頭で載せたものと同じものです。処理の流れは簡単に言うとこんな感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;画像を選んで読み込む。&lt;/li&gt;
&lt;li&gt;バーが動かせるので適当に動かして好きな場所でクリックする。&lt;/li&gt;
&lt;li&gt;赤と青のバーが動かせる時にクリックすると、左側と上側の座標が記録される。（記録するテキストボックスは画面の左下にあります。）&lt;/li&gt;
&lt;li&gt;黄色と緑のバーが動かせる時にクリックすると、右側と下側の座標が記録される。（記録するテキストボックスは画面の左下にあります。）&lt;/li&gt;
&lt;li&gt;記録した時と同時にクリップボードに、左側と上側と右側と下側の4つの座標が記録されます。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2204&quot; height=&quot;1273&quot; src=&quot;/_astro/11.B8pq7bDj_xCcSC.webp&quot; srcset=&quot;/_astro/11.B8pq7bDj_1Yt5en.webp 640w, /_astro/11.B8pq7bDj_29YY8p.webp 750w, /_astro/11.B8pq7bDj_qLPA5.webp 828w, /_astro/11.B8pq7bDj_1hASkX.webp 1080w, /_astro/11.B8pq7bDj_Z2cs03j.webp 1280w, /_astro/11.B8pq7bDj_Z27Gf23.webp 1668w, /_astro/11.B8pq7bDj_ZBrSNi.webp 2048w, /_astro/11.B8pq7bDj_xCcSC.webp 2204w&quot; /&gt;&lt;/p&gt;&lt;p&gt;トリミングする位置を可視化しながら取得できるツールはこんな感じです。
このツールで取得した4つの座標を、次のトリミングツールで使うというわけです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShellによる画像のトリミング&lt;a href=&quot;#powershellによる画像のトリミング&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;PowerShellの処理の概観&lt;a href=&quot;#powershellの処理の概観&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、先程HTMLで可視化してクリップボードに出力した座標を使って、画像をトリミングしていきたいと思います。
今回は、座標が半角スペース刻みでクリップボードに貼られたので、それをコマンドの引数としてペタッと貼り付ければ実行できるようにしました。
まず、バッチファイルはこんな感じにしておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; /p &lt;/span&gt;&lt;span&gt;coordinates&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Input 4 coordinates separated by &apos;spaces&apos; to trim images (lefter-x, upper-y, righter-x, lower-y): &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:: coordinates are plotted on %1 %2 %3 %4.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; -Windowstyle Normal -NoProfile -ExecutionPolicy Unrestricted -File &lt;/span&gt;&lt;span&gt;&quot;.\Z5-4_trim_multiple_images_by_coordinates.ps1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;%coordinates%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、バッチファイルから実行するPowerShellの中身は、こんな感じで実装されています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Z5-4_trim_multiple_images_by_coordinates.ps1&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImageWithTrimming&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load assembly of .NET Framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcFile&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.LockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Drawing.Imaging.ImageLockMode&lt;/span&gt;&lt;span&gt;]::ReadOnly, &lt;/span&gt;&lt;span&gt;$srcBmp.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Set an area to trim and clone an image.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: cloning source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Clone&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcBmpData.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Trim an image and save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}_{2:D2}{3}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path, &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcFile.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: name of the image file being saved is &apos;{1}&apos;.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Png);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: trimmed image is saved.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.OutOfMemoryException&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Message &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;OutOfMemoryException: remove trimmed images...&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: unlock bits of source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$srcBmp.UnlockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.Runtime.InteropServices.ExternalException&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&amp;lt;#Do this if a terminating exception happens#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Message &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GDI+ generic error occurred...&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: dispose source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: post-processing finished.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Optimize-ImagesWithTrimming&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoordinate01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoordinate01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoordinate02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoordinate02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Get image files to trim.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: output &apos;pathList&apos;&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: showing item info.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: start trimming image of &apos;{1}&apos;&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Optimize-ImageWithTrimming&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$xCoordinate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$yCoordinate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$xCoordinate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$yCoordinate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: trimming 1 image is finished.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Nothing to do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;Where-Object&lt;/span&gt;&lt;span&gt; { $_&lt;/span&gt;&lt;span&gt;.Extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.png&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;.jpg&quot;&lt;/span&gt;&lt;span&gt;) };&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$xCoordinateToTrim01&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$yCoordinateToTrim01&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$xCoordinateToTrim02&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$yCoordinateToTrim02&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;trimmed&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Optimize-ImagesWithTrimming&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$xCoordinateToTrim01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$yCoordinateToTrim01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$xCoordinateToTrim02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$yCoordinateToTrim02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; to move source files and terminate this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;y&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.\5_original_files&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (!(&lt;/span&gt;&lt;span&gt;Test-path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;New-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Name &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ItemType Directory;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path .\&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.png &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path .\&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$folderName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShellの処理の流れ&lt;a href=&quot;#powershellの処理の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このツールが一体何をやっているのかと言うと、流れ的にはこんな感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;1つのディレクトリ内にある画像を一覧で取得する。&lt;/li&gt;
&lt;li&gt;1枚1枚の画像に対してトリミングを始める。&lt;/li&gt;
&lt;li&gt;元画像のピクセルをロックする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体に&lt;code&gt;System.UInt32&lt;/code&gt;の型の座標を渡す。&lt;/li&gt;
&lt;li&gt;元画像と同じ画像オブジェクトをクローンする。&lt;/li&gt;
&lt;li&gt;渡した座標でトリミングした画像を保存する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;画像のトリミング方法は以前にこの記事でも紹介しました。&lt;/p&gt;&lt;p&gt;今回も、上記の3～6の流れは殆ど一緒です。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-trimming-needs-marchaling/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をトリミングしたいだけなのにマーシャリングを知らなくて沼った話&lt;/div&gt;&lt;div&gt;.NETの構造体「System.Drawing.Rectangle」の引数の型で沼りました。更に、BitmapのDisposeでオブジェクトの破棄、LockBitsで処理を軽くしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241026_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし今回は、例外が起きても処理が止まらないツールを作りたかったので、処理を止めないように&lt;code&gt;catch&lt;/code&gt;した例外が2つありました。&lt;code&gt;System.Runtime.InteropServices.ExternalException&lt;/code&gt;と&lt;code&gt;System.OutOfMemoryException&lt;/code&gt;の例外です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ExternalExceptionをWrite-Errorでやり過ごす。&lt;a href=&quot;#externalexceptionをwrite-errorでやり過ごす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;System.Runtime.InteropServices.ExternalException&lt;/code&gt;は、「GDI+ 汎用エラーが発生しました。」という旨の例外です。これは、開発中に予期しないエラーが発生して、&lt;code&gt;Bitmap.Dispose&lt;/code&gt;のメソッドを実行し損ねると、同様の処理を次回に実行した時に起こる例外です。メモリ上に、「GDIオブジェクト」というものが残存してしまうことが原因なのですが、タスクマネージャーでも特定するのが難しく、最終的には再起動しないと取り除けない例外です。&lt;/p&gt;&lt;p&gt;なので、処理をミスった都度PCを再起動するのは面倒なので、例外を&lt;code&gt;catch&lt;/code&gt;してトリミング処理をいつでも出来るようにしたいわけです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: unlock bits of source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$srcBmp.UnlockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.Runtime.InteropServices.ExternalException&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;#Do this if a terminating exception happens#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Message &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GDI+ generic error occurred...&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: dispose source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: post-processing finished.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そこで使ったのが、catchしてから&lt;code&gt;Write-Error&lt;/code&gt;コマンドレットです。&lt;/p&gt;&lt;p&gt;このコマンドレットは、他の言語の&lt;code&gt;throw&lt;/code&gt;のようにエラーが起きたことを知らせられるのですが、知らせながらも処理を止めないことが出来るというものです。このコマンドレットを使って、「GDI+ 汎用エラーが発生しました。」という旨の例外を検知した時には、その発生をログに残しながら処理を続けられるようになりました。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/write-error?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Write-Error (Microsoft.PowerShell.Utility) - PowerShell&lt;/div&gt;&lt;div&gt;Write-Error コマンドレットは、終了しないエラーを宣言します。 既定では、エラーはエラー ストリーム内で、表示されるホスト プログラムに出力と共に送信されます。 終了しないエラーを書き込むには、エラー メッセージ文字列、ErrorRecord オブジェクト、または Exception オブジェクトを入力します。 エラー レコードを設定するには、Write-Error の他のパラメーターを使用します。 終了しないエラーはエラー ストリームにエラーを書き込みますが、コマンド処理は停止しません。 入力項目のコレクション内の 1 つの項目で終了しないエラーが宣言されている場合、コマンドは引き続きコレクション内の他の項目を処理します。 終了エラーを宣言するには、throw キーワードを使用します。 詳細については、about_Throwを参照してください。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;OutOfMemoryExceptionをWrite-Errorでやり過ごす。&lt;a href=&quot;#outofmemoryexceptionをwrite-errorでやり過ごす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「&lt;code&gt;System.OutOfMemoryException&lt;/code&gt;」の例外は、今回のツールで言うと、既にトリミングした画像を、さらに同じ座標でトリミングしようとすると起こる例外です。なので、この場合は「既にトリミングした画像は消してね。」的なエラーメッセージを表示させて、トリミング処理をとりあえず実行し切るようにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Set an area to trim and clone an image.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord01&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$xCoord02&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$yCoord02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: cloning source bitmap.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Clone&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcBmpData.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Trim an image and save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}_{2:D2}{3}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path, &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcFile.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: name of the image file being saved is &apos;{1}&apos;.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$dstBmp.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Png);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: trimmed image is saved.&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.OutOfMemoryException&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Error&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Message &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;OutOfMemoryException: remove trimmed images...&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShellの例外処理はクセが強い&lt;a href=&quot;#powershellの例外処理はクセが強い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本当にクセが強い言語です、PowerShellは。&lt;/p&gt;&lt;p&gt;今回も例外処理の部分で沼りかけました。うーん、PowerShellには汎用的な例外をキャッチする処理は無いんですかねえ？　下記のMicrosoft公式の「例外について知りたかったことのすべて」を読むのが面倒くさくて、結局「&lt;code&gt;catch&lt;/code&gt; ブロックで実行するのが同じ例外の &lt;code&gt;throw&lt;/code&gt; のみである場合は、&lt;code&gt;catch&lt;/code&gt; しないでください。」の部分を汲み取って、&lt;code&gt;catch&lt;/code&gt;しないで例外の原因を特定して、その例外に対して個別に&lt;code&gt;catch&lt;/code&gt;して流せるようにしました。一応これで既知の例外と未知の例外の両方を検知して処理を続行できるようにはなりました。&lt;/p&gt;&lt;p&gt;と思ったのですが、もしも既知の例外に引っ掛かった例外の中に、自分が想定していない例外が混ざる可能性があったら・・・と考えると、デバッグに少々難がありますねえ・・・。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-exceptions?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;例外について知りたいこと - PowerShell&lt;/div&gt;&lt;div&gt;エラー処理は、コードの記述に関しては、人生の一部にすぎません。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;このトリミングツールを使ってみる。&lt;a href=&quot;#このトリミングツールを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、このトリミングツールを使ってみます。
先程、このような画面でトリミングする座標を決めるとしました。
&lt;img loading=&quot;lazy&quot; width=&quot;2204&quot; height=&quot;1273&quot; src=&quot;/_astro/11.B8pq7bDj_xCcSC.webp&quot; srcset=&quot;/_astro/11.B8pq7bDj_1Yt5en.webp 640w, /_astro/11.B8pq7bDj_29YY8p.webp 750w, /_astro/11.B8pq7bDj_qLPA5.webp 828w, /_astro/11.B8pq7bDj_1hASkX.webp 1080w, /_astro/11.B8pq7bDj_Z2cs03j.webp 1280w, /_astro/11.B8pq7bDj_Z27Gf23.webp 1668w, /_astro/11.B8pq7bDj_ZBrSNi.webp 2048w, /_astro/11.B8pq7bDj_xCcSC.webp 2204w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしてこのようなディレクトリ構造があるとして・・・&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z5-3_describe_position_to_trim_images.bat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z5-4_trim_multiple_images_by_coordinates.bat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z5-4_trim_multiple_images_by_coordinates.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├─image_trimmer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    index.html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    script.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    style.css&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  a.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  b.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  c.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;HTMLから取得した座標を使ってPowerShellを実行すると、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Input 4 coordinates separated by &apos;spaces&apos; to trim images (lefter-x, upper-y, righter-x, lower-y):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;767&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;724&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# こんな風にPowerShellが実行される。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Start &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;WAIT Powershell &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Windowstyle Normal &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NoProfile &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy Unrestricted &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.\Z5-4_trim_multiple_images_by_coordinates.ps1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;767&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;724&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このように同様にトリミングしたい画像も・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31.BNAc8t-X_Z1lSsoO.webp&quot; srcset=&quot;/_astro/31.BNAc8t-X_2qRqyx.webp 640w, /_astro/31.BNAc8t-X_4mixo.webp 750w, /_astro/31.BNAc8t-X_SjgSO.webp 828w, /_astro/31.BNAc8t-X_Z1FgCy6.webp 1080w, /_astro/31.BNAc8t-X_ZG68Bw.webp 1280w, /_astro/31.BNAc8t-X_10ej0C.webp 1668w, /_astro/31.BNAc8t-X_Z1lSsoO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.BuyQoGOI_1OhUOH.webp&quot; srcset=&quot;/_astro/32.BuyQoGOI_2d7KrQ.webp 640w, /_astro/32.BuyQoGOI_Z9nmyi.webp 750w, /_astro/32.BuyQoGOI_EyAM8.webp 828w, /_astro/32.BuyQoGOI_1uTKFq.webp 1080w, /_astro/32.BuyQoGOI_2u5fC0.webp 1280w, /_astro/32.BuyQoGOI_ZSLqyM.webp 1668w, /_astro/32.BuyQoGOI_1OhUOH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同様にトリミングされるというわけです。
&lt;img loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;722&quot; src=&quot;/_astro/41.B_bCr9KD_UQkzr.webp&quot; srcset=&quot;/_astro/41.B_bCr9KD_Z1Tb3Ju.webp 640w, /_astro/41.B_bCr9KD_29DxGC.webp 750w, /_astro/41.B_bCr9KD_UQkzr.webp 770w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;722&quot; src=&quot;/_astro/42.WGx72nZc_Z2rsORR.webp&quot; srcset=&quot;/_astro/42.WGx72nZc_Zcj5nR.webp 640w, /_astro/42.WGx72nZc_Z1dFBKG.webp 750w, /_astro/42.WGx72nZc_Z2rsORR.webp 770w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;770&quot; height=&quot;722&quot; src=&quot;/_astro/43.WCqVQgnS_2r6lhx.webp&quot; srcset=&quot;/_astro/43.WCqVQgnS_ZnV32o.webp 640w, /_astro/43.WCqVQgnS_Z1pizpd.webp 750w, /_astro/43.WCqVQgnS_2r6lhx.webp 770w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、HTMLで画像の不要な部分を座標に表して、PowerShellでその数値を使ってトリミングするツールの紹介でした。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;HTMLに&lt;code&gt;div&lt;/code&gt;タグを設置して、JavaScriptを使って画像の上でバーを動かせる。そして、座標を取得する。&lt;/li&gt;
&lt;li&gt;生成AIが作ったコードはとんでもないものになってたりするので、一旦リファクタリングするべきかどうかを確認する。&lt;/li&gt;
&lt;li&gt;PowerShellでは、「.NET Framework」の&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体に&lt;code&gt;System.UInt32&lt;/code&gt;の型の座標を渡してトリミングしていく。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bitmap.Dispose&lt;/code&gt;忘れによって起こる、&lt;code&gt;ExternalException&lt;/code&gt;を&lt;code&gt;Write-Error&lt;/code&gt;でやり過ごした。&lt;/li&gt;
&lt;li&gt;過度なトリミングによって起こる、&lt;code&gt;OutOfMemoryException&lt;/code&gt;を&lt;code&gt;Write-Error&lt;/code&gt;でやり過ごした。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで同じ部分が要らないまとまった画像を一気にトリミングできるようになりました。自分が所持している画像のサイズを小さくすることが出来ますね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShell関連記事&lt;a href=&quot;#powershell関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のPowerShell関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-merging-into-pdf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話&lt;/div&gt;&lt;div&gt;ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241027_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、小さくまとまったかな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何かしらの言語をわざわざインストールしなくて済むぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>40万円で手に入れた2つのPCの性能のベンチマークを比較する（第2回：SatisfactoryやGhost of Tsushimaなど）</title><link>https://endorphinbath.com/posts/making-gaming-pc-first-vs-pc-02/</link><guid isPermaLink="true">https://endorphinbath.com/posts/making-gaming-pc-first-vs-pc-02/</guid><description>Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのゲーム画質やFPSを比較した記事です。</description><pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ベンチマークを測るぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はゲームを使うんですか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの性能をまとめておきたい。&lt;a href=&quot;#pcの性能をまとめておきたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、初めて自作したPCを使ってベンチマークテストやらゲームのFPSの比較結果を記録しておきました。以前に同じぐらいの価格で購入して使っていたゲーミングノートPCからどれぐらい性能が向上したのかを検証しています。
2年前に40万円で買ったノートPCと、その2年後に40万円で自作したゲーミングデスクトップのベンチマークを計測してまとめた記事です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの構成&lt;a href=&quot;#pcの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回比較していく2台のPCの構成はこれらで行きます。
エントリーナンバー1番、「ROG Strix SCAR 17 G733ZX-I9R3080T」です。ゲーミングノートPCです。2022年に新品で¥399,800で購入しました。&lt;/p&gt;&lt;a href=&quot;https://rog.asus.com/jp/laptops/rog-strix/rog-strix-scar-17-2022-series/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://rog.asus.com/rog/nuxtStatic/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@ROG&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ROG Strix Scar 17 (2022) G733&lt;/div&gt;&lt;div&gt;描かれるフレーム数が増えた最新の2022 ROG Strix SCARなら、たくさんのゲームに勝利できます。最大55WのCPUインテル® Core™ i9-12900Hと最大150WのTGPを備えたNVIDIA® GeForce RTX™ 3080Ti Laptop GPUが、あらゆる敵に勝利します。PCIe® 4.0 x4 SSDを搭載しており、読み込み画面に悩ませられることはもうありません。DDR5メモリにより帯域幅とスループットが向上したSCARは、競合他社のモデルとは大きく異なります。&lt;/div&gt;&lt;div&gt;rog.asus.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://dlcdnwebimgs.asus.com/gain/1B5E5B13-DB17-40F5-9F71-C4127C6C7693&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX™ 3080 Ti Laptop&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core™ i9-12900H&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;ASUSTeK Computer Inc. G733ZX 1.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;SK Hynix HMCG78MEBSA095N (16GB x2)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;分からん。(1TB)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;エントリーナンバー2番、最近組んだ自作デスクトップゲーミングPCです。パーツのあれこれの内容は以下の通りで、全て2024年に購入して合計金額が¥426,678でした。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;NVIDIA GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;192,891&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/4g4kPW0&quot; target=&quot;_blank&quot;&gt;AMD Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;104,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;ADATA_XPG_LANCER_RGB_AX5U6400C3216G-DCLARWH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;23,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N&lt;/a&gt;&lt;/td&gt;&lt;td&gt;17,780&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Supply Unit&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Cooler&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238/&quot; target=&quot;_blank&quot;&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Fan&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;DEEP COOL FK120 R-FK120-BKNPF1-G-1&lt;/a&gt; x2&lt;/td&gt;&lt;td&gt;2,752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PC Case&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332/&quot; target=&quot;_blank&quot;&gt;Antec FLUX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;td&gt;15,182&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;エントリーナンバー2番の自作PCの、各パーツを選ぶ過程は、別の記事に載せておきました。よければご参考いただければと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-for-the-first-time/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241018_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;組み立ての過程は、別の記事に載せておきました。ハードウェア面の参考にどうぞ。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-assembly/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241111_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パーツ毎の性能値の比較&lt;a href=&quot;#パーツ毎の性能値の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは性能を比較していきましょう。&lt;/p&gt;&lt;p&gt;まずは、パーツ毎に各メーカーから公表されている値を比較します。&lt;a href=&quot;https://www.cpuid.com/softwares/cpu-z.html&quot; target=&quot;_blank&quot;&gt;CPU-Z&lt;/a&gt;から手に入れた情報もあります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;CPU&lt;a href=&quot;#cpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;CPUは、2年前はIntel Coreシリーズ、その2年後はAMD Ryzenシリーズとしています。&lt;/p&gt;&lt;p&gt;自作デスクトップが積んでいるCPUの方が、コア数、スレッド数、クロック周波数など、殆どの指標において向上しています。そこに加えてTDPも2倍以上に増えていますが、デスクトップの最大の利点と言ってもいい排熱性能は仕上げたつもりなので、おそらくCPU本来の能力がちゃんと引き出されて、より高いパフォーマンスを出せると思います。&lt;/p&gt;








































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.intel.co.jp/content/www/jp/ja/products/sku/132214/intel-core-i912900h-processor-24m-cache-up-to-5-00-ghz/specifications.html&quot; target=&quot;_blank&quot;&gt;Intel® Core™ i9-12900H&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/desktops/ryzen/7000-series/amd-ryzen-9-7950x3d.html&quot; target=&quot;_blank&quot;&gt;AMD Ryzen™ 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;発売日&lt;/td&gt;&lt;td&gt;2022年第1四半期&lt;/td&gt;&lt;td&gt;2023年1月&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;モバイル&lt;/td&gt;&lt;td&gt;デスクトップ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コア数&lt;/td&gt;&lt;td&gt;14（パフォーマンスコア：6、効率コア：8）&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スレッド数&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ベースクロック周波数&lt;/td&gt;&lt;td&gt;3.8 GHz（効率コア）&lt;/td&gt;&lt;td&gt;4.2 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大ブーストクロック周波数&lt;/td&gt;&lt;td&gt;最大5.0 GHz（パフォーマンスコア）&lt;/td&gt;&lt;td&gt;最大5.7 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L1キャッシュ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L2キャッシュ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;16 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L3キャッシュ&lt;/td&gt;&lt;td&gt;24 MB&lt;/td&gt;&lt;td&gt;128 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;製造プロセス&lt;/td&gt;&lt;td&gt;Intel 7 (FinFET)&lt;/td&gt;&lt;td&gt;TSMC 5nm FinFET&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TDP（熱設計電力）&lt;/td&gt;&lt;td&gt;45 W&lt;/td&gt;&lt;td&gt;120 W&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メモリタイプ&lt;/td&gt;&lt;td&gt;DDR5-4800、DDR4-3200、LPDDR5-5200、LPDDR4x-4267&lt;/td&gt;&lt;td&gt;2x1R DDR5-5200、2x2R DDR5-5200、4x1R DDR5-3600、4x2R DDR5-3600&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大メモリサイズ&lt;/td&gt;&lt;td&gt;64 GB&lt;/td&gt;&lt;td&gt;128 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;内蔵グラフィックス&lt;/td&gt;&lt;td&gt;Intel® Iris® Xe Graphics&lt;/td&gt;&lt;td&gt;AMD Radeon™ Graphics&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックス最大周波数&lt;/td&gt;&lt;td&gt;1.45 GHz&lt;/td&gt;&lt;td&gt;2.2 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PCI Expressバージョン&lt;/td&gt;&lt;td&gt;PCIe 4.0&lt;/td&gt;&lt;td&gt;PCIe 5.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ソケット&lt;/td&gt;&lt;td&gt;FCBGA1744&lt;/td&gt;&lt;td&gt;AM5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大動作温度&lt;/td&gt;&lt;td&gt;100°C&lt;/td&gt;&lt;td&gt;89°C&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;RAM&lt;a href=&quot;#ram&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ROG Strixの方のメモリ性能は&lt;a href=&quot;https://product.skhynix.com/products/dram/module.go&quot; target=&quot;_blank&quot;&gt;この公式ページ&lt;/a&gt;から確認しました。どちらもDRAMの製造はSK Hynixですが、自作デスクトップPCの方が、CAS Latencyおよびクロック周波数が向上しています。&lt;/p&gt;






















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Part Number&lt;/td&gt;&lt;td&gt;HMCG78MEBSA095N&lt;/td&gt;&lt;td&gt;AX5U6400C3216G-DCLARWH&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Module Manuf.&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;td&gt;A-DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DRAM Manuf.&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Capacity&lt;/td&gt;&lt;td&gt;16GB x2&lt;/td&gt;&lt;td&gt;16GB x2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Speed (MT/s)&lt;/td&gt;&lt;td&gt;4800&lt;/td&gt;&lt;td&gt;6400&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Timing&lt;/td&gt;&lt;td&gt;40-39-39&lt;/td&gt;&lt;td&gt;32-39-39&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DRAM Type&lt;/td&gt;&lt;td&gt;DDR5&lt;/td&gt;&lt;td&gt;DDR5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Module Type&lt;/td&gt;&lt;td&gt;SO-DIMM&lt;/td&gt;&lt;td&gt;UDIMM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Voltage (V)&lt;/td&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;1.35&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GPU&lt;a href=&quot;#gpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GPUも、ノートPCから自作デスクトップになって、CPUと同様に殆どの性能が向上しています。CUDAコアやクロック周波数が1.4～2倍に向上して、VRAMもGDDR6Xになって帯域幅が上昇しているようです。&lt;/p&gt;&lt;p&gt;デスクトップ用のGeForce RTX 3080と比べても全体的な性能がかなり向上しています。&lt;/p&gt;
























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指標&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;- （参考）&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/laptops/30-series/&quot; target=&quot;_blank&quot;&gt;GeForce RTX 3080 Ti Laptop GPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-specs&quot; target=&quot;_blank&quot;&gt;GeForceRTX 3080&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CUDA Core&lt;/td&gt;&lt;td&gt;7424&lt;/td&gt;&lt;td&gt;8704&lt;/td&gt;&lt;td&gt;10240&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shader Core (TFLOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ray-Tracing Core (TFLOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tensor Core (AI TOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;836&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Boost Clock (GHz)&lt;/td&gt;&lt;td&gt;1.59&lt;/td&gt;&lt;td&gt;1.71&lt;/td&gt;&lt;td&gt;2.55&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base Clock (GHz)&lt;/td&gt;&lt;td&gt;1.125&lt;/td&gt;&lt;td&gt;1.26 / 1.44&lt;/td&gt;&lt;td&gt;2.29&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Type&lt;/td&gt;&lt;td&gt;GDDR6&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Video Random Access Memory (dedicated: GB)&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;12 / 10&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Interface Width (Bit)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;384 / 320&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Max GPU Temperature (C)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Average Power Consumption (W)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;246&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;System Requirements Power (W)&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;SSDは片方が特定できなかったので比較はしません。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Apex Legends&lt;a href=&quot;#apex-legends&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは先述したPCの2台を使って、画質やFPSを比較していきたいと思います。&lt;/p&gt;&lt;p&gt;まずはApex Legendsから見ていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ノートPC&lt;a href=&quot;#ノートpc&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、ノートPCのベンチマークを見ていきます。描画画質は最高画質です。
普通に走っている時のFPSは140ぐらいでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03.Cj2Qgv-d_Z1G32vp.webp&quot; srcset=&quot;/_astro/03.Cj2Qgv-d_s94iV.webp 640w, /_astro/03.Cj2Qgv-d_Z1Tm3Hd.webp 750w, /_astro/03.Cj2Qgv-d_Z15p5lM.webp 828w, /_astro/03.Cj2Qgv-d_Z20qcEG.webp 1080w, /_astro/03.Cj2Qgv-d_Z11fHI7.webp 1280w, /_astro/03.Cj2Qgv-d_F4IT2.webp 1668w, /_astro/03.Cj2Qgv-d_Z1G32vp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;射撃中も特にFPSに変化はありませんでした。やはり処理が軽めのゲームです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04.B91Cc_m4_Z1Ip5s6.webp&quot; srcset=&quot;/_astro/04.B91Cc_m4_Z2a1Pul.webp 640w, /_astro/04.B91Cc_m4_xEair.webp 750w, /_astro/04.B91Cc_m4_1mB8DR.webp 828w, /_astro/04.B91Cc_m4_Z22MfBn.webp 1080w, /_astro/04.B91Cc_m4_Z13BKEN.webp 1280w, /_astro/04.B91Cc_m4_CHFWl.webp 1668w, /_astro/04.B91Cc_m4_Z1Ip5s6.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テルミットグレネードを遠くに投げて処理が重くなるかどうかを見ましたが、あまり変化はしませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05.xPxouCa__Zj2dgl.webp&quot; srcset=&quot;/_astro/05.xPxouCa__1NTvO1.webp 640w, /_astro/05.xPxouCa__ZxABc8.webp 750w, /_astro/05.xPxouCa__glm9i.webp 828w, /_astro/05.xPxouCa__ZCpnpC.webp 1080w, /_astro/05.xPxouCa__lK6vW.webp 1280w, /_astro/05.xPxouCa__235y96.webp 1668w, /_astro/05.xPxouCa__Zj2dgl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次にデスクトップPCのベンチマークを見ていきます。
射撃訓練場で普通に発砲している時はFPS240ぐらいが出ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06.DLNfUUvo_ZdItyi.webp&quot; srcset=&quot;/_astro/06.DLNfUUvo_Z1C3g08.webp 640w, /_astro/06.DLNfUUvo_15CJME.webp 750w, /_astro/06.DLNfUUvo_1TzI95.webp 828w, /_astro/06.DLNfUUvo_Zx6DHz.webp 1080w, /_astro/06.DLNfUUvo_r3Pe0.webp 1280w, /_astro/06.DLNfUUvo_28ohQ9.webp 1668w, /_astro/06.DLNfUUvo_ZdItyi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テルミットグレネードを使うと少しFPSが下がりました。しかしながら、FPSは220ぐらい出ています。まあ、誤差の範囲かもしれません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07.CRHOtx_X_1Jvwht.webp&quot; srcset=&quot;/_astro/07.CRHOtx_X_Z1Sbqnk.webp 640w, /_astro/07.CRHOtx_X_Ouzps.webp 750w, /_astro/07.CRHOtx_X_1DrxKS.webp 828w, /_astro/07.CRHOtx_X_1q8m8c.webp 1080w, /_astro/07.CRHOtx_X_2piQ4L.webp 1280w, /_astro/07.CRHOtx_X_ZXxP71.webp 1668w, /_astro/07.CRHOtx_X_1Jvwht.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;バトロワも問題なくプレイできました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/08.DwZ5vAj7_Z1DX3ct.webp&quot; srcset=&quot;/_astro/08.DwZ5vAj7_icLhV.webp 640w, /_astro/08.DwZ5vAj7_Z24ilId.webp 750w, /_astro/08.DwZ5vAj7_Z1flnmM.webp 828w, /_astro/08.DwZ5vAj7_Z1XldlK.webp 1080w, /_astro/08.DwZ5vAj7_ZYaIpb.webp 1280w, /_astro/08.DwZ5vAj7_H9IcX.webp 1668w, /_astro/08.DwZ5vAj7_Z1DX3ct.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cyberpunk 2077&lt;a href=&quot;#cyberpunk-2077&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、Cyberpunk 2077です。このゲームは、CPUの推奨要件が高いゲームとされています。
2024-12-03時点における、GPUの推奨要件は、GeForce RTX 2060 SUPER or Radeon RX 5700 XT or Arc A770です。そして、CPUの推奨要件が、&lt;strong&gt;Core i7-12700 or Ryzen 7 7800X3D&lt;/strong&gt;となっています。そうです、Core i5だと快適に遊べないみたいなのです・・・。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ノートPC&lt;a href=&quot;#ノートpc-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;というわけで、そんなCPUを責めてくるゲームを使って比較していきます。Cyber punkも描画画質は最高画質です。
まずはノートPCの方です。
CPUに負担が掛かるかと思いましたが、GPU使用率の方が目立ちます。90%以上で推移してフルに使い切ることが出来ています。DLSSをオンにしているからかもしれません。しかし、出せたFPSの値は30が限界でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_01.Dr2HDu8i_1dCogu.webp&quot; srcset=&quot;/_astro/10_01.Dr2HDu8i_2gBr3l.webp 640w, /_astro/10_01.Dr2HDu8i_Z23zDk6.webp 750w, /_astro/10_01.Dr2HDu8i_2o3v61.webp 828w, /_astro/10_01.Dr2HDu8i_1Gd25r.webp 1080w, /_astro/10_01.Dr2HDu8i_Z1Kr4ng.webp 1280w, /_astro/10_01.Dr2HDu8i_Z1sp1xe.webp 1668w, /_astro/10_01.Dr2HDu8i_1dCogu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;戦闘場面でもFPSは30より上がらず。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_02.CknBfsEX_ZCPTP2.webp&quot; srcset=&quot;/_astro/10_02.CknBfsEX_Z1obt0O.webp 640w, /_astro/10_02.CknBfsEX_ZDbpzk.webp 750w, /_astro/10_02.CknBfsEX_Z1gJoX9.webp 828w, /_astro/10_02.CknBfsEX_Zagh15.webp 1080w, /_astro/10_02.CknBfsEX_1sgKk9.webp 1280w, /_astro/10_02.CknBfsEX_1KiNab.webp 1668w, /_astro/10_02.CknBfsEX_ZCPTP2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUとGPUの温度は常に90度近辺を推移していました。排熱が追いついていないのかもしれません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_03.Ctn3D-69_Z3wd88.webp&quot; srcset=&quot;/_astro/10_03.Ctn3D-69_245fIe.webp 640w, /_astro/10_03.Ctn3D-69_Z2g6OEd.webp 750w, /_astro/10_03.Ctn3D-69_2bwjKT.webp 828w, /_astro/10_03.Ctn3D-69_p3pFO.webp 1080w, /_astro/10_03.Ctn3D-69_22As23.webp 1280w, /_astro/10_03.Ctn3D-69_2kCuR5.webp 1668w, /_astro/10_03.Ctn3D-69_Z3wd88.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デスクトップPCでは、DLSS 3を発動した状態でプレイしました。
ノートPC同様に、DLSSがオンになっているためか、GPU使用率が常に90を超えています。そして、FPSは常に140を超えていました。
しかし、人間を描画する際には少しアーティファクトが残る場合があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_11.C_rRUjBi_Z1NXBGr.webp&quot; srcset=&quot;/_astro/10_11.C_rRUjBi_1PBqrJ.webp 640w, /_astro/10_11.C_rRUjBi_Z2tzDUH.webp 750w, /_astro/10_11.C_rRUjBi_1X3uup.webp 828w, /_astro/10_11.C_rRUjBi_Z1lnXRu.webp 1080w, /_astro/10_11.C_rRUjBi_h93sJ.webp 1280w, /_astro/10_11.C_rRUjBi_zb6iL.webp 1668w, /_astro/10_11.C_rRUjBi_Z1NXBGr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;街並みの描画も一定のクオリティを保っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_12.iqFvxAvQ_Zc7b95.webp&quot; srcset=&quot;/_astro/10_12.iqFvxAvQ_Z1Rl2Pw.webp 640w, /_astro/10_12.iqFvxAvQ_Z17kYp2.webp 750w, /_astro/10_12.iqFvxAvQ_Z1JSXMQ.webp 828w, /_astro/10_12.iqFvxAvQ_gsrER.webp 1080w, /_astro/10_12.iqFvxAvQ_1T0u16.webp 1280w, /_astro/10_12.iqFvxAvQ_2c2wQ8.webp 1668w, /_astro/10_12.iqFvxAvQ_Zc7b95.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;戦闘場面でもストレス無くプレイすることが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_13.BcoTR_wl_1SaT2h.webp&quot; srcset=&quot;/_astro/10_13.BcoTR_wl_1WTrtb.webp 640w, /_astro/10_13.BcoTR_wl_Z2mhCTg.webp 750w, /_astro/10_13.BcoTR_wl_25lvvQ.webp 828w, /_astro/10_13.BcoTR_wl_2lKwQe.webp 1080w, /_astro/10_13.BcoTR_wl_Z15SyBt.webp 1280w, /_astro/10_13.BcoTR_wl_ZMQvLr.webp 1668w, /_astro/10_13.BcoTR_wl_1SaT2h.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ELDEN RING&lt;a href=&quot;#elden-ring&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なんだかんだ、このELDEN RINGというゲームも推奨要件は高めです。GPUの推奨要件は、NVIDIA GEFORCE GTX 1070 8 GB or AMD RADEON RX VEGA 56 8 GBです。そして、CPUの推奨要件が、&lt;strong&gt;INTEL CORE I7-8700K or AMD RYZEN 5 3600X&lt;/strong&gt;となっています。第8世代ではありますが、Core i7のチップでないと快適に遊べません。さすがGeme Of The Year 2023。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ノートPC&lt;a href=&quot;#ノートpc-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ELDEN RINGも最高画質にしてCPUやGPU使用率を見ていきます。
ノートPCの方から見てみると、CPU使用率が50%未満でそこまで高くないながらも、CPU温度が90度付近でかなり高くなっています。全く排熱が追いついていないと思われます。しかしながら、FPSはELDEN RINGの上限である60を出すことは出来ています。GPUの温度も90度付近で高いです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.p8I_1RZ5_Z1BXfh6.webp&quot; srcset=&quot;/_astro/11.p8I_1RZ5_26l0Pf.webp 640w, /_astro/11.p8I_1RZ5_Zga7aT.webp 750w, /_astro/11.p8I_1RZ5_xLQaw.webp 828w, /_astro/11.p8I_1RZ5_Z1Vlpqn.webp 1080w, /_astro/11.p8I_1RZ5_ZWaUtN.webp 1280w, /_astro/11.p8I_1RZ5_J9w8l.webp 1668w, /_astro/11.p8I_1RZ5_Z1BXfh6.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、霊馬トレントで高速で移動したりすると、FPSは60を下回ります。CPUの処理が追いつき切れていません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.BVH2hLRJ_K8Rfm.webp&quot; srcset=&quot;/_astro/12.BVH2hLRJ_cVQKJ.webp 640w, /_astro/12.BVH2hLRJ_Z29ygfp.webp 750w, /_astro/12.BVH2hLRJ_Z1kBhSY.webp 828w, /_astro/12.BVH2hLRJ_qKH65.webp 1080w, /_astro/12.BVH2hLRJ_1pVc2E.webp 1280w, /_astro/12.BVH2hLRJ_Z1WUu98.webp 1668w, /_astro/12.BVH2hLRJ_K8Rfm.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;霊馬から降りて戦闘状態になると、FPSは60に戻りました。オブジェクトの読み込みでよりCPUに負荷が掛かっていそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13.CweAmr4L_Z2p7lCx.webp&quot; srcset=&quot;/_astro/13.CweAmr4L_Z2bmTWe.webp 640w, /_astro/13.CweAmr4L_wj5Py.webp 750w, /_astro/13.CweAmr4L_1lg4bY.webp 828w, /_astro/13.CweAmr4L_2lGC27.webp 1080w, /_astro/13.CweAmr4L_Z1Jk1Pf.webp 1280w, /_astro/13.CweAmr4L_Z2Yzd6.webp 1668w, /_astro/13.CweAmr4L_Z2p7lCx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ムービーを再生する際には、60FPSで安定しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/14.ZPdVRYrM_2b7ICU.webp&quot; srcset=&quot;/_astro/14.ZPdVRYrM_ZShHWe.webp 640w, /_astro/14.ZPdVRYrM_1OohPy.webp 750w, /_astro/14.ZPdVRYrM_Z2qPRBW.webp 828w, /_astro/14.ZPdVRYrM_1QJytD.webp 1080w, /_astro/14.ZPdVRYrM_Z2eh5nI.webp 1280w, /_astro/14.ZPdVRYrM_ZwVCKz.webp 1668w, /_astro/14.ZPdVRYrM_2b7ICU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次はデスクトップPCを見ていきます。
CPUに負荷が掛かっている状態でも、CPU温度は60度すら達していません。GPU温度も50度付近なので、しっかり排熱できていることが見て取れます。FPSはもちろん60ピッタリです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15.CabGNaFz_xAh0H.webp&quot; srcset=&quot;/_astro/15.CabGNaFz_Z1UwUnR.webp 640w, /_astro/15.CabGNaFz_M95oU.webp 750w, /_astro/15.CabGNaFz_1B63Kl.webp 828w, /_astro/15.CabGNaFz_ed6Qq.webp 1080w, /_astro/15.CabGNaFz_1dnAN0.webp 1280w, /_astro/15.CabGNaFz_Z2at5nM.webp 1668w, /_astro/15.CabGNaFz_xAh0H.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;霊馬トレントで高速で移動する際にも、60FPSで安定していました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16.CuipmTgH_Z1df8l3.webp&quot; srcset=&quot;/_astro/16.CuipmTgH_ZaVO8O.webp 640w, /_astro/16.CuipmTgH_2wJbDX.webp 750w, /_astro/16.CuipmTgH_Z1IuXNx.webp 828w, /_astro/16.CuipmTgH_Z1wCiuk.webp 1080w, /_astro/16.CuipmTgH_ZxrNxK.webp 1280w, /_astro/16.CuipmTgH_18RD4o.webp 1668w, /_astro/16.CuipmTgH_Z1df8l3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;戦闘状態でも、FPSや画質に問題はありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/17.BjXGsVHX_1rqbUi.webp&quot; srcset=&quot;/_astro/17.BjXGsVHX_1xmcny.webp 640w, /_astro/17.BjXGsVHX_ZO8UCA.webp 750w, /_astro/17.BjXGsVHX_ZbWha.webp 828w, /_astro/17.BjXGsVHX_1831L1.webp 1080w, /_astro/17.BjXGsVHX_27dvHA.webp 1280w, /_astro/17.BjXGsVHX_Z1gDatc.webp 1668w, /_astro/17.BjXGsVHX_1rqbUi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ムービーを再生する際にも、60FPSで高画質出力で安定しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/18.CZ2AsLDH_1Gak1B.webp&quot; srcset=&quot;/_astro/18.CZ2AsLDH_ZzeS17.webp 640w, /_astro/18.CZ2AsLDH_28r7LF.webp 750w, /_astro/18.CZ2AsLDH_Z27N2FP.webp 828w, /_astro/18.CZ2AsLDH_1mM9Rk.webp 1080w, /_astro/18.CZ2AsLDH_2lWDNT.webp 1280w, /_astro/18.CZ2AsLDH_Z11T2mS.webp 1668w, /_astro/18.CZ2AsLDH_1Gak1B.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Ghost of Tsushima DIRECTOR’S CUT&lt;a href=&quot;#ghost-of-tsushima-directors-cut&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最初にPlayStation 4向けに発売されたアクションゲームです。僕はPS4の時もプレイしましたが、既にグラフィックが超美麗だったので、PC版だとチップにどれぐらいの負担を強いてくるのやら・・・。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ノートPC&lt;a href=&quot;#ノートpc-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Ghost of Tshushimaも最高画質（非常に高い）設定で測っていきます。
ノートPCでは、FPSは40～80ぐらいの間を推移していました。2020年に発売されたゲームとあって古めなので、思ったよりFPSが出せています。しかし、少しCPUとGPU温度が85度付近で高めです。GPU使用率は100%。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31.Yogzm6eO_bnB8u.webp&quot; srcset=&quot;/_astro/31.Yogzm6eO_10Qq7l.webp 640w, /_astro/31.Yogzm6eO_Z1lDGSN.webp 750w, /_astro/31.Yogzm6eO_ZwGIxn.webp 828w, /_astro/31.Yogzm6eO_Z7Yy0M.webp 1080w, /_astro/31.Yogzm6eO_QaUUM.webp 1280w, /_astro/31.Yogzm6eO_Z2wFKg0.webp 1668w, /_astro/31.Yogzm6eO_bnB8u.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;馬で駆ける際のCPUの負荷は、ムービーの時とあまり変わりませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.DELazS5l_ZOh7h3.webp&quot; srcset=&quot;/_astro/32.DELazS5l_9P7vU.webp 640w, /_astro/32.DELazS5l_Z2cF0ue.webp 750w, /_astro/32.DELazS5l_Z1nI28N.webp 828w, /_astro/32.DELazS5l_Z18Ehqk.webp 1080w, /_astro/32.DELazS5l_Z9tMtK.webp 1280w, /_astro/32.DELazS5l_1wPE8o.webp 1668w, /_astro/32.DELazS5l_ZOh7h3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;戦闘状態の画質やFPSも、馬で駆けている状態と比べてあまり変わりませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33.BZiRXkXq_1dwAxB.webp&quot; srcset=&quot;/_astro/33.BZiRXkXq_RShVH.webp 640w, /_astro/33.BZiRXkXq_Z1tBP4r.webp 750w, /_astro/33.BZiRXkXq_ZEEQI1.webp 828w, /_astro/33.BZiRXkXq_T9qok.webp 1080w, /_astro/33.BZiRXkXq_1SjUkT.webp 1280w, /_astro/33.BZiRXkXq_Z1uwKPS.webp 1668w, /_astro/33.BZiRXkXq_1dwAxB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;明るいときでも特にベンチマークに変化はありませんでした。常に同じ描画品質で楽しめるゲームです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/34.CXAxsnWA_ZoQ3nX.webp&quot; srcset=&quot;/_astro/34.CXAxsnWA_OFIcy.webp 640w, /_astro/34.CXAxsnWA_Z1wOoNA.webp 750w, /_astro/34.CXAxsnWA_ZHRqsa.webp 828w, /_astro/34.CXAxsnWA_ZIedxf.webp 1080w, /_astro/34.CXAxsnWA_fVgok.webp 1280w, /_astro/34.CXAxsnWA_1WgI1t.webp 1668w, /_astro/34.CXAxsnWA_ZoQ3nX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デスクトップPCを確認していきます。
ムービーでは240FPS出ていました。DLSSをオンにしたので、GPU使用率はほぼ100%です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/35.Un91g8iW_2mw7a0.webp&quot; srcset=&quot;/_astro/35.Un91g8iW_159p9m.webp 640w, /_astro/35.Un91g8iW_Z1hlHQM.webp 750w, /_astro/35.Un91g8iW_ZsoJvm.webp 828w, /_astro/35.Un91g8iW_238W0I.webp 1080w, /_astro/35.Un91g8iW_Z22RGQD.webp 1280w, /_astro/35.Un91g8iW_Zlxfeu.webp 1668w, /_astro/35.Un91g8iW_2mw7a0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;馬で高速で駆けるシーンでもFPSは200を超えています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/36.C0gqUytK_Z17cubx.webp&quot; srcset=&quot;/_astro/36.C0gqUytK_XhNwh.webp 640w, /_astro/36.C0gqUytK_Z1odjtR.webp 750w, /_astro/36.C0gqUytK_Zzgl8r.webp 828w, /_astro/36.C0gqUytK_Z1qzEkO.webp 1080w, /_astro/36.C0gqUytK_Zrpaof.webp 1280w, /_astro/36.C0gqUytK_1eUhdT.webp 1668w, /_astro/36.C0gqUytK_Z17cubx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;戦闘中でも画質やFPSには全く問題がありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37.BnZRWWhq_ZewsO0.webp&quot; srcset=&quot;/_astro/37.BnZRWWhq_Y4z9.webp 640w, /_astro/37.BnZRWWhq_Z2lw3r0.webp 750w, /_astro/37.BnZRWWhq_Z1wz55z.webp 828w, /_astro/37.BnZRWWhq_ZxTCXh.webp 1080w, /_astro/37.BnZRWWhq_qfPXi.webp 1280w, /_astro/37.BnZRWWhq_27AiAr.webp 1668w, /_astro/37.BnZRWWhq_ZewsO0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;一騎打ちでも正常です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38.P9loWQoX_Z1kV0q3.webp&quot; srcset=&quot;/_astro/38.P9loWQoX_Z29gDwf.webp 640w, /_astro/38.P9loWQoX_ypmgx.webp 750w, /_astro/38.P9loWQoX_1nmkBX.webp 828w, /_astro/38.P9loWQoX_Z1Ejazk.webp 1080w, /_astro/38.P9loWQoX_ZF8FCK.webp 1280w, /_astro/38.P9loWQoX_11bKYo.webp 1668w, /_astro/38.P9loWQoX_Z1kV0q3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactory&lt;a href=&quot;#satisfactory&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;3Dな一人称視点でプレイできるオープンワールドの工場建設ゲームです。このゲームのグラフィックも美麗なので、CPUおよびGPUのベンチマークが気になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ノートPC&lt;a href=&quot;#ノートpc-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ノートPCを確認していきます。描画画質は「Ultra」プリセットです。
普通の工場風景の場面だと、FPSは90ぐらいを出せていました。しかし、CPU温度とGPU温度は90度付近を推移していて、常に高温です。GPU使用率はほとんど100%です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51.6VWu1IDb_IpJDi.webp&quot; srcset=&quot;/_astro/51.6VWu1IDb_1bUOhO.webp 640w, /_astro/51.6VWu1IDb_Z1aziIk.webp 750w, /_astro/51.6VWu1IDb_ZlCkmT.webp 828w, /_astro/51.6VWu1IDb_p2zu1.webp 1080w, /_astro/51.6VWu1IDb_1od4qA.webp 1280w, /_astro/51.6VWu1IDb_Z1YDBKc.webp 1668w, /_astro/51.6VWu1IDb_IpJDi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、ガラス張りになっている建物に移動します。描画に負担が掛かると思いましたが、FPSは80以上になって上昇しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/52.C7mCjJG0_Z2h4KhJ.webp&quot; srcset=&quot;/_astro/52.C7mCjJG0_1g18fC.webp 640w, /_astro/52.C7mCjJG0_Z16tYKw.webp 750w, /_astro/52.C7mCjJG0_Zhx1p6.webp 828w, /_astro/52.C7mCjJG0_2tJdmU.webp 1080w, /_astro/52.C7mCjJG0_Z1Bhqur.webp 1280w, /_astro/52.C7mCjJG0_5317H.webp 1668w, /_astro/52.C7mCjJG0_Z2h4KhJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスが立ち込めている場所を移動します。ここでもあまり負担は増えず、FPSは100でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/53.DS_pVIOa_1J1xHj.webp&quot; srcset=&quot;/_astro/53.DS_pVIOa_Zp8RhP.webp 640w, /_astro/53.DS_pVIOa_2ix8uW.webp 750w, /_astro/53.DS_pVIOa_Z1WH1Wy.webp 828w, /_astro/53.DS_pVIOa_1pDny2.webp 1080w, /_astro/53.DS_pVIOa_2oNRuB.webp 1280w, /_astro/53.DS_pVIOa_ZY2NGb.webp 1668w, /_astro/53.DS_pVIOa_1J1xHj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ハイパーチューブで高速で移動してみます。しかしながら、あまりFPSは落ちませんでした。100FPSを出せています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/54.jZsFb2fK_Z281C6V.webp&quot; srcset=&quot;/_astro/54.jZsFb2fK_Z2aOh81.webp 640w, /_astro/54.jZsFb2fK_wQIEL.webp 750w, /_astro/54.jZsFb2fK_1lNH1c.webp 828w, /_astro/54.jZsFb2fK_Z2roMgd.webp 1080w, /_astro/54.jZsFb2fK_Z1seijD.webp 1280w, /_astro/54.jZsFb2fK_e69iv.webp 1668w, /_astro/54.jZsFb2fK_Z281C6V.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に電車で移動してみませいた。パフォーマンスはあまり落ちずに、100FPSを出せています。しかし、チップの温度はここまでずっと高いままでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/55.kZ4dzwBm_ZDoHCS.webp&quot; srcset=&quot;/_astro/55.kZ4dzwBm_28gdGF.webp 640w, /_astro/55.kZ4dzwBm_ZeeTjt.webp 750w, /_astro/55.kZ4dzwBm_zH41W.webp 828w, /_astro/55.kZ4dzwBm_ZWLRMa.webp 1080w, /_astro/55.kZ4dzwBm_1nB9p.webp 1280w, /_astro/55.kZ4dzwBm_1HI3Ly.webp 1668w, /_astro/55.kZ4dzwBm_ZDoHCS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デスクトップPCで確認していきます。
GPU使用率はほとんど100%ですが、GPU温度は60度付近を推移していて正常です。またCPU温度も、他のゲームと比べて高めではありますが、70度付近なので正常な範囲内です。FPSは180出ています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/56.B5_XqlXt_Z2b7JGI.webp&quot; srcset=&quot;/_astro/56.B5_XqlXt_ZcPFva.webp 640w, /_astro/56.B5_XqlXt_2uPkhC.webp 750w, /_astro/56.B5_XqlXt_Z1KoPaS.webp 828w, /_astro/56.B5_XqlXt_Z2uuTQ0.webp 1080w, /_astro/56.B5_XqlXt_Z1vkpTq.webp 1280w, /_astro/56.B5_XqlXt_b01HI.webp 1668w, /_astro/56.B5_XqlXt_Z2b7JGI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ガラス張りになっている建物に移動します。FPSは200出ています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/57.CFaSxksC_1Cc2gE.webp&quot; srcset=&quot;/_astro/57.CFaSxksC_SFOhN.webp 640w, /_astro/57.CFaSxksC_Z1sOiIl.webp 750w, /_astro/57.CFaSxksC_ZDRkmU.webp 828w, /_astro/57.CFaSxksC_1iNR7n.webp 1080w, /_astro/57.CFaSxksC_2hYm3W.webp 1280w, /_astro/57.CFaSxksC_Z15Rk7P.webp 1668w, /_astro/57.CFaSxksC_1Cc2gE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして毒ガスが立ち込めている場所を移動します。FPSは200の周囲です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/58.CK8TLWYY_1TKnYq.webp&quot; srcset=&quot;/_astro/58.CK8TLWYY_zeADB.webp 640w, /_astro/58.CK8TLWYY_Z1Mgwmx.webp 750w, /_astro/58.CK8TLWYY_ZXjy17.webp 828w, /_astro/58.CK8TLWYY_1AndP9.webp 1080w, /_astro/58.CK8TLWYY_Z2uDq2d.webp 1280w, /_astro/58.CK8TLWYY_ZNiXp4.webp 1668w, /_astro/58.CK8TLWYY_1TKnYq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ハイパーチューブで移動します。ドローンが視界に入ると描画情報が増えますが、そのような状態でもFPSは215出ています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/59.BMTXBjQv_2cxnxA.webp&quot; srcset=&quot;/_astro/59.BMTXBjQv_Z2ci3BP.webp 640w, /_astro/59.BMTXBjQv_vnWaW.webp 750w, /_astro/59.BMTXBjQv_1kkUwn.webp 828w, /_astro/59.BMTXBjQv_1Sadoj.webp 1080w, /_astro/59.BMTXBjQv_Z2cQqt3.webp 1280w, /_astro/59.BMTXBjQv_ZvvXPT.webp 1668w, /_astro/59.BMTXBjQv_2cxnxA.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電車で移動します。FPS200超えで、チップの状態にも問題は無さそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/60.Do2f-_NX_Z10fasu.webp&quot; srcset=&quot;/_astro/60.Do2f-_NX_1swFaY.webp 640w, /_astro/60.Do2f-_NX_ZSXrPa.webp 750w, /_astro/60.Do2f-_NX_Z51ttJ.webp 828w, /_astro/60.Do2f-_NX_Z1jCkBL.webp 1080w, /_astro/60.Do2f-_NX_ZkrPFc.webp 1280w, /_astro/60.Do2f-_NX_1lRAVW.webp 1668w, /_astro/60.Do2f-_NX_Z10fasu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Palworld&lt;a href=&quot;#palworld&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パルワールドはアニメ調でオープンワールドなアクションゲームです。なので一見、あまりGPU等には負担が掛からなさそうな気もしましたが、実はこのゲーム、パルが使う技のエフェクトの量が増えると、一気に重たくなるゲームなのです。なので、ベンチマークの測り甲斐があります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップ&lt;a href=&quot;#自作デスクトップ-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;パルワールドはデスクトップPCの性能だけ測りました。描画画質は最高画質です。
落ち着いた場所にいるとFPSは110を超えます。この時のCPU温度は60度、GPU温度は45度ぐらいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/71.dBwxU5P0_mecFX.webp&quot; srcset=&quot;/_astro/71.dBwxU5P0_Z2pUrQW.webp 640w, /_astro/71.dBwxU5P0_hKxUP.webp 750w, /_astro/71.dBwxU5P0_16Hwhg.webp 828w, /_astro/71.dBwxU5P0_2Q2wG.webp 1080w, /_astro/71.dBwxU5P0_121wtg.webp 1280w, /_astro/71.dBwxU5P0_Z2lP9Hw.webp 1668w, /_astro/71.dBwxU5P0_mecFX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次にガラス張りの環境に移動します。FPSが70ぐらいに少し落ちました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/72.17WxUQ-O_JymOm.webp&quot; srcset=&quot;/_astro/72.17WxUQ-O_cUHTJ.webp 640w, /_astro/72.17WxUQ-O_Z29zp6p.webp 750w, /_astro/72.17WxUQ-O_Z1kCqJY.webp 828w, /_astro/72.17WxUQ-O_qbcF5.webp 1080w, /_astro/72.17WxUQ-O_1plGBE.webp 1280w, /_astro/72.17WxUQ-O_Z1XuYz8.webp 1668w, /_astro/72.17WxUQ-O_JymOm.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次にパルが忙しなく働いている場所に移動します。FPSが60ぐらいに落ちました。しかし、CPUおよびGPU使用率にあまり変化はありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/73.BDgOFJvV_27DFUU.webp&quot; srcset=&quot;/_astro/73.BDgOFJvV_Z2ms5h3.webp 640w, /_astro/73.BDgOFJvV_ldUvJ.webp 750w, /_astro/73.BDgOFJvV_1aaSRa.webp 828w, /_astro/73.BDgOFJvV_1NgvLD.webp 1080w, /_astro/73.BDgOFJvV_Z2hK85I.webp 1280w, /_astro/73.BDgOFJvV_ZApFsz.webp 1668w, /_astro/73.BDgOFJvV_27DFUU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、べイントールに乗って高速に移動しました。あまりオブジェクトが無い場所では、FPSは60でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/74.DCdAl6q1_1cy4bC.webp&quot; srcset=&quot;/_astro/74.DCdAl6q1_1mRxul.webp 640w, /_astro/74.DCdAl6q1_ZYCzvN.webp 750w, /_astro/74.DCdAl6q1_ZaFBan.webp 828w, /_astro/74.DCdAl6q1_SaT2l.webp 1080w, /_astro/74.DCdAl6q1_1RlnXU.webp 1280w, /_astro/74.DCdAl6q1_Z1vvicR.webp 1668w, /_astro/74.DCdAl6q1_1cy4bC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、、べイントールでオブジェクトが多い拠点の中を高速で移動しました。FPSは64出たりしてオブジェクトの量によってFPSに差異は殆ど生まれませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/75.5xvfSXnO_2mV5qO.webp&quot; srcset=&quot;/_astro/75.5xvfSXnO_24cyFd.webp 640w, /_astro/75.5xvfSXnO_ZiiykV.webp 750w, /_astro/75.5xvfSXnO_vDp0u.webp 828w, /_astro/75.5xvfSXnO_23xUhx.webp 1080w, /_astro/75.5xvfSXnO_Z22sIzO.webp 1280w, /_astro/75.5xvfSXnO_Zl8gWF.webp 1668w, /_astro/75.5xvfSXnO_2mV5qO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;比較結果&lt;a href=&quot;#比較結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、今回検証したタイトルにおける比較結果です。&lt;/p&gt;






























































































































































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Game&lt;/th&gt;&lt;th&gt;Spec&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Apex Legends&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;230&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cyberpunk 2077&lt;/td&gt;&lt;td&gt;Memory Usage (MB)&lt;/td&gt;&lt;td&gt;20,500&lt;/td&gt;&lt;td&gt;15,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Clock (MHz)&lt;/td&gt;&lt;td&gt;3,000&lt;/td&gt;&lt;td&gt;4,850&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Usage (%)&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Temp (℃)&lt;/td&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Memory Usage (MB)&lt;/td&gt;&lt;td&gt;7,400&lt;/td&gt;&lt;td&gt;9,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;11,502&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Usage (%)&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Temp (℃)&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;53&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;170&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ELDEN RING&lt;/td&gt;&lt;td&gt;Memory Usage (MB)&lt;/td&gt;&lt;td&gt;18,000&lt;/td&gt;&lt;td&gt;15,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Clock (MHz)&lt;/td&gt;&lt;td&gt;4,000&lt;/td&gt;&lt;td&gt;5,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Usage (%)&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Temp (℃)&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Memory Usage (MB)&lt;/td&gt;&lt;td&gt;3,550&lt;/td&gt;&lt;td&gt;6,700&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;5,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Usage (%)&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Temp (℃)&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ghost of Tsushima DIRECTOR’S CUT&lt;/td&gt;&lt;td&gt;Memory Usage (MB)&lt;/td&gt;&lt;td&gt;18,000&lt;/td&gt;&lt;td&gt;17,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Clock (MHz)&lt;/td&gt;&lt;td&gt;3,600&lt;/td&gt;&lt;td&gt;4,925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Usage (%)&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Temp (℃)&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;59&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Memory Usage (MB)&lt;/td&gt;&lt;td&gt;18,500&lt;/td&gt;&lt;td&gt;10,400&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;11,502&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Usage (%)&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Temp (℃)&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;220&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Satisfactory&lt;/td&gt;&lt;td&gt;Memory Usage (MB)&lt;/td&gt;&lt;td&gt;19,000&lt;/td&gt;&lt;td&gt;16,200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Clock (MHz)&lt;/td&gt;&lt;td&gt;3,000&lt;/td&gt;&lt;td&gt;4,925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Usage (%)&lt;/td&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Temp (℃)&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Memory Usage (MB)&lt;/td&gt;&lt;td&gt;4,300&lt;/td&gt;&lt;td&gt;6,583&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;11,502&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Usage (%)&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;97&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Temp (℃)&lt;/td&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;190&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Palworld&lt;/td&gt;&lt;td&gt;Memory Usage (MB)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;15,500&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;5,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Usage (%)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;CPU Temp (℃)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Memory Usage (MB)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;6,600&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Clock (MHz)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;11,502&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Usage (%)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;GPU Temp (℃)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;FPS (-)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、ゲーミングノートPCとゲーミングデスクトップPCで、ゲームを使ったベンチマークを計測しました。やはり、ノートPCは排熱性能がイマイチなので、搭載しているチップの性能を引き出し切れない部分が目立ちました。今回比較したデスクトップPCの方が高性能のチップを積んではいましたが、その点を鑑みたらCPU使用率に関して両者に殆ど差は無く、デスクトップPCの優位性が顕著に現れた結果となりました。しかしながら、ノートPCは持ち運びが出来る利点はあるので、用途に併せてゲーミングPCを選んでいきたいです。
最近（2024年あたりから）販売されるようになってきた「AI PC」も、チップの動き方は実質ゲーミングPCと同じです。本記事は、AIをローカルマシンで使いたい場合の参考にもなったのではないでしょうか。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ガジェット&lt;a href=&quot;#ガジェット&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3Pfiv2t&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;KTC 27インチモニターWQHD (2560x1440) Fast IPS 180Hz 1ms 124%sRGBゲーミングモニター低ブルーライトフリッカーフリーFreeSync &amp;amp; G-Sync対応高輝度300cd/m PS5対応HDMI×2 DP×2 3年保証H27T22S&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3Pfiv2t&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/42ceBiP&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;KTC 27インチ 湾曲ゲーミングモニター WQHD (2560x1440) 180Hz 1ms 5000:1コントラスト比 132%sRGB VAパネル FreeSync &amp;amp; G-Sync対応 HDR10 PS5対応 1500Rカーブ HDMI×2 DP×2 H27S17&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/42ceBiP&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZXPvkU&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZXPvkU&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;デスクトップの排熱が優秀・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;キンキンに冷えています。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>3DMarkに関する情報およびそれに付随する情報をまとめた</title><link>https://endorphinbath.com/posts/3dmark-how-to/</link><guid isPermaLink="true">https://endorphinbath.com/posts/3dmark-how-to/</guid><description>3DMarkに関する情報およびDirectX、Vulkan、Arm、NVIDIA DLSS、AMD FSR、Intel XeSSに関する情報をまとめました。</description><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;長い長いテストだったなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっと情報をまとめますか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3DMarkの情報をまとめたい&lt;a href=&quot;#3dmarkの情報をまとめたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前に、3DMarkを使ってゲーミングPCのベンチマークを計測しました。その際に利用した各種テストに関してまとめようと思って、本記事に情報を載せていきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-vs-pc/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;40万円で手に入れた2つのPCの性能のベンチマークを比較する（第1回：3DMarkとCinebench）&lt;/div&gt;&lt;div&gt;Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのベンチマークを比較した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241113_Eyecatch_01.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3DMarkの各種テスト&lt;a href=&quot;#3dmarkの各種テスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;3DMarkは、PC等のゲーミングデバイスのパフォーマンスを評価するためのベンチマークツールです。UL Benchmarksによって開発されたこのツールは、幅広いテストを提供し、ゲーム、プロレベルのワークロード、そしてそれらを越える様々な用途におけるシステムの能力を測定します。2013年にリリースされた当初，3DMarkにおける大きな目玉は、「マルチプラットフォーム化」でした。そのため、PCに限らず、Android、iOS等のモバイルデバイス向けのテストも備えています。&lt;/p&gt;&lt;p&gt;当初，3DMarkに組み込まれていたテストスイートは，「Ice Storm」、「Cloud Gate」、「Fire Strike」の3種類でしたが、現在（2024-12-08時点）ではDirectX 12の性能をテストする「Steel Nomad」や「Time Spy」、「Speed Way」等の多種多様なベンチマークテストが追加されています。逆に、設計が古くて時代にそぐわなくなった「Ice Storm」や「Cloud Gate」は、そのサポートが終了しています。&lt;/p&gt;&lt;p&gt;3DMarkには、無料版とそれよりも多くのテストを備えた有料版が存在します。現在では、「3DMark Demo」が無料版に応ります。&lt;/p&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;変更前&lt;/th&gt;&lt;th&gt;変更後&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Basic Edition&lt;/td&gt;&lt;td&gt;&lt;strong&gt;3DMark Demo&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3DMark Advanced Edition&lt;/td&gt;&lt;td&gt;&lt;strong&gt;3DMark&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3DMark Professional Edition&lt;/td&gt;&lt;td&gt;&lt;strong&gt;3DMark for Enterprise&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;この記事では、「3DMark」エディションで利用できる様々なテストとその機能について詳しく見ていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Steel Nomad（DirectX 12環境の高負荷ベンチマークテスト）&lt;a href=&quot;#steel-nomaddirectx-12環境の高負荷ベンチマークテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3DMark Steel Nomadは、2024-12-08時点で最新の重量級PCゲームを想定した高性能ゲーミングPC向けのベンチマークです。クロスプラットフォームで、レイトレーシングを使用しない、高性能ゲーミングPC向けのベンチマークです。WindowsではDirectX 12 APIを使用します。&lt;/p&gt;&lt;p&gt;Steel Nomadにはもう少し性能を抑えたPC向けのテストである「3DMark Steel Nomad Light」というテストもあります。このライト版のテストは、軽量PCや高性能Android/iOSデバイス向けに設計されています。Windowsでは標準版と同様にDirectX 12を使用し、解像度を1440p（WQHD画質）に落とし、一部の負荷の高いグラフィクス技術を削減することで、より幅広いシステムに対応しています。&lt;/p&gt;&lt;p&gt;ちなみに、Steel Nomadには「エクスプローラーモード」というものも実装されており、ベンチマークを測る際に使用されるシーンを自由に探索できます。グラフィック設定を変更してビジュアルへの影響を確認したり、自由にカメラアングルを調整してスクリーンショットを撮ったり、隠された秘密を探したりして、Steel Nomadの世界を楽しむことが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Steel Nomad Stress Test（高負荷ストレステスト）&lt;a href=&quot;#steel-nomad-stress-test高負荷ストレステスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Steel Nomadには、長時間の負荷をPCに与え続けてそのパフォーマンスを測定する「ストレステスト」というものも存在します。&lt;/p&gt;&lt;p&gt;このテストでは、20分間の連続実行で、長時間のゲーミングセッションにおけるPCの安定性を確認できます。フレームレートの安定性だけでなく、コンポーネントの温度やクロック周波数の変化もグラフとして結果に提供されるため、冷却性能などの問題点を早期発見することができます。&lt;/p&gt;&lt;p&gt;実行前には、システムを冷却しておくことを忘れないように気を付けます。そうしないと、ベンチマークを測るゲーミングPCの本来のストレス耐性を測定することが出来ません。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows - 3DMark Steel Nomad システム要件&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OS&lt;/strong&gt;: Windows 11またはWindows 10、64ビット（バージョン21H2）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プロセッサ&lt;/strong&gt;: SSSE3対応の1.8 GHzデュアルコア&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;システムメモリ&lt;/strong&gt;: 8 GB RAM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;グラフィックス&lt;/strong&gt;: DirectX 12機能レベル12.0対応のGPUおよびシェーダーモデル6.0&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;グラフィックスメモリ&lt;/strong&gt;: 6 GB VRAM *&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ストレージ&lt;/strong&gt;: 1.4 GBの空き領域（&lt;strong&gt;Steel Nomad Light&lt;/strong&gt;と共有）&lt;/li&gt;
&lt;li&gt;統合GPUを搭載したシステムの場合、統合GPUはシステムRAMを共有するため、少なくとも16 GBのシステムRAMが必要です。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Windows - 3DMark Steel Nomad Light のシステム要件&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;OS: Windows 11 または Windows 10（64ビット版）（バージョン21H2）&lt;/li&gt;
&lt;li&gt;プロセッサ: SSSE3対応のデュアルコア1.8 GHz&lt;/li&gt;
&lt;li&gt;メモリ: 8GB RAM&lt;/li&gt;
&lt;li&gt;グラフィックス: DirectX 12機能レベル12.0対応GPUおよびシェーダーモデル6.0&lt;/li&gt;
&lt;li&gt;グラフィックスメモリ: 4 GB VRAM&lt;/li&gt;
&lt;li&gt;ストレージ: 空き容量1.4 GB（Steel Nomadと共有）&lt;/li&gt;
&lt;li&gt;統合GPUを搭載したシステムの場合、iGPUがシステムRAMを共有するため、少なくとも8GBのシステムRAMが必要です。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Steel Nomad のテスト構成&lt;/strong&gt;&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Steel Nomad&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows、Windows on Arm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;DirectX 12またはVulkan 1.1をサポートする高性能ゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能を測定するグラフィックステスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;DirectX 12（フィーチャレベル12）またはVulkan 1.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;3840 × 2160&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Steel Nomad Light のテスト構成&lt;/strong&gt;&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Steel Nomad&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows、Windows on Arm、iOS、Android&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ハイエンド軽量デバイス (Windows、Windows on Arm、iOS、Android搭載)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能を測定するグラフィックテスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 12 feature level 12、Vulkan 1.1、Metal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CPU Profile（CPUのマルチコア性能を評価）&lt;a href=&quot;#cpu-profilecpuのマルチコア性能を評価&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3DMark CPU Profileは、CPUベンチマーキングに別のアプローチを導入します。単一のスコアを生成するのではなく、3DMark CPU Profileは、使用するコア数とスレッド数に応じて、CPUのパフォーマンスがどのように変化し、拡張されるかを示します。&lt;/p&gt;&lt;p&gt;このCPUテストには、スレッディングレベル範囲のCPUパフォーマンスをベンチマークおよび比較するための6つのテストが含まれています。6つのテストそれぞれがスコアを生成します。これらのスコアは、テスト間で比較できます。たとえば、8スレッドスコアと4スレッドスコアを比較できます。スコアが高いほど、CPUが処理を高速に実行したことを示します。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ワークロード&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;マックススレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (使用可能なすべて)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16スレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (16スレッド)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8スレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (8スレッド)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4スレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (4スレッド)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2スレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (2スレッド)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1スレッドテスト&lt;/td&gt;&lt;td&gt;CPUパフォーマンスを測定 (単一スレッド)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Fire Strike（DirectX 11環境のテスト）&lt;a href=&quot;#fire-strikedirectx-11環境のテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Fire Strikeは、DirectX 11環境でのGPUとCPUのパフォーマンスを測定するベンチマークテストです。先程の「Steel Nomad」はDirectX 12環境で行われるテストでした。グラフィックテスト2種類、物理演算テスト1種類、そしてCPUとGPUの両方に負荷を掛ける結合テストの計4種類のテストで構成されています。3DMarkの初期から行えるテストなので、標準のテストのレンダリング解像度はフルHD解像度となっていて若干評価基準が低めです。&lt;/p&gt;&lt;p&gt;また、解像度をWQHD (2560x1440)に引き上げた高解像度版で、よりハイエンドなゲーミングPCの評価を行う「Fire Strike Extreme」というベンチマークテストもあります。さらに、解像度を4K UHD (3840x2160)に引き上げた「Fire Strike Ultra」というものもあります。
&lt;strong&gt;Fire Strike のテスト構成&lt;/strong&gt;&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Fire Strike&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;グラフィックテスト1：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;グラフィックテスト2：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;物理テスト：CPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード4&lt;/td&gt;&lt;td&gt;複合テスト：GPUとCPUの性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 11 (フィーチャーレベル11)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;1920 × 1080&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Fire Strike Extreme のテスト構成&lt;/strong&gt;&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Fire Strike&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;グラフィックテスト1：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;グラフィックテスト2：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;物理テスト：CPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード4&lt;/td&gt;&lt;td&gt;複合テスト：GPUとCPUの性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 11 (フィーチャーレベル11)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 ×1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Fire Strike Ultra のテスト構成&lt;/strong&gt;&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Fire Strike&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ハイエンドゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;グラフィックテスト1：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;グラフィックテスト2：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;物理テスト：CPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード4&lt;/td&gt;&lt;td&gt;複合テスト：GPUとCPUの性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 11 (フィーチャーレベル11)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;3840 x 2160 (4K UHD)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Time Spy（DirectX 12環境のテスト）&lt;a href=&quot;#time-spydirectx-12環境のテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Time Spyは、DirectX 12 APIの機能を計測するベンチマークテストです。Fire Strikeの後継、Steel Nomadの前身のテストです。非同期コンピュート、アダプタの明示的マルチ化、マルチスレッド化などの機能をサポートする純粋なDirectX 12エンジン向けのテストです。2種類のグラフィックテストと1種類のCPUテストで構成されています。&lt;/p&gt;&lt;p&gt;3DMark Time Spyは、AMD、Intel、Microsoft、NVIDIA、およびUL Benchmark Development Programの他のメンバーからの専門家の入力を得て開発されたようです。 DirectX 12のパフォーマンス向上の全てを完全に実現するために、最初から構築された最初のDirectX 12アプリの1つらしいです。&lt;/p&gt;&lt;p&gt;このテストでは、DirectX 12機能レベル11_0が使用されています。 これにより、Time SpyはDirectX 12 APIの最も重要なパフォーマンスの利点を活かし、DirectX 12ドライバー経由でのDirectX 11ハードウェアとの広範な互換性も保証しているようです。この手法は、パフォーマンスと互換性の両方で最良の組み合わせを提供するため、DirectX 12タイトルを開発するゲーム開発者も同様のアプローチを使用しているようです。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Time Spy のテスト構成&lt;/strong&gt;&lt;/p&gt;




































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Time Spy&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;グラフィックテスト1：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;グラフィックテスト2：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;CPUテスト：CPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 12 feature level 11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Time Spy Extreme のテスト構成&lt;/strong&gt;&lt;/p&gt;




































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Time Spy&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;ハイエンドゲーミングPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;グラフィックテスト1：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;グラフィックテスト2：GPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;CPUテスト：CPU性能を測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 12 feature level 11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;3840 x 2160&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Speed Way（DirectX 12 Ultimateとレイトレーシング性能の検証）&lt;a href=&quot;#speed-waydirectx-12-ultimateとレイトレーシング性能の検証&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Speed Wayは、DirectX 12 UltimateとDirectX Raytracingに対応したゲーミングPC向けのベンチマークです。Windows 10および11を実行するリアルタイムレイトレーシングによる反射やグローバルイルミネーションの性能を測定し、そのレイトレーシンググラフィックス技術への対応状況を確認できます。&lt;/p&gt;&lt;p&gt;リアルタイムのグローバルイルミネーションとリアルタイムのレイトレース反射には、DirectX Raytracing Tier 1.1が使用されていて、さらにMesh Shadersのような新しいパフォーマンス最適化も使用しているようです。3DMark Speed Wayは、AMD、Intel、NVIDIA、およびUL Benchmark Development Programの他のメンバーからの専門家の入力のもとで開発されたとのことです。（つまり、3DMarkは各チップ開発企業からのお墨付きを得ているベンチマークソフトでもあるわけですね。）&lt;/p&gt;&lt;p&gt;また、HDR対応のモニターとGPUがあれば、カスタムベンチマーク実行およびインタラクティブモードでHDRを有効にすることができます。&lt;/p&gt;&lt;p&gt;Speed Wayのテスト構成です。&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ベンチマーク&lt;/th&gt;&lt;th&gt;3DMark Speed Way&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;DirectX 12 UltimateおよびDirectX RaytracingをサポートするGPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能を測定するグラフィックテスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 12 feature level 12_2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Night Raid（DirectX 12環境でArm版Windows向けの軽量テスト）&lt;a href=&quot;#night-raiddirectx-12環境でarm版windows向けの軽量テスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Night Raid」は、統合グラフィックスを備えたラップトップ、ノートブック、タブレット、その他のモバイルコンピューティングデバイス用のDirectX 12ベンチマークです。 3DMark Night Raidには、2つのグラフィックテストとCPUテストが含まれています。&lt;/p&gt;&lt;p&gt;そして、このテストは、Armプロセッサをネイティブにサポートしています。そのArm機器を検証する際には、パフォーマンスと機能の両方でPCに近づき、しかもスマートフォンのような長時間のバッテリー持ちと常時接続を実現した新しいデバイスカテゴリ「Always Connected PCs」のパフォーマンスを比較検証できます。そのため、Windows 10 on Armで動作するデバイスからのNight Raidのスコアは、Windows 10を実行する従来のPCからのスコアと比較可能なようです。&lt;/p&gt;&lt;p&gt;Arm版のWindowsとそうではないWindowsのCPUテストの仕様は、以下のように分かれているようです。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows 10を実行するPC（x86/x64）&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Night RaidのCPUテストでは、AVX2（対応する場合）までの高度な命令セット、およびSSSE3コードパスを使用します。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Windows 10 on Armを実行するデバイス（Arm）&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;CPUテストでは、NEON命令セットを使用します。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Night Raidのテスト構成です。&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Night Raid&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;内蔵グラフィックス搭載PC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード1&lt;/td&gt;&lt;td&gt;GPU性能測定（グラフィックテスト1）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード2&lt;/td&gt;&lt;td&gt;GPU性能測定（グラフィックテスト2）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード3&lt;/td&gt;&lt;td&gt;CPU性能測定&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;DirectX 12 feature level 11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;1920 × 1080&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Solar Bay（モバイル環境も考慮したレイトレーシングテスト）&lt;a href=&quot;#solar-bayモバイル環境も考慮したレイトレーシングテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Solar Bayは、レイトレーシング対応のWindowsおよびAndroidデバイス向けのクロスプラットフォームベンチマークです。このテストで、異なるプラットフォーム間で、最新の高性能スマートフォン、タブレット、軽量PCのグラフィックスパフォーマンスをテストおよび比較することが出来ます。&lt;/p&gt;&lt;p&gt;Solar Bayの技術仕様として、以下のグラフィックスAPIが使用されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;グラフィックスAPI：Vulkan 1.1&lt;/li&gt;
&lt;li&gt;レイトレーシング：
&lt;ul&gt;
&lt;li&gt;Windowsデバイス：Vulkanレイトレーシングパイプライン&lt;/li&gt;
&lt;li&gt;Androidデバイス：Vulkanレイトレーシングクエリ&lt;/li&gt;
&lt;li&gt;iOSデバイス：Apple Metal API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Solar Bayのテストには、1分間行われる標準テストと、20分間行われるストレステストの2種類があります。&lt;/p&gt;&lt;p&gt;1分間の標準のベンチマークテストは、レイトレーシングを有効にした状態でのゲームプレイ時のデバイスのパフォーマンスを測定します。レイトレーシングのワークロードは、3つの段階的に負荷の高いセクションに分割されています。このベンチマークの長さは、短時間の活発な活動が繰り返されるモバイルゲームを模しているようです。&lt;/p&gt;&lt;p&gt;20分間行われるストレステストは、長時間のレイトレーシングゲームプレイ時のデバイスのパフォーマンスを示します。長時間のレイトレーシングゲームセッションを模しています。このテストでは、Solar Bay のワークロードを 20 分間ループ実行します。ストレステストの主な結果は、&lt;strong&gt;単一のスコア&lt;/strong&gt;ではなく、&lt;strong&gt;テスト中のデバイスのパフォーマンスの変化を示すグラフ&lt;/strong&gt;です。このグラフは、デバイスが重い負荷下でのパフォーマンスと熱管理をどのように管理するかを理解するのに役立ちます。
Solar Bayのテスト構成です。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Solar Bay&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;対応プラットフォーム&lt;/td&gt;&lt;td&gt;Windows、Android、iOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;スマートフォン、タブレット、ノートPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能を測定するグラフィックテスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;Vulkan 1.1* (Android、Windows)、Metal (iOS)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Port Royal（レイトレーシングと伝統的なレンダリングのテスト）&lt;a href=&quot;#port-royalレイトレーシングと伝統的なレンダリングのテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Port Royalは、リアルタイムレイトレーシングと伝統的なレンダリング技術を組み合わせてGPUパフォーマンスをテストするグラフィックスカードベンチマークです。このテクニックの組み合わせは、ゲームが伝統的なレンダリングを強化するためにレイトレーシングをどのように使用するかを反映しています。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;対応GPUと使用方法&lt;/strong&gt; Port Royalを使用して、以下の条件を満たす任意のグラフィックスカードのリアルタイムレイトレーシングパフォーマンスをテストおよび比較できます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Microsoft DirectX Raytracing&lt;/strong&gt;をサポートする&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;マルチGPUシステム&lt;/strong&gt;も含む（複数のGPUを搭載したシステム）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「リアルタイムレイトレーシング」は、ゲームのレンダリング性能を向上させる技術です。GPUの性能がまだそこまで高くなかった頃は、レイトレーシング技術自体が、リアルタイムで使用するには計算コストが高すぎる代物でした。しかしながら、GPUの性能が向上してくると、このリアルタイムレイトレーシング技術によって、ゲームをレンダリングする際に、レイトレーシングを選択的に使用して、伝統的な技術では達成しづらい反射、影、他の効果を強化できるようになりました。&lt;/p&gt;&lt;p&gt;Microsoft DirectX Raytracingは、開発者がDirectX 12アプリケーションでレイトレーシングを使用できるようにする、DirectXコンポーネントです。詳細については、以下のページで参照できます。&lt;/p&gt;&lt;a href=&quot;https://devblogs.microsoft.com/directx/announcing-microsoft-directx-raytracing/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://devblogs.microsoft.com/directx/wp-content/uploads/sites/42/2024/10/Microsoft-favicon-48x48.jpg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;DirectX Developer Blog&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Announcing Microsoft DirectX Raytracing! - DirectX Developer Blog&lt;/div&gt;&lt;div&gt;If you just want to see what DirectX Raytracing can do for gaming, check out the videos from Epic, Futuremark and EA, SEED. To learn about the magic behind the curtain, keep reading. 3D Graphics is a Lie For the last thirty years, almost all games have used the same general technique—rasterization—to render images on […]&lt;/div&gt;&lt;div&gt;devblogs.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://devblogs.microsoft.com/directx/wp-content/uploads/sites/42/2018/03/epic-raytracing-1024x560.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Port Royalでは、DirectX Raytracingを使用して以下のエフェクトが適切にレンダリング出来ているかどうかを検証します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;反射&lt;/strong&gt;: 正確な視点を持つ実際的なスペキュラ反射（鏡面反射）を生成します。レイトレーシングは、伝統的な技術の限界を克服し、画面外のオブジェクトや他のオブジェクトによって隠されたオブジェクトを正確に反映します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;影&lt;/strong&gt;: ピクセル単位で完璧なハードシャドウ（硬影）をレンダリングします。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Port Royalのテスト構成です。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク&lt;/td&gt;&lt;td&gt;3DMark Port Royal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;対象ハードウェア&lt;/td&gt;&lt;td&gt;DirectXレイトレーシング対応GPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能測定用グラフィックテスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;DirectX 12 フィーチャレベル 12_1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Wild Life（モバイルデバイス向けのクロスプラットフォームテスト）&lt;a href=&quot;#wild-lifeモバイルデバイス向けのクロスプラットフォームテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Wild Life」は、Windows、Android、Apple iOSに対応するクロスプラットフォームベンチマークです。最新のノートパソコン、タブレット、スマートフォンなど、異なるプラットフォーム間で、グラフィックス性能のテストと比較に利用できます。&lt;/p&gt;&lt;p&gt;Wild Lifeのテストでは、1分間行われる標準テストと、20分間行われるストレステストの2種類があります。&lt;/p&gt;&lt;p&gt;1分間行われる標準テストでは、デバイスが短時間に高性能を提供する能力を測定します。短時間の激しい活動に基づくモバイルゲームを模しています。
20分間行われるストレステストでは、テスト中のデバイスのパフォーマンスの変化を示すグラフが主な結果として表示されます。このグラフは、デバイスが重い負荷下でのパフォーマンスと熱管理をどのように管理するかを理解するのに役立ちます。&lt;/p&gt;&lt;p&gt;それらのテスト内で、「無制限モード」を利用することが可能です。無制限モードでは、ベンチマークは固定時間ステップを使用してオフスクリーンで実行されます。無制限モードでは、すべてのデバイスで毎回同じフレームが正確にレンダリングされます。進行状況を示すために、フレームサムネイルが毎回100フレームごとにディスプレイに更新されます。無制限モードを使用すると、 垂直同期、ディスプレイ解像度スケーリング、その他のオペレーティングシステムの要因が結果に影響を与えない状態で、チップ間の比較を実行できます。
Wild Lifeは、以下のプラットフォームおよびグラフィックスAPIを使用します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows PC&lt;/strong&gt;: Vulkan グラフィックスAPI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Androidデバイス&lt;/strong&gt;: Vulkan グラフィックスAPI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iOSデバイス&lt;/strong&gt;: Metal グラフィックスAPI&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「Wild Life Extreme」というテストもあります。以下のデバイスを使用して、そのGPUパフォーマンスをベンチマークできます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Windowsノートブック&lt;/li&gt;
&lt;li&gt;Windows 10 on Armで動作するAlways Connected PC&lt;/li&gt;
&lt;li&gt;M1チップ搭載のApple Macコンピューター&lt;/li&gt;
&lt;li&gt;スマートフォンとタブレット（Android、iOS）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Wild Lifeのテスト構成です。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Wild Life&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;対応プラットフォーム&lt;/td&gt;&lt;td&gt;Android、iOS、Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;対象ハードウェア&lt;/td&gt;&lt;td&gt;スマートフォン、タブレット、ノートPC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;GPU性能を測定するグラフィックテスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;Vulkan 1.1 (Android、Windows)、Metal (iOS)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;2560 × 1440&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Wild Life Extremeのテスト構成です。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ベンチマーク名&lt;/td&gt;&lt;td&gt;3DMark Wild Life&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Android, iOS, Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;WindowsノートPC、Arm搭載常時接続PC、M1チップ搭載Apple Mac、次世代スマートフォン/タブレット&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワークロード&lt;/td&gt;&lt;td&gt;グラフィックテスト（GPU性能測定）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックAPI&lt;/td&gt;&lt;td&gt;Vulkan 1.1 (Android, Windows)、DirectX 12 feature level 11 (Arm搭載Windows 10)、Metal (iOS)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レンダリング解像度&lt;/td&gt;&lt;td&gt;3840 × 2160 (4K UHD)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NVIDIA DLSS feature test（DLSSの効果を数値で確認）&lt;a href=&quot;#nvidia-dlss-feature-testdlssの効果を数値で確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「NVIDIA DLSS feature test」は、DLSS (Deep Learning Super Sampling) のパフォーマンスと画質を数値で確認できるテストです。DLSSを有効・無効にした際のフレームレートを比較することで、DLSSによるパフォーマンス向上効果を把握することが出来ます。テストには、DLSS対応のNVIDIA GeForce RTXシリーズグラフィックカードが必要となります。&lt;/p&gt;&lt;p&gt;NVIDIA DLSS feature testを実行するときに、DLSS 1、DLSS 2 または DLSS 3 のいずれかを選択できます。 DLSS 2以上を選択した場合は、さらに 品質 (Quality)、パフォーマンス (Performance)、ウルトラパフォーマンス (Ultra Performance) の 3 つの画像品質モードから選択できます。&lt;/p&gt;&lt;p&gt;テストの実行方法としては、先程紹介した「Port Royal」ベンチマークを2回実行します。1回目の実行時には、DLSSを無効にした状態でベースラインを取得します。2回目実行では、DLSS処理を有効にして実行します。そして、各実行時のフレームレートが結果画面で確認できるわけです。&lt;/p&gt;&lt;p&gt;DLSS (Deep Learning Super Sampling) は、NVIDIAの独自技術です。このテストを実行するには、以下の要件を満たす必要があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DLSS対応のNVIDIAグラフィックスカード&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;GeForce RTXシリーズ&lt;/li&gt;
&lt;li&gt;Quadro RTXシリーズ&lt;/li&gt;
&lt;li&gt;TITAN RTX&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DLSSおよびMicrosoft DirectX RaytracingをサポートするNVIDIAドライバー&lt;/strong&gt;：最新のドライバーをインストールしてください。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;オペレーティングシステム&lt;/strong&gt;：&lt;strong&gt;Windows 10 October 2018 Update (1809)&lt;/strong&gt; 以上が必要です。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NVIDIA DLSS feature testのテスト構成です。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;機能テスト&lt;/td&gt;&lt;td&gt;3DMark NVIDIA DLSS  feature test&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;対象ハードウェア&lt;/td&gt;&lt;td&gt;DirectX RaytracingとDLSSに対応したNVIDIA GPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;DirectX 12 with DirectX Raytracing&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AMD FSR feature test（FSRの効果を数値で確認）&lt;a href=&quot;#amd-fsr-feature-testfsrの効果を数値で確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「AMD FSR feature test」は、特定の技術、機能、または能力を強調するために特別に設計されたテストです。&lt;/p&gt;&lt;p&gt;AMD FSR（FidelityFX Super Resolution）は、AMDのグラフィックス技術で、高度に最適化された空間的および時間的解析技術を使用して、高い視覚的忠実度を維持しながらパフォーマンスを向上させるものです。AMD FSRはオープンソースであり、全てのベンダーの幅広いGPUをサポートしているようです。&lt;/p&gt;&lt;p&gt;AMD FSR feature testは、以下の目的で設計されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;FSRのパフォーマンスをテストする。&lt;/li&gt;
&lt;li&gt;FSRの画像品質をテストする。&lt;/li&gt;
&lt;li&gt;異なる設定や環境でのFSRのパフォーマンスと画像品質を比較する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;AMD FSR（FidelityFX Super Resolution）を利用したこのテストを実行するには、以下の要件を満たすGPUが必要です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Shader Model 6.0以上のサポート&lt;/li&gt;
&lt;li&gt;AMD FSR 2.2以上のサポート&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;AMD FSR feature testのテスト構成です。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;機能テスト&lt;/td&gt;&lt;td&gt;3DMark AMD FSR feature test&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;DirectX 12とAMD FSR 2.2をサポートする最新のGPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;シェーダーモデル6.0対応のDirectX 12&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Intel XeSS feature test（XeSSの効果を数値で確認）&lt;a href=&quot;#intel-xess-feature-testxessの効果を数値で確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Intel XeSS（Xe Super Sampling）は、Intelのグラフィックス技術で、AI強化のスーパーサンプリング（AI-enhanced upscaling）を使用して、高い画像忠実度を維持しながらパフォーマンスを向上させるものです。XeSSは、内部的に低解像度でレンダリングしてパフォーマンスを向上させ、その後、AIによるスーパーサンプリングを使用して、ターゲットディスプレイ解像度での正確な出力を提供します。&lt;/p&gt;&lt;p&gt;Intel XeSS feature testを実行するには、以下の実行要件を満たす必要があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPUの要件&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Intel XeSSのサポート&lt;/li&gt;
&lt;li&gt;Microsoft DirectX Raytracing Tier 1.1のサポート&lt;/li&gt;
&lt;li&gt;対応GPU:
&lt;ul&gt;
&lt;li&gt;Intel Arc GPU&lt;/li&gt;
&lt;li&gt;Shader Model 6.4をサポートするAMD Radeon GPU&lt;/li&gt;
&lt;li&gt;Shader Model 6.4をサポートするNVIDIA GeForce GPU&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSの要件:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11&lt;/li&gt;
&lt;li&gt;Windows 10 (64ビット版): バージョン20H2以降（2020年10月の更新プログラム以降）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Intel XeSS feature testのテスト構成です。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;機能テスト&lt;/td&gt;&lt;td&gt;3DMark Intel XeSS機能テスト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;Windows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットハードウェア&lt;/td&gt;&lt;td&gt;DirectXレイトレーシングとIntel XeSSをサポートする最新のGPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックスAPI&lt;/td&gt;&lt;td&gt;DirectX 12 with DirectX Raytracing&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;各種テストに出てきた単語のまとめ&lt;a href=&quot;#各種テストに出てきた単語のまとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;3DMarkの各種テストに出てきた単語を、以下に一通りまとめてみました。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;DirectX 11とDirectX 12&lt;a href=&quot;#directx-11とdirectx-12&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「DirectX」というのは、Microsoftが開発したゲーム・マルチメディア処理用のAPIの集合体です。Windows、Xbox、Xbox 360、Xbox Oneなどで利用できます。そんなDirectXのバージョン11がDirectX 11で、バージョン12がDirectX 12です。&lt;/p&gt;&lt;p&gt;DirectX 12をフルに活用できると、その分だけGPUの性能を引き出すことが出来て、ゲーミング性能を存分に伸ばすことが可能です。しかし、前身のDirectX 11とは互換性がなく、開発時に考慮しなければならない要素も増えて、開発者が大変になった分、よりグラフィックスの品質が高いゲームを作ることが出来るようになったようです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Direct3D&lt;a href=&quot;#direct3d&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Direct3DはDirectXの一部です。&lt;/p&gt;&lt;p&gt;Direct3Dは、3Dグラフィックスを描画するためのAPIです。マイクロソフトが提供するマルチメディアAPIセットDirectXの一部であり、様々なWindows（主にWindows 95以上）で動作し、さらに、家庭用ゲーム機であるXboxシリーズ（初代Xbox、Xbox 360、Xbox One、Xbox Series X/S）のグラフィックスAPIのベースです。略称として「D3D」がよく使われています。&lt;/p&gt;&lt;p&gt;D3D 12も、D3D 11と比べてより高性能なゲーム開発に寄与しています。「記述子ヒープとテーブル」に関するMicrosoft公式の記事を以下に抜粋します。&lt;/p&gt;&lt;p&gt;Direct3D 11 のリソース バインディングは抽象度が高く使いやすいものですが、最新のハードウェア機能をほとんど活用していません。 Direct3D 11 のゲームでは、リソースの “&lt;em&gt;ビュー&lt;/em&gt;” オブジェクトを作成してから、パイプラインの各種シェーダー ステージにある複数の “&lt;em&gt;スロット&lt;/em&gt;” にそれらのビューをバインドします。 その後、シェーダーが、描画時に固定されるそれらの明示的なバインド スロットからデータを読み取ります。 このモデルでは、ゲームで異なるリソースを使用して描画を行う場合、別のスロットに別のビューをバインドし直してから、描画をもう一度呼び出さなければなりません。 このケースも、最新のハードウェア機能を十分に活用すれば解消できるオーバーヘッドです。&lt;/p&gt;&lt;p&gt;Direct3D 12 では、最新のハードウェアに合わせてバインディングのモデルが変更され、パフォーマンスが大幅に向上しています。 Direct3D 12 ではスタンドアロンのリソース ビューとスロットへの明示的マッピングは不要になり、記述子ヒープが提供されます。このヒープ内で、各ゲームがそれぞれのリソース ビューを作成することになります。 このスキームにより、GPU からハードウェアネイティブのリソース記述 (記述子) をメモリに前もって直接書き込めるメカニズムが実現しました。 特定の描画呼び出しのパイプラインで使用するリソースを宣言するには、ゲームで、記述子ヒープ全体の一部に相当する記述子テーブルを 1 つまたは複数指定します。 記述子ヒープには既に適切なハードウェア固有の記述子データが入力されているので、記述子テーブルの変更は非常に低コストの操作になります。&lt;/p&gt;&lt;p&gt;Direct3D 12 では、記述子ヒープとテーブルによるパフォーマンス強化に加えて、シェーダー内でリソースに対して動的にインデックスを付けられるようになりました。これにより、柔軟性がかつてないほど向上し、新しいレンダリング手法が可能になっています。 一例として、最新の遅延レンダリング エンジンでは、一般的に中間 g バッファーに対して、なんらかのマテリアルまたはオブジェクトの識別子をエンコードします。 Direct3D 11 では、1 つの g バッファーに大量のマテリアルを含めると最終レンダリング パスが大幅に遅くなることがあるため、こうしたエンジンではマテリアルを使用しすぎないように注意する必要があります。 動的にインデックスを付けられるリソースを使用すれば、マテリアルが 1,000 個あるシーンでも、マテリアルが 10 個のシーンと同程度の速さで最終処理できます。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/important-changes-from-directx-11-to-directx-12&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Direct3D 11 から Direct3D 12 への重要な変更点 - Win32 apps&lt;/div&gt;&lt;div&gt;Direct3D 12 は、Direct3D 11 プログラミング モデルからの大幅な逸脱を表します。 Direct3D 12 を使用すると、アプリをこれまで以上にハードウェアに近づけることができます。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Direct3D機能レベル&lt;a href=&quot;#direct3d機能レベル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DirectX 11で導入されたパラダイムがDirect3D機能レベルです。 機能レベルとは、GPUの機能の明確に定義されたセットです。 たとえば、9_1機能レベルはDirectX 9の機能を実装しています。&lt;/p&gt;&lt;p&gt;以下、Direct3D機能レベルのサポートテーブルをMicrosoft公式より抜粋しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;⁰ Direct3D 11.3 または Direct3D 12 ランタイムが必要です。&lt;/li&gt;
&lt;li&gt;¹ Direct3D 11.1 ランタイムが必要です。&lt;/li&gt;
&lt;li&gt;² シェーダー モデル 5.0 は、倍精度シェーダー、拡張倍精度シェーダー、&lt;strong&gt;SAD4&lt;/strong&gt; シェーダー命令、および部分精度シェーダーをオプションでサポートできます。 使用できるシェーダー モデル 5.0 のオプションを判別するには、&lt;strong&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d12/nf-d3d12-id3d12device-checkfeaturesupport&quot; target=&quot;_blank&quot;&gt;ID3D12Device::CheckFeatureSupport&lt;/a&gt;&lt;/strong&gt; を呼び出します。 一部の互換性は、実行しているハードウェアによって異なります。シェーダー モデル 5.1 は、使用されている機能レベルに関係なく、DirectX 12 API をサポートするハードウェアでのみサポートされます。 DirectX 11 ハードウェアは、シェーダー モデル 5.0 までサポートします。 DirectX 12 API は、機能レベル 11_0 にのみダウンします。&lt;/li&gt;
&lt;li&gt;³ これより上位の層はオプションです。&lt;/li&gt;
&lt;/ul&gt;







































































































































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;機能 \ 機能レベル&lt;/th&gt;&lt;th&gt;12_1⁰&lt;/th&gt;&lt;th&gt;12_0⁰&lt;/th&gt;&lt;th&gt;11_1¹&lt;/th&gt;&lt;th&gt;11_0&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;シェーダー モデル&lt;/td&gt;&lt;td&gt;6.0&lt;/td&gt;&lt;td&gt;6.0&lt;/td&gt;&lt;td&gt;6.0/5.1²&lt;/td&gt;&lt;td&gt;6.0/5.1²&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/hardware-support&quot; target=&quot;_blank&quot;&gt;リソース バインディング層&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tier2³&lt;/td&gt;&lt;td&gt;Tier2³&lt;/td&gt;&lt;td&gt;Tier1³&lt;/td&gt;&lt;td&gt;Tier1³&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d12/ne-d3d12-d3d12_tiled_resources_tier&quot; target=&quot;_blank&quot;&gt;タイル リソース&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tier2³&lt;/td&gt;&lt;td&gt;Tier2³&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/conservative-rasterization&quot; target=&quot;_blank&quot;&gt;保守的なラスター化&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tier1³&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;td&gt;いいえ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/rasterizer-order-views&quot; target=&quot;_blank&quot;&gt;ラスタライザー順序指定ビュー&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;td&gt;いいえ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d12/ne-d3d12-d3d12_filter&quot; target=&quot;_blank&quot;&gt;最小/最大フィルター&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;td&gt;いいえ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;既定バッファーのマップ&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/shader-specified-stencil-reference-value&quot; target=&quot;_blank&quot;&gt;シェーダー指定されたステンシル参照値&lt;/a&gt;&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;オプション&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;td&gt;いいえ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/typed-unordered-access-view-loads&quot; target=&quot;_blank&quot;&gt;型指定された順序なしのアクセス ビューの読み込み&lt;/a&gt;&lt;/td&gt;&lt;td&gt;18 個の形式、および追加オプション&lt;/td&gt;&lt;td&gt;18 個の形式、および追加オプション&lt;/td&gt;&lt;td&gt;3 個の形式、および追加オプション&lt;/td&gt;&lt;td&gt;3 個の形式、および追加オプション&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/previous-versions//bb205146(v=vs.85)&quot; target=&quot;_blank&quot;&gt;ジオメトリ シェーダー&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/d3d10-graphics-programming-guide-output-stream-stage&quot; target=&quot;_blank&quot;&gt;ストリーム出力&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/direct3d-11-advanced-stages-compute-shader&quot; target=&quot;_blank&quot;&gt;DirectCompute/計算シェーダー&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/direct3d-11-advanced-stages-tessellation&quot; target=&quot;_blank&quot;&gt;ハル シェーダーおよびドメイン シェーダー&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/overviews-direct3d-11-resources-textures-intro&quot; target=&quot;_blank&quot;&gt;テクスチャ リソース配列&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/overviews-direct3d-11-resources-textures-intro&quot; target=&quot;_blank&quot;&gt;キューブマップ リソース配列&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d10/d3d10-graphics-programming-guide-resources-block-compression&quot; target=&quot;_blank&quot;&gt;BC1 から BC7 への圧縮&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/direct3d11/d3d10-graphics-programming-guide-blend-state&quot; target=&quot;_blank&quot;&gt;Alpha-to-coverage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d11/ns-d3d11-d3d11_feature_data_d3d11_options&quot; target=&quot;_blank&quot;&gt;論理操作 (出力マージャー)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ターゲットに依存しないラスター化&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;いいえ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d11/ns-d3d11-d3d11_feature_data_d3d11_options&quot; target=&quot;_blank&quot;&gt;ForcedSampleCount 1 による複数のレンダー ターゲット (MRT)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;省略可能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/desktop/api/d3d11/ns-d3d11-d3d11_feature_data_d3d11_options&quot; target=&quot;_blank&quot;&gt;UAV 専用レンダリングの最大強制サンプル カウント&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大テクスチャ次元&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大キューブマップ次元&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大ボリューム範囲&lt;/td&gt;&lt;td&gt;2048&lt;/td&gt;&lt;td&gt;2048&lt;/td&gt;&lt;td&gt;2048&lt;/td&gt;&lt;td&gt;2048&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大テクスチャ反復&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大異方性&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大プリミティブ カウント&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大頂点インデックス&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;td&gt;2^32 – 1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大入力スロット&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;同時レンダー ターゲット&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オクルージョン クエリ&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;個別アルファ ブレンド&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1 回のミラー&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;頂点要素のオーバーラップ&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;非依存書き込みマスク&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;インスタンス化&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;td&gt;はい&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/direct3d12/hardware-feature-levels&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ハードウェア機能レベル - Win32 apps&lt;/div&gt;&lt;div&gt;11\_0 から 12\_1 のハードウェア機能レベルの機能について説明します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Arm&lt;a href=&quot;#arm&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Armプロセッサは、Arm Holdings（イギリスの半導体デザイン会社）が設計したCPU（中央処理装置）のアーキテクチャー（設計方式）に基づくマイクロプロセッサです。Armプロセッサは、主にモバイルデバイス（スマートフォン、タブレット）、エンベデッドシステム（組み込みシステム）、サーバー、パーソナルコンピューターなどで使用されています。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Armプロセッサの特徴&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;低消費電力&lt;/strong&gt;: Armプロセッサは、低消費電力で高性能を実現するように設計されています。これは、バッテリー駆動のモバイルデバイスに適しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ライセンスモデル&lt;/strong&gt;: Arm Holdingsは、Armプロセッサの設計をライセンス提供するビジネスモデルを採用しています。つまり、Armプロセッサを製造したい会社は、Arm Holdingsからライセンスを取得する必要があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多種多様な製品&lt;/strong&gt;: Armプロセッサは、さまざまな製品に使用されています。例えば、AppleのM1チップ、サムスンのExynosチップ、QualcommのSnapdragonチップなど。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RISCアーキテクチャー&lt;/strong&gt;: Armプロセッサは、RISC（Reduced Instruction Set Computing）アーキテクチャーを採用しています。RISCアーキテクチャーは、命令セットを簡素化することで、高速化と低消費電力を実現します。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Armプロセッサを使用する主なデバイス&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;スマートフォン&lt;/strong&gt;: 大多数のスマートフォンがArmプロセッサを使用しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;タブレット&lt;/strong&gt;: タブレットもArmプロセッサを使用しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;エンベデッドシステム&lt;/strong&gt;: 組み込みシステム（例：家電、自動車の電子制御装置など）で広く使用されています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;サーバー&lt;/strong&gt;: Armプロセッサを使用したサーバーも増えています。特に、低消費電力が求められるデータセンター向けに注目されています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;パーソナルコンピューター&lt;/strong&gt;: Armプロセッサを使用したパーソナルコンピューター（例：AppleのM1 Mac）も登場しています。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Armプロセッサを搭載したWindowsと、それを搭載していないWindowsではその挙動が異なります。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ハードウェアアーキテクチャー&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載したWindows&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;プロセッサアーキテクチャー: Arm (ARMv8-A、ARMv9-Aなど)&lt;/li&gt;
&lt;li&gt;プロセッサ例: Qualcomm Snapdragon 8cx、Microsoft SQ1、Apple M1 (Windows 11 on Armに対応予定)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載していないWindows (x86/x64)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;プロセッサアーキテクチャー: x86 (Intel、AMD)&lt;/li&gt;
&lt;li&gt;プロセッサ例: Intel Core i5/i7、AMD Ryzen 5/7
&lt;strong&gt;ソフトウェアの互換性&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載したWindows&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ネイティブアプリ: Arm用にコンパイルされたWindowsアプリのみ動作&lt;/li&gt;
&lt;li&gt;x86/x64アプリのエミュレーション: 一部のx86/x64アプリをエミュレーションで動作（パフォーマンス劣化の可能性あり）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載していないWindows (x86/x64)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ネイティブアプリ: x86/x64用にコンパイルされたWindowsアプリが動作&lt;/li&gt;
&lt;li&gt;Armアプリは動かせない。エミュレーションも不可。
&lt;strong&gt;パフォーマンスと消費電力&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載したWindows&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;消費電力: 一般的に低消費電力&lt;/li&gt;
&lt;li&gt;パフォーマンス: Armプロセッサの性能により、x86/x64と比べて一部のタスクで劣る場合あり。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Armを搭載していないWindows (x86/x64)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;消費電力: 一般的に高消費電力&lt;/li&gt;
&lt;li&gt;パフォーマンス: x86/x64プロセッサの性能により、Armプロセッサと比べて多くのタスクで優れる場合あり。
&lt;strong&gt;その他の違い&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;デバイスの種類&lt;/strong&gt;: Armを搭載したWindowsは、主にモバイルデバイス（タブレット、2-in-1、軽量ノートブック）で使用される傾向があります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ドライバーのサポート&lt;/strong&gt;: Arm用のデバイスドライバーがすべて用意されているわけではないため、ハードウェアの完全なサポートに限界がある場合あります。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Vulkan&lt;a href=&quot;#vulkan&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Vulkanは、高効率でクロスプラットフォーム対応のGPUアクセスを実現する、次世代のグラフィックスおよびコンピュートAPIです。業界唯一のオープン標準モダンGPU APIであるVulkanは、開発者が複数の異なるプラットフォームで動作するアプリケーションを書くことを可能にします。Vulkanには、レイトレーシングを含む最新のグラフィックス技術が含まれており、以下のNVIDIA製品で使用可能です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WindowsおよびLinux&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;NVIDIA GeForce（ゲーミング用途のGPU。）&lt;/li&gt;
&lt;li&gt;NVIDIA RTX（「GeForce RTX」とは少し違う。最近は主にAI用途に使用されるGPU。）&lt;/li&gt;
&lt;li&gt;NVIDIA Quadro（「NVIDIA RTX」の前身。プロフェッショナルビジュアライゼーション用途のGPUだった。つまり、「NVIDIA RTX」でもAutodesk MayaとかMaxon Cinema 4Dがゴリゴリ使えるということですね。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AndroidまたはLinux&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;NVIDIA SHIELD（Android、テレビ等に入っているチップ。ちなみにNVIDIAが2013年に発売したゲーム端末の名前が「NVIDIA SHIELD Portable」だったらしい。）&lt;/li&gt;
&lt;li&gt;NVIDIA Jetson（組み込みコンピューティングプラットフォーム。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NVIDIA公式のVulkanに関するページです。&lt;/p&gt;&lt;a href=&quot;https://developer.nvidia.com/vulkan&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developer.nvidia.com/assets/favicon-81bff16cada05fcff11e5711f7e6212bdc2e0a32ee57cd640a8cf66c87a6cbe6.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA Developer&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Vulkan Modern GPU API&lt;/div&gt;&lt;div&gt;Enable developers to write apps that are portable to multiple diverse platforms.&lt;/div&gt;&lt;div&gt;developer.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/Vulkan_Logo-1200x630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;TAA（Temporal Anti-Aliasing）&lt;a href=&quot;#taatemporal-anti-aliasing&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Temporal Anti-Aliasing＝「TAA」という技術を利用することが出来ます。TAAは、多くのゲームで使用されている人気のあるアンチエイリアシング技術で、エイリアシング問題を解決するために、時間的に複数のサンプルを蓄積します。単一のフレームにさらにサンプルを追加するのではなく、レンダリングされたフレームにわずかなジッターを加え、現在のサンプルを前のフレームからの対応するサンプルと組み合わせます。これにより、サンプリングレートが直接増加します。ただし、TAAは、点滅もしくはチラつき（Flickering）やゴーストイング（Ghosting）のアーティファクトに悩まされます。これらのアーティファクトは、動的なシーンではより目立ちます。&lt;/p&gt;&lt;p&gt;エイリアシング（Aliasing）とは、ジャギーな線上のサンプル数を増やして、レンダリングされる線が滑らかになります。「ジャギー」は、リアルタイムコンピューターグラフィックスにおける一般的な現象で、シーン内のオブジェクトの端に現れる、目に付きやすいギザギザした線を指します。画像全体の解像度を上げることは常に実用的ではないため、一般的な解決方法は、ジャギーな線上のサンプル数を増やすことです。これにより線が滑らかになります。ジャギーな線の色を近くのピクセルの色と知的にブレンドする多くの技術が開発されてきましたが、ほとんどの場合、細部の詳細が失われる結果になります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NVIDIA DLSS&lt;a href=&quot;#nvidia-dlss&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NVIDIA DLSS (Deep Learning Super Sampling) は、NVIDIA独自のRTXグラフィックス技術の一つです。DLSSは、ディープラーニングとAIを活用して、ゲームのパフォーマンスを向上させながら、視覚的な品質を維持します。&lt;/p&gt;&lt;p&gt;DLSSを開発するために、NVIDIAの研究者は、ニューラルネットワークを画像内のジャギーなエッジを検出し、各ピクセルの最適な色を決定し、スムーズなエッジと高品質な画像を作成するために適切な色を適用するように訓練しました。他の抗エイリアシング手法よりも、高品質な抗エイリアシングを実現しながら、より少ないアーティファクトと高いパフォーマンスを提供します。DLSSはTAAと比較して、時間的に安定したシャープな画像を生成します。このアンチエイリアシング技術は、他のTAAやTTAAU（テンポラル・アンチエイリアシング・アップサンプリング）よりも細部の解像度が高く描けます。&lt;/p&gt;&lt;p&gt;DLSSの動作原理としては、深層ニューラルネットワークを使用してレンダリングされたシーンの多次元特徴を抽出し、複数フレームからの詳細を智能的に組み合わせて、高品質な最終画像を構築します。このアプローチにより、NVIDIA RTX GPUはレンダリングに必要なサンプル数を減らし、AIを使用して最終画像の情報を補完できます。結果として、従来のレンダリングと同等の品質ながら、高パフォーマンスを実現した、クリアでシャープな画像が得られます。DLSS 2は、オリジナルのDLSSを改良したバージョンで、オリジナルよりも高いパフォーマンスと画像品質を提供することを目指しています。&lt;/p&gt;&lt;p&gt;オリジナルのDLSSバージョンでは、サポート対象の各タイトルから特定のデータを抽出し、AIネットワークを訓練する必要がありました。一方、DLSS 2では、ワークロードからの入力が必要なく、ゲームを横断して動作する汎用ネットワークを提供します。&lt;/p&gt;&lt;p&gt;DLSSバージョン3.0では、動き補間を導入し、画像生成アルゴリズムが2つの連続した画像を使い、その間に3つ目の画像を生成することで、動きを滑らかにします。これはまた、新しい画像がレンダリングされるたびに、新しい画像が生成されることを意味します。しかし、新世代のオプティカル・フロー・アクセラレータを搭載しているため、当面はRTX 4000シリーズのグラフィックスカード専用となります。&lt;/p&gt;&lt;p&gt;DLSS 3はまた、GPUとCPUを同期させるNVIDIA Reflexを組み込んでおり、最適な応答性と低いシステムレイテンシを保証します。DLSS 3は、ネイティブと比較した場合、レイテンシを最大2倍削減することができます。(NVIDIA Relfexサブ機能はGTX 900シリーズ以降で動作します)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DLSSのバージョン履歴&lt;/strong&gt;
バージョン1.0：2つのゲームしかサポートされていないRTX 20シリーズの特徴として、DLLSの最初のイテレーションは、各ゲームごとに独立した特定のAIトレーニングを必要とします。
バージョン1.9または1.bis：このメジャーアップデートでは、テンソルコアへのDLSSの割り当てが、CUDAコアシェーダーへの割り当てに置き換えられました。
バージョン2.0：TAAUのAIアクセラレーションバージョン。テンソルコアを使用し、あらゆるゲームに汎用的な方法で学習させる。
バージョン3.0：従来のバージョンにオプティカルフロー画像生成アルゴリズムを追加し、リフレッシュレートを2倍に向上（RTX 40シリーズでのみ使用可能）。
バージョン3.5：様々なアルゴリズムを、バージョン3.0の5倍のデータセットで訓練された単一のAIモデルに置き換えることで、光線再構成を追加。300以上のゲームがDLSSをサポートしており、毎月増加しています。&lt;/p&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/technologies/dlss/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NVIDIA&lt;/span&gt;&lt;/div&gt;&lt;div&gt;NVIDIA DLSS 4 テクノロジ&lt;/div&gt;&lt;div&gt;最高のスピード。優れたビジュアル。AI が与えるそのパワー。&lt;/div&gt;&lt;div&gt;www.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/ada/technologies/dlss/geforce-dlss4-og-1200x630@2x.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AMD FSR&lt;a href=&quot;#amd-fsr&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;AMD FSR（FidelityFX Super Resolution）は、AMDのグラフィックス技術で、高度に最適化された空間的および時間的解析技術を使用して、高い視覚的忠実度を維持しながらパフォーマンスを向上させるものです。&lt;/p&gt;&lt;p&gt;「TAA」のエイリアシング技術を利用することが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高解像度レンダリングの代替技術:&lt;/strong&gt;: FSRは、ネイティブ解像度よりも低い解像度でゲームをレンダリングし、高度なアップスケーリングアルゴリズムを使用して、高解像度のように見せる技術です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;フレーム補間による高フレームレート:&lt;/strong&gt;: 2つの連続するフレーム間の動きを分析し、新しいフレームを生成することで、高フレームレートを実現できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;幅広いハードウェア対応:&lt;/strong&gt;: 様々なGPU（AMD、NVIDIA、Intelなど）や、DirectX 12 APIをサポートしているため、多くのユーザーが利用可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;レイトレーシング性能を向上:&lt;/strong&gt;: 様々なGPU（AMD、NVIDIA、Intelなど）や、DirectX 12 APIをサポートしているため、多くのユーザーが利用可能です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;オープンソース:&lt;/strong&gt;: ソースコードが公開されているため、開発者は自由にFSRをカスタマイズしたり、統合したりすることができます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;複数の品質レベルの提供:&lt;/strong&gt;: 画質とパフォーマンスのバランスを調整できる複数の品質プリセット（Ultra Quality、Quality、Balanced、Performance、Ultra Performance）を提供しています。 ユーザーは自分のシステムと好みに最適な設定を選択できます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;低オーバーヘッド:&lt;/strong&gt;: パフォーマンスへの影響を最小限に抑えながら、高画質を実現することに重点を置いています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;レイテンシの低減:&lt;/strong&gt;: フレームレートの向上だけでなく、レイテンシの低減にも貢献します。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;FSR 3では、前世代のFSR 2.xよりも高品質で、より少ないアーティファクトの画像生成を可能にする改良が加えられているそうです。FSR 2と同様にモーションベクトルを使用しています。また、2つの連続するフレーム間の動きを分析し、新しいフレームを生成することで、フレームレートを効果的に倍増します。これにより、滑らかな動きと高いフレームレートを実現します。そんなFSR3によるフレーム生成は常に新しいゲームに追加されています。&lt;/p&gt;&lt;p&gt;ところが、特定のタイトルに限り、FSRの登場以前に発売されたか、この技術に対応していないものがあります。これらに対応するために、よりたくさんのゲームに適用するAMD Fluid Motion Frames1 (AFMF) と呼ばれるドライバー機能をAMDは持っています。&lt;/p&gt;&lt;p&gt;AFMFは、FSR3に近いテクノロジーをベースにしていますが、情報量が ゲームに統合されていないため、モーションベクトルを取り込むことができず、UI要素は補間フレームの一部となってしまいます。そのため、ゲームがFSRに対応する場合の使用を推奨しています。ゲームがFSR３に対応していない場合には、AFMFを有効にすることが可能です。&lt;/p&gt;&lt;a href=&quot;https://rog.asus.com/jp/articles/guides/how-to-increase-fps-on-the-rog-ally-with-fsr-3-and-afmf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://rog.asus.com/rog/nuxtStatic/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@ROG&lt;/span&gt;&lt;/div&gt;&lt;div&gt;AMD FidelityFX™ Super Resolution (FSR)とAMD Fluid Motion Frames1 (AFMF)で、ROG AllyのFPSを上げる方法&lt;/div&gt;&lt;div&gt;AMDの最新FSR3とAFMFフレーム生成技術により、ROG AllyのFPSが向上し、ゲームパフォーマンスを高めます。&lt;/div&gt;&lt;div&gt;rog.asus.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://dlcdnrog.asus.com/rog/media/1713911723137.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.amd.com/ja/products/graphics/technologies/fidelityfx/super-resolution.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.amd.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.amd.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.amd.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;XeSS&lt;a href=&quot;#xess&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Intel XeSS（Xe Super Sampling）は、Intelのグラフィックス技術で、AI強化のスーパーサンプリング（AI-enhanced upscaling）を使用して、高い画像忠実度を維持しながらパフォーマンスを向上させるものです。XeSSは、内部的に低解像度でレンダリングしてパフォーマンスを向上させ、その後、AIによるスーパーサンプリングを使用して、ターゲットディスプレイ解像度での正確な出力を提供します。&lt;/p&gt;&lt;p&gt;Intel XeSSでも、「TAA」のエイリアシング技術を利用することが出来ます。また、AIによる追加フレームの生成による高フレームレートと、低レイテンシー、高解像度化を利用できます。&lt;/p&gt;&lt;p&gt;そして、「Endurance Gaming Mode」で、Intel® Arc™ グラフィックス搭載ノートブック PCが、電源に接続されていない場合でも、ゲームをより長くプレイすることができるようです。Performance、Balanced、Efficiencyの 3 つのモードから選択し、FPS を優先して、より臨場感あふれて、より長いセッションでのバッテリー持続時間を実現するみたいです。&lt;/p&gt;&lt;p&gt;Intel XeSSのドライバーを利用できるGPUは、以下のチップのようです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;インテル Arc Alchemist GPU（Arc A770やA750など）&lt;/li&gt;
&lt;li&gt;インテルXe-LP統合グラフィックス&lt;/li&gt;
&lt;li&gt;AMD RX 7000グラフィックス・カード（RDNA 3）&lt;/li&gt;
&lt;li&gt;AMD RX 6000 GPU（RDNA 2）&lt;/li&gt;
&lt;li&gt;Nvidia GTX 10シリーズまたはそれ以降のグラフィックカード（例：RTX 40シリーズ）&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;https://www.corsair.com/jp/ja/explorer/gamer/gaming-pcs/what-is-intel-xess/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://di93cklwx5sfc.cloudfront.net/ww/en/explorer/static/cove/images/corsair_favicon.e47d7675cc27.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@CORSAIR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;インテルXeSSとは？&lt;/div&gt;&lt;div&gt;XeSSは、1080pでレンダリングされたゲームをAIを使って4Kに変換するように設計されています。その仕組みと、どのGPUが対応しているのかを紹介しよう。&lt;/div&gt;&lt;div&gt;www.corsair.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://d1q3zw97enxzq2.cloudfront.net/images/rendering_pipeline_xess4.width-1500.format-webp.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.intel.com/content/www/jp/ja/products/docs/discrete-gpus/arc/software/gaming-technologies.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.intel.com/etc.clientlibs/settings/wcm/designs/intel/default/resources/favicon-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Intel&lt;/span&gt;&lt;/div&gt;&lt;div&gt;インテル® Arc™ グラフィックス・ゲーム・テクノロジー&lt;/div&gt;&lt;div&gt;インテル® Arc™ グラフィックス内の 3 つのゲーム・テクノロジーについて知り、体験を向上できます。&lt;/div&gt;&lt;div&gt;www.intel.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.intel.com/content/dam/www/central-libraries/us/en/images/arc-sigid-dark-standard-jap.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、3DMarkに関する情報およびDirectXやDirect3D、Vulkan、Arm、NVIDIA DLSS、AMD FSR、Intel XeSS等に関する情報をまとめました。
今回の情報は、UL Benchmark公式のページから参考にしました。&lt;/p&gt;&lt;a href=&quot;https://support.benchmarks.ul.com/support/solutions/44000377961&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/2043490145604/fav_icon/RLFQ0tCAGNY0gdB5se6d1AAesJ_9YTSmAg.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;UL Benchmarks&lt;/span&gt;&lt;/div&gt;&lt;div&gt;3DMark&lt;/div&gt;&lt;div&gt;Customer support and online user guides for 3DMark, PCMark, VRMark, Testdriver, and other UL benchmarks.&lt;/div&gt;&lt;div&gt;support.benchmarks.ul.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/2043364111593/logo/m_zaA21sobydvtWKuFe-FlH3G8LX9L2bxA.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;amp;X-Amz-Credential=AKIAS6FNSMY2XLZULJPI%2F20260523%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;amp;X-Amz-Date=20260523T143215Z&amp;amp;amp;X-Amz-Expires=604800&amp;amp;amp;X-Amz-SignedHeaders=host&amp;amp;amp;X-Amz-Signature=df4f558151299a5400d6c53f7e9cee80ca171a32ddb47eaf575b1aa615406817&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;3DMarkには、様々なニーズに対応したベンチマークテストが用意されています。PCの構成や目的、そして知りたい情報に合わせて適切なテストを選択することで、より精度の高い性能評価が可能になります。それぞれのテストの特徴を理解して、ゲーミングPCのポテンシャルを最大限に引き出していきたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;長い長い記事だったなああ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは早くゲームしたいですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud SQL】GolangでDBインスタンスの開始停止をスケジュール実行して節約する</title><link>https://endorphinbath.com/posts/golang-cloud-sql-saving/</link><guid isPermaLink="true">https://endorphinbath.com/posts/golang-cloud-sql-saving/</guid><description>Golangで書いたCloud Run FunctionでCloud SQLインスタンスの起動と停止を行い、Cloud SchedularとPub/Subでスケジュール実行してコスト削減を図ります。</description><pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;1日で250円・・・？！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;1年で91250円・・・！？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なんだこの金額はァァ&lt;a href=&quot;#なんだこの金額はァァ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にCloud SQLにDBインスタンスを作成して数日ぐらい泳がせておきました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-cloudsql-postgresql-notion-page/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する（第1回）&lt;/div&gt;&lt;div&gt;NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241114_Eyecatch-1.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、月初に先月の請求額が届いたので、確認すると・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;504&quot; src=&quot;/_astro/03.tyNM2FYJ_Z14Ib23.webp&quot; srcset=&quot;/_astro/03.tyNM2FYJ_Zst7GD.webp 640w, /_astro/03.tyNM2FYJ_1Feho4.webp 750w, /_astro/03.tyNM2FYJ_klY05.webp 828w, /_astro/03.tyNM2FYJ_Z14Ib23.webp 996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;えっっっ。高すぎない
&lt;img loading=&quot;lazy&quot; width=&quot;503&quot; height=&quot;392&quot; src=&quot;/_astro/04.DjpVFYJN_Z1QIUxu.webp&quot; srcset=&quot;/_astro/04.DjpVFYJN_Z1QIUxu.webp 503w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud SQLの金額が嵩んだ原因&lt;a href=&quot;#cloud-sqlの金額が嵩んだ原因&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事を参考に、Cloud SQLの費用を抑える手段を3つ挙げられました。&lt;/p&gt;&lt;a href=&quot;https://ludwig125.hatenablog.com/entry/2019/05/24/111446&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ludwig125.hatenablog.com/icon/favicon&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;ludwig125のブログ&lt;/span&gt;&lt;/div&gt;&lt;div&gt;CloudSQLを安くするために考えたこと - ludwig125のブログ&lt;/div&gt;&lt;div&gt;無料トライアル期間が終わったのでCloudSQLのマイグレーションをした話 安さを追求したわけではなく、自分なりの妥協点を探っただけ 事象 2019/5/22 CloudSQLに接続できなくなった $ gcloud sql connect myfinance --user=root ERROR: (gcloud.sql.connect) HTTPError 409: The instance or operation is not in an appropriate state to handle the request. GoogleAppEngineのログには以下が出力されていた fail…&lt;/div&gt;&lt;div&gt;ludwig125.hatenablog.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.image.st-hatena.com/image/scale/f465b2e6d9866429e3251fec65dc411f5646fb45/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fuser-images.githubusercontent.com%2F18366858%2F58228105-800e4380-7d68-11e9-817c-acfdf6b932ec.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9&quot; target=&quot;_blank&quot;&gt;インスタンス&lt;/a&gt;のリージョンを安いところにする&lt;/li&gt;
&lt;li&gt;マシンを一番安いものにする&lt;/li&gt;
&lt;li&gt;使わないときは&lt;a href=&quot;http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9&quot; target=&quot;_blank&quot;&gt;インスタンス&lt;/a&gt;を止める&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;DBのインスタンスは基本的に「常にオン」にするか、オフにしたい時に「オフ」にするかしかないようです。まあ実際にDBインスタンスはずっと稼働している状態なんですよね。
&lt;img loading=&quot;lazy&quot; width=&quot;1745&quot; height=&quot;461&quot; src=&quot;/_astro/06.eL2mJL9m_1NwfLL.webp&quot; srcset=&quot;/_astro/06.eL2mJL9m_17xcEu.webp 640w, /_astro/06.eL2mJL9m_eqFsi.webp 750w, /_astro/06.eL2mJL9m_Z1VLCTJ.webp 828w, /_astro/06.eL2mJL9m_1FU2Ho.webp 1080w, /_astro/06.eL2mJL9m_mq2xb.webp 1280w, /_astro/06.eL2mJL9m_SRdmD.webp 1668w, /_astro/06.eL2mJL9m_1NwfLL.webp 1745w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Cloud SQLを使うためにGoogle Compute EngineのAPIを有効化したので、確かに先程のような膨大な金額になることは想像が付くことでしたか・・・。&lt;/p&gt;&lt;p&gt;これは間違いなくテコ入れしなければ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud SQLインスタンスを開始および停止させる&lt;a href=&quot;#cloud-sqlインスタンスを開始および停止させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで今回は、Cloud SQLのDBインスタンスを開始および停止させるCloud Run Functionsを作成して、その関数をPub/SubおよびCloud Schedularでスケジューリング実行させていこうと思います。&lt;/p&gt;&lt;p&gt;このGoogle Cloud公式のガイドを参考にしています。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/blog/ja/topics/developers-practitioners/lower-development-costs-schedule-cloud-sql-instances-start-and-stop&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud 公式ブログ&lt;/span&gt;&lt;/div&gt;&lt;div&gt;開発費用の削減: Cloud SQL インスタンスの起動と停止をスケジュールする | Google Cloud 公式ブログ&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-cloudblog-publish/images/11_-_Developers__Practitioners_a4Y5EGr.max-2600x2600.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;DBのインスタンスを作成する。&lt;a href=&quot;#dbのインスタンスを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは以前の記事で行ったのでそちらを参照。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-cloudsql-postgresql-notion-page/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する（第1回）&lt;/div&gt;&lt;div&gt;NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241114_Eyecatch-1.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;先程見せたようなこんな感じのDBインスタンスが作成されていればOKです。今回はDBMエンジンはPostgreSQLです。
&lt;img loading=&quot;lazy&quot; width=&quot;1745&quot; height=&quot;461&quot; src=&quot;/_astro/06.eL2mJL9m_1NwfLL.webp&quot; srcset=&quot;/_astro/06.eL2mJL9m_17xcEu.webp 640w, /_astro/06.eL2mJL9m_eqFsi.webp 750w, /_astro/06.eL2mJL9m_Z1VLCTJ.webp 828w, /_astro/06.eL2mJL9m_1FU2Ho.webp 1080w, /_astro/06.eL2mJL9m_mq2xb.webp 1280w, /_astro/06.eL2mJL9m_SRdmD.webp 1668w, /_astro/06.eL2mJL9m_1NwfLL.webp 1745w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud SQLインスタンスを開始停止できる権限を設定する。&lt;a href=&quot;#cloud-sqlインスタンスを開始停止できる権限を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、IAM上でCloud SQLインスタンスを開始停止できる権限を設定します。&lt;/p&gt;&lt;p&gt;Google Cloud コンソールの&lt;a href=&quot;https://console.cloud.google.com/iam-admin&quot; target=&quot;_blank&quot;&gt;IAM セクション&lt;/a&gt;に移動し、Cloud Functions で使用される「App Engine デフォルト サービスアカウント」を見つけます。このサービスアカウントのサフィックスは&lt;code&gt;@appspot.gserviceaccount.com&lt;/code&gt;です。鉛筆アイコンをクリックして編集します。
&lt;img loading=&quot;lazy&quot; width=&quot;733&quot; height=&quot;293&quot; src=&quot;/_astro/10.Dx-RYDln_2lqr4K.webp&quot; srcset=&quot;/_astro/10.Dx-RYDln_Z11gnHc.webp 640w, /_astro/10.Dx-RYDln_2lqr4K.webp 733w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;権限の編集&lt;/code&gt;ダイアログ ウィンドウで &lt;code&gt;別のロールを追加&lt;/code&gt;ボタンをクリックします。追加する&lt;code&gt;Cloud SQL 管理者&lt;/code&gt;ロールを選択し、&lt;code&gt;保存&lt;/code&gt;ボタンをクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;164&quot; src=&quot;/_astro/11.DhPLlHs8_SnQjC.webp&quot; srcset=&quot;/_astro/11.DhPLlHs8_SnQjC.webp 532w&quot; /&gt;&lt;/p&gt;&lt;p&gt;IAMを設定したら、サービスアカウントのアドレス（プリンシパル）をメモっておきます。&lt;/p&gt;&lt;p&gt;これから作る関数をデプロイする際に使います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Pub/Subのトピックを作成する。&lt;a href=&quot;#pubsubのトピックを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Cloud Pub/Subのトピックを作成します。&lt;code&gt;トピックを作成&lt;/code&gt;をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;945&quot; height=&quot;493&quot; src=&quot;/_astro/15.BQLf-wvM_Zm0NXD.webp&quot; srcset=&quot;/_astro/15.BQLf-wvM_Z2sDNTW.webp 640w, /_astro/15.BQLf-wvM_Zb3V0B.webp 750w, /_astro/15.BQLf-wvM_1OdCj7.webp 828w, /_astro/15.BQLf-wvM_Zm0NXD.webp 945w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回のトピックIDは&lt;code&gt;DbInstanceMgmt&lt;/code&gt;としておきます。トピックを作成したら、トピックIDをメモっておきます。&lt;/p&gt;&lt;p&gt;これから作る関数をデプロイする際に使います。
&lt;img loading=&quot;lazy&quot; width=&quot;792&quot; height=&quot;563&quot; src=&quot;/_astro/16.Cqi8AOh1_1oa8TS.webp&quot; srcset=&quot;/_astro/16.Cqi8AOh1_Z1uEg0F.webp 640w, /_astro/16.Cqi8AOh1_Z26m9gs.webp 750w, /_astro/16.Cqi8AOh1_1oa8TS.webp 792w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;関数を作成する。&lt;a href=&quot;#関数を作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは早速、関数を作成していきます。言語はGoです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Package p contains a Pub/Sub Cloud Function.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;context&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;encoding/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;log&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;golang.org/x/oauth2/google&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;google.golang.org/api/option&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;google.golang.org/api/sqladmin/v1beta4&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// PubSubMessage is the payload of a Pub/Sub event.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// See the documentation for more details:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PubSubMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;data&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessagePayload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ProcessPubSub consumes and processes a Pub/Sub message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ProcessPubSub&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PubSubMessage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessagePayload&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Unmarshal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Request received for Cloud SQL instance &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt; action: &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;%s&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Create an http.Client that uses Application Default Credentials.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;hc&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DefaultClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;CloudPlatformScope&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Create the Google Cloud SQL service.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WithHTTPClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hc&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Get the requested start or stop Action.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;UNDEFINED&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ALWAYS&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stop&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;NEVER&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Fatal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;No valid action provided.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// See more examples at:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// https://cloud.google.com/sql/docs/sqlserver/admin-api/rest/v1beta4/instances/patch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DatabaseInstance&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sqladmin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Settings&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;ActivationPolicy&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Instances&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Patch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;psData&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Do&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Fatal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;%#v&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ちなみに、上記のコードは参照した公式のガイドと1行だけ違います。以下の行です。&lt;code&gt;sqladmin.New&lt;/code&gt;はdeprecatedでした。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Before&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;service, err := sqladmin.New(hc)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// After&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;service, err := sqladmin.NewService(ctx, option.WithHTTPClient(hc))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;gcloud&lt;/code&gt;でデプロイする場合はこう書きます。（GUIでやる場合は公式のガイドを参照。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudsql-launcher&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--gen2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--runtime=go123&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--region=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_REGION}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--source=.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--entry-point=ProcessPubSub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--trigger-topic=DbInstanceMgmt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--allow-unauthenticated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--timeout=180s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;初めて&lt;code&gt;--trigger-topic&lt;/code&gt;の引数を指定してデプロイするとこのようなメッセージが表示されるかもしれません。その時は「y」を入力しておきます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;API [eventarc.googleapis.com] not enabled on project []. Would you like to enable and retry (this will take a few minutes)? (y/N)?&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;このデプロイするときのサービスアカウントが悩みどころです。なぜなら、サービスアカウントを紐づけられそうなフィールドというか引数が何種類もあるからです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-service-account&lt;/code&gt;: 実行時に関数に関連付けられている IAM サービス アカウントの電子メール アドレス。サービス アカウントは、実行中の関数の ID を表し、関数が持つ権限を決定します。 指定しない場合は、関数はプロジェクトのデフォルトのサービス アカウントを使用します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-run-service-account&lt;/code&gt;: 関数の Cloud Run サービスに関連付けられている IAM サービス アカウントの電子メール アドレス。サービス アカウントは、実行中の関数の ID を表し、関数が持つ権限を決定します。 指定しない場合は、関数は &lt;strong&gt;Compute Engine&lt;/strong&gt; のプロジェクトのデフォルトのサービス アカウントを使用します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-trigger-service-account&lt;/code&gt;: 関数の Eventarc トリガーに関連付けられている IAM サービス アカウントの電子メール アドレス。これは、 &lt;strong&gt;認証された呼び出し&lt;/strong&gt; に使用されます。 指定しない場合は、関数は &lt;strong&gt;Compute Engine&lt;/strong&gt; のプロジェクトのデフォルトのサービス アカウントを使用します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-build-service-account&lt;/code&gt;: &lt;strong&gt;ビルドステップ&lt;/strong&gt; で使用される資格情報となる、IAM サービス アカウント。以下の形式で指定する必要があります。&lt;code&gt;projects/${PROJECT_ID}/serviceAccounts/${ACCOUNT_EMAIL_ADDRESS}&lt;/code&gt;指定しない場合は、関数は &lt;strong&gt;Cloud Build&lt;/strong&gt; のプロジェクトのデフォルトのサービス アカウントを使用します。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回は、&lt;code&gt;--trigger-service-account&lt;/code&gt;を指定することで後続の作業を進めることが出来ました。デプロイした関数が、先程設定したトピックIDとサービスアカウントに紐付いている状態で反映されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/20.D746Bxm3_Z1CknQw.webp&quot; srcset=&quot;/_astro/20.D746Bxm3_2ql548.webp 640w, /_astro/20.D746Bxm3_3OW2Y.webp 750w, /_astro/20.D746Bxm3_RLUop.webp 828w, /_astro/20.D746Bxm3_Z1VHy0N.webp 1080w, /_astro/20.D746Bxm3_ZWx44e.webp 1280w, /_astro/20.D746Bxm3_IMnxU.webp 1668w, /_astro/20.D746Bxm3_Z1CknQw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに&lt;code&gt;gcloud&lt;/code&gt;でCloud Run Functionsをデプロイする際の引数の一覧は、この公式リファレンスで確認することが出来ます。（Cloud Run Functionsは、「今後数か月で、Cloud Functions を Cloud Run UI に統合する予定です。」らしいので、もしかしたらこのサービスアカウントを記入する引数が変わるかもしれません。）&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/functions/deploy&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud functions deploy | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Functionsの関数にPub/Subの権限を追加する&lt;a href=&quot;#cloud-functionsの関数にpubsubの権限を追加する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;関数を作成してコンソール上で確認すると、&lt;code&gt;Eventarcトリガー&lt;/code&gt;のところにこのような注意書きがされていました。
&lt;img loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;778&quot; src=&quot;/_astro/22.BJf5s49Z_ZpRTp0.webp&quot; srcset=&quot;/_astro/22.BJf5s49Z_ZpRTp0.webp 558w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「このプロジェクトのサービスアカウントにロール&lt;code&gt;roles/iam.serviceAccountTokenCreator&lt;/code&gt;が付与されている必要があります。これは後で変更できます。」と記載されていますので、付与しておきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Functions の関数が想定どおりに動作することを確認する&lt;a href=&quot;#cloud-functions-の関数が想定どおりに動作することを確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは関数の挙動を確認します。
Google Cloudのコンソールの&lt;a href=&quot;https://console.cloud.google.com/cloudpubsub&quot; target=&quot;_blank&quot;&gt;Pub/Sub セクション&lt;/a&gt;に移動し、&lt;code&gt;DbInstanceMgmt&lt;/code&gt;トピックを選択します。&lt;code&gt;メッセージをパブリッシュ&lt;/code&gt;ボタンをクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1481&quot; height=&quot;833&quot; src=&quot;/_astro/23.C2bUiELT_n5VrW.webp&quot; srcset=&quot;/_astro/23.C2bUiELT_Z1RvMC8.webp 640w, /_astro/23.C2bUiELT_yTkun.webp 750w, /_astro/23.C2bUiELT_ZL1CX5.webp 828w, /_astro/23.C2bUiELT_SVP5X.webp 1080w, /_astro/23.C2bUiELT_1SPsfP.webp 1280w, /_astro/23.C2bUiELT_n5VrW.webp 1481w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、次の JSON メッセージを貼り付けて、メッセージを公開します。（&lt;code&gt;&amp;lt;your-db-instance-id&amp;gt;&lt;/code&gt;は実際のDBインスタンス名、&lt;code&gt;&amp;lt;your-project-id&amp;gt;&lt;/code&gt;は実際のプロジェクト ID に置き換えます）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Instance&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;your-db-instance-id&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Project&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;your-project-id&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Action&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;stop&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;関数の実行をしばらく待ってからDBインスタンスを見ると、停止していることが確認できました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;518&quot; src=&quot;/_astro/24.C7s106PQ_ZIFWBg.webp&quot; srcset=&quot;/_astro/24.C7s106PQ_2thxOW.webp 640w, /_astro/24.C7s106PQ_ZXiT1J.webp 750w, /_astro/24.C7s106PQ_ZA2hJh.webp 828w, /_astro/24.C7s106PQ_Z21Wzjm.webp 1080w, /_astro/24.C7s106PQ_ZNpxyo.webp 1280w, /_astro/24.C7s106PQ_Zh6rHv.webp 1668w, /_astro/24.C7s106PQ_ZIFWBg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、別の Pub/Sub メッセージをパブリッシュしてインスタンスを起動します。
Cloud Console の&lt;a href=&quot;https://console.cloud.google.com/cloudpubsub&quot; target=&quot;_blank&quot;&gt;Pub/Sub セクション&lt;/a&gt;に移動し、&lt;code&gt;InstanceMgmt&lt;/code&gt;トピックを選択します。[メッセージのパブリッシュ] ボタンをクリックし、次の JSON メッセージを貼り付けます。今回はアクションを&lt;code&gt;start&lt;/code&gt;にします。（&lt;code&gt;&amp;lt;your-db-instance-id&amp;gt;&lt;/code&gt;は実際のDBインスタンス名、&lt;code&gt;&amp;lt;your-project-id&amp;gt;&lt;/code&gt;は実際のプロジェクト ID に置き換えます）。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Instance&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;your-db-instance-id&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Project&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;your-project-id&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Action&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;関数の実行をしばらく待ってからDBインスタンスを見ると、再び開始していることが確認できました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;473&quot; src=&quot;/_astro/31.DNDkZ5IT_ZJERH1.webp&quot; srcset=&quot;/_astro/31.DNDkZ5IT_Z1IrBc3.webp 640w, /_astro/31.DNDkZ5IT_Z1sv8d1.webp 750w, /_astro/31.DNDkZ5IT_Z2uFroO.webp 828w, /_astro/31.DNDkZ5IT_2hppui.webp 1080w, /_astro/31.DNDkZ5IT_Xbzhe.webp 1280w, /_astro/31.DNDkZ5IT_1wtSLI.webp 1668w, /_astro/31.DNDkZ5IT_ZJERH1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Scheduler ジョブを作成する&lt;a href=&quot;#cloud-scheduler-ジョブを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Functions の関数が想定通りに動作することが確認できたので、最後のステップとして、インスタンスを自動的に起動して停止する 2 つの Cloud Scheduler ジョブを作成します。&lt;/p&gt;&lt;p&gt;Cloud Console の&lt;a href=&quot;https://console.cloud.google.com/cloudscheduler/&quot; target=&quot;_blank&quot;&gt;Cloud Scheduler&lt;/a&gt;セクションに移動し、[ジョブのスケジュール設定] ボタンをクリックします。Cloud Schedular APIが有効になっている必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.BCHeYcH9_6KONy.webp&quot; srcset=&quot;/_astro/32.BCHeYcH9_Z1VoHua.webp 640w, /_astro/32.BCHeYcH9_LhiiC.webp 750w, /_astro/32.BCHeYcH9_1AegE3.webp 828w, /_astro/32.BCHeYcH9_ZcBkkI.webp 1080w, /_astro/32.BCHeYcH9_Ly9AQ.webp 1280w, /_astro/32.BCHeYcH9_2sSBe0.webp 1668w, /_astro/32.BCHeYcH9_6KONy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;start-db-instance&lt;/code&gt;という指定したCloud SQLインスタンスを開始するためのジョブを、スケジュール実行できるように作成します。
ジョブを実行するタイミングを指定する&lt;code&gt;頻度&lt;/code&gt;には&lt;code&gt;0 4 * * 0-6&lt;/code&gt;と入力します。これで、ジョブが日曜日から土曜日の毎日午前4時に実行されるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;562&quot; height=&quot;732&quot; src=&quot;/_astro/33.B-Mxohom_ZWr9nz.webp&quot; srcset=&quot;/_astro/33.B-Mxohom_ZWr9nz.webp 562w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ターゲットタイプに&lt;code&gt;Pub/Sub&lt;/code&gt;、そして先程設定したトピックIDを設定して、先程試したDBインスタンス開始用のメッセージと同じものをメッセージ本文に設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;540&quot; src=&quot;/_astro/34.CfLuJdrA_Z1qkDsh.webp&quot; srcset=&quot;/_astro/34.CfLuJdrA_Z1qkDsh.webp 530w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら次に、&lt;code&gt;stop-db-instance&lt;/code&gt;という指定したCloud SQLインスタンスを停止するためのジョブを、スケジュール実行できるように作成します。&lt;/p&gt;&lt;p&gt;ジョブを実行するタイミングを指定する&lt;code&gt;頻度&lt;/code&gt;には&lt;code&gt;0 7 * * 0-6&lt;/code&gt;と入力します。これで、ジョブが日曜日から土曜日の毎日午前7時に実行されるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;543&quot; height=&quot;744&quot; src=&quot;/_astro/35.CZO8tauS_ZNcFOS.webp&quot; srcset=&quot;/_astro/35.CZO8tauS_ZNcFOS.webp 543w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ターゲットタイプに「Pub/Sub」、そして先程設定したトピックIDを設定して、先程試したDBインスタンス停止用のメッセージと同じものをメッセージ本文に設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;542&quot; height=&quot;525&quot; src=&quot;/_astro/36.UDW9zJsM_Z25Ttp5.webp&quot; srcset=&quot;/_astro/36.UDW9zJsM_Z25Ttp5.webp 542w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上の設定が反映されると、2つのジョブスケジュールが作成されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37.BJs2sIjH_Z1y8HvF.webp&quot; srcset=&quot;/_astro/37.BJs2sIjH_2gsVgX.webp 640w, /_astro/37.BJs2sIjH_Z62bJb.webp 750w, /_astro/37.BJs2sIjH_HTLBf.webp 828w, /_astro/37.BJs2sIjH_Z1RvREW.webp 1080w, /_astro/37.BJs2sIjH_ZSlnIn.webp 1280w, /_astro/37.BJs2sIjH_MY3SL.webp 1668w, /_astro/37.BJs2sIjH_Z1y8HvF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、上記の設定で作成したジョブスケジュールと同じものを、&lt;code&gt;gcloud&lt;/code&gt;からでも作成することが出来ます。&lt;/p&gt;&lt;p&gt;こちらはDBインスタンス開始用のジョブスケジュール。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start-{MY_DB_INSTANCE}-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--schedule=&lt;/span&gt;&lt;span&gt;&quot;0 4 * * 0-6&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Trigger Cloud Functions to start Cloud SQL instance.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;{MY_LOCATION}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--time-zone=&lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--topic=DbInstanceMgmt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--message-body=&lt;/span&gt;&lt;span&gt;&quot;{ &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_DB_INSTANCE_ID}&lt;/span&gt;&lt;span&gt;&quot;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;{MY_PROJECT_ID}&lt;/span&gt;&lt;span&gt;&quot;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;こちらはDBインスタンス停止用のジョブスケジュール。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pubsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stop-{MY_DB_INSTANCE}-instance-02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--schedule=&lt;/span&gt;&lt;span&gt;&quot;0 7 * * 0-6&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;Trigger Cloud Functions to stop Cloud SQL instance.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;{MY_LOCATION}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--time-zone=&lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--topic=DbInstanceMgmt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--message-body=&lt;/span&gt;&lt;span&gt;&quot;{ &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Instance&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_DB_INSTANCE_ID}&lt;/span&gt;&lt;span&gt;&quot;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Project&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;{MY_PROJECT_ID}&lt;/span&gt;&lt;span&gt;&quot;, &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;同様に作成できました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38.CFQQzbvt_rY7yT.webp&quot; srcset=&quot;/_astro/38.CFQQzbvt_Z1UHWEt.webp 640w, /_astro/38.CFQQzbvt_LX38j.webp 750w, /_astro/38.CFQQzbvt_1AU1tJ.webp 828w, /_astro/38.CFQQzbvt_8AWpC.webp 1080w, /_astro/38.CFQQzbvt_17Lrmc.webp 1280w, /_astro/38.CFQQzbvt_Z2g5eOA.webp 1668w, /_astro/38.CFQQzbvt_rY7yT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;これでCloud SQLを節約できるはず・・・。&lt;a href=&quot;#これでcloud-sqlを節約できるはず&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;後日、Cloud SQLを節約できているかどうかを確認しました。&lt;/p&gt;&lt;p&gt;おおっ、使用料が減っています！ 1日あたり50円ぐらいに収まりました。（しかし、1日3時間だけの起動でも18,250円か・・・。けっこう掛かるもんなんだな・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;1646&quot; height=&quot;919&quot; src=&quot;/_astro/41.D0XxOkg2_Z80U2H.webp&quot; srcset=&quot;/_astro/41.D0XxOkg2_ZclrDB.webp 640w, /_astro/41.D0XxOkg2_2f4FsT.webp 750w, /_astro/41.D0XxOkg2_ZoW2bY.webp 828w, /_astro/41.D0XxOkg2_1VSeo9.webp 1080w, /_astro/41.D0XxOkg2_Z26WnvB.webp 1280w, /_astro/41.D0XxOkg2_Z80U2H.webp 1646w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Go言語でCloud SQLに作成したDBインスタンスを自動で開始および停止するCloud Run Functionsを実装する手順を紹介しました。&lt;/p&gt;&lt;p&gt;以下、まとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Cloud SQLのDBインスタンスは、基本的にはデフォルトでずーっと稼働している状態になってしまう。なので使用料金が嵩む。&lt;/li&gt;
&lt;li&gt;Cloud Run FunctionsでCloud SQLの稼働の開始および停止を制御できる。&lt;/li&gt;
&lt;li&gt;さらに、Cloud SchedularおよびCloud Pub/Subで、Cloud Run Functionsを自動実行できる。&lt;/li&gt;
&lt;li&gt;Cloud Run Functionsの制御には、「App Engine default service account」に、「Cloud SQL 管理者」ロールを付与する必要がある。&lt;/li&gt;
&lt;li&gt;Cloud FunctionsがCloud Run UI に統合されたら、また何かしらの別の設定が必要になるかもしれない。（2024-12-02時点では不明。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで年に91,250円も払う必要が無くなると思います。早めに気付いて良かったぁぁ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;怖かったぁぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっと使うからクラウドは安くなるんだよな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Chocolate Factory】セーブデータが置いてあるフォルダの場所</title><link>https://endorphinbath.com/posts/chocolate-factory-where-is-savedata/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chocolate-factory-where-is-savedata/</guid><description>ゲーム「Chocolate Factory」のセーブデータがSteamで同期されない問題について、データ保存場所と手動移行方法を解説します。</description><pubDate>Tue, 03 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわぁぁぁ、最初からになった！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Steam管理下のフォルダじゃない・・・？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;セーブデータはどこですか？&lt;a href=&quot;#セーブデータはどこですか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chocolate Factoryで遊んでいたワールドが突如消えた・・・。&lt;/p&gt;&lt;p&gt;というのも、最近PCを新調してそのPCにSteamを入れて、Chocolate Factoryを起動したわけですよ。&lt;/p&gt;&lt;p&gt;しかし・・・、表示されたのは最初に見た、まっさらな風景・・・。
いやいや、さすがにこれはおかしいぞ。&lt;/p&gt;&lt;p&gt;ということで今回は、Chocolate Factoryのワールドのデータを復旧する過程を綴った記事になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Chocolate Factoryのワールドデータの移行方法&lt;a href=&quot;#chocolate-factoryのワールドデータの移行方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;早速、ワールドデータが置いてあるフォルダのパスはここです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\%username%\Saved Games\Chocolate Factory\Saves&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここにある「SaveSlot1」といったように書いてあるフォルダを、古いPCから新しいPCに移動するだけです。「SaveSlot2」とかも場合によってはあるかもしれません。とりあえずそのフォルダを移してChocolate Factoryのゲームを起動すれば移行は完了です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なんでSteamで同期されてないの？&lt;a href=&quot;#なんでsteamで同期されてないの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、Steamには一体何が同期されているのでしょうか？&lt;/p&gt;&lt;p&gt;一応、ゲームを終了した後にクラウドの同期は行われています。&lt;/p&gt;&lt;p&gt;それでは、今度はこのフォルダを覗いてみます。このフォルダはおそらく、実際にSteamに同期されているフォルダだと思われます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Program Files (x86)\Steam\steamapps\common\Chocolate Factory\NewKaragon\Saved\SaveGames&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、そのフォルダの中を見てみると・・・、先程と同じく「SaveSlot1」といったように書いてあるフォルダは存在しているのですが、その中にあるセーブファイルの「更新日時」が、明らかに最近のものではないんですよね。新規でワールドを開始したときの年月日になっているんですよね。&lt;/p&gt;&lt;p&gt;つまり、この最初に作成された初期状態のセーブデータをずーっと、Steamのクラウドに同期し続けていたわけです・・・。
ヤ、ヤバすぎる・・・。このゲーム、ヤバすぎる・・・！&lt;/p&gt;&lt;p&gt;例えば、パルワールドとかの場合、同様にセーブデータがローカルに置いてありますが、&lt;code&gt;steam_autocloud.vdf&lt;/code&gt;というSteamに同期していると思われるファイルがあるんですよね。Chocolate Factoryはそういった同期処理が実装されていないということか・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;コンフィグも移行する。&lt;a href=&quot;#コンフィグも移行する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ワールドデータを同期できたので、次にコンフィグデータも同期したいと思います。&lt;/p&gt;&lt;p&gt;コンフィグ用のセーブデータの場所はここです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Program Files (x86)\Steam\steamapps\common\Chocolate Factory\NewKaragon\Saved\Config\Windows&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここにある&lt;code&gt;GameUserSettings.ini&lt;/code&gt;やら&lt;code&gt;Settings.ini&lt;/code&gt;やらのファイルを古いPCから新しいPCに移せば、コンフィグの内容の移行が完了です。これらのファイルもSteamでは同期されていない・・・。そんなこともあるんですねえ。&lt;/p&gt;&lt;p&gt;マイナーなゲームに関しては、セーブデータを保管しておくことは大事だと学ばされました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01.DF8JVJWF_uXnAN.webp&quot; srcset=&quot;/_astro/01.DF8JVJWF_Z2pDfHh.webp 640w, /_astro/01.DF8JVJWF_i2K5v.webp 750w, /_astro/01.DF8JVJWF_16YIqV.webp 828w, /_astro/01.DF8JVJWF_bAdrw.webp 1080w, /_astro/01.DF8JVJWF_1aKHo6.webp 1280w, /_astro/01.DF8JVJWF_Z2d5XMG.webp 1668w, /_astro/01.DF8JVJWF_uXnAN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;焦った・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;セーブデータ圧縮しといて正解だったな・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Palworld】他人がホストだったマルチのデータを自分のワールドに移行する</title><link>https://endorphinbath.com/posts/palworld-other-hosetd-savedata-to-me/</link><guid isPermaLink="true">https://endorphinbath.com/posts/palworld-other-hosetd-savedata-to-me/</guid><description>他人がホストするマルチプレイのパルワールドのセーブデータを自分のワールドに移行する手順です。 Pythonのインストール、セーブデータの受け取り、JSON形式への変換と編集が必要です。</description><pubDate>Mon, 02 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;移行できるかな～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Steam管理下のフォルダじゃない・・・？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パルワールドのセーブデータを移行したい&lt;a href=&quot;#パルワールドのセーブデータを移行したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パルワールドでマルチプレイをしていたワールドのデータを欲しくなった場合に、そのデータを自分のワールドのものにする方法を紹介します。メリットとしたら、より強いPCをホストにしてパルワールドを遊べるように出来たりしますね。&lt;/p&gt;&lt;p&gt;それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. Python 3.9以上をインストールする。&lt;a href=&quot;#1-python-39以上をインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この方法では、Python 3.9以上をPCに予めインストールしている必要があります。&lt;/p&gt;&lt;p&gt;Pythonの公式サイトや、Microsoftストアからダウンロードしてインストールを済ませます。PATHもちゃんと通しておきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. マルチプレイで使っていたセーブデータを貰う。&lt;a href=&quot;#2-マルチプレイで使っていたセーブデータを貰う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一緒に遊んでいた人からセーブデータを貰います。&lt;/p&gt;&lt;p&gt;以下のパスの配下に格納されているかと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;%localappdata%\Pal\Saved\SaveGames&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. 上書きをするワールドデータを予め作っておく。&lt;a href=&quot;#3-上書きをするワールドデータを予め作っておく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、マルチプレイのセーブデータを上書きするためのワールドを仮で作成しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.CkIVSmt-_OV93k.webp&quot; srcset=&quot;/_astro/11.CkIVSmt-_2baYE6.webp 640w, /_astro/11.CkIVSmt-_Zbk8m3.webp 750w, /_astro/11.CkIVSmt-_CBOYn.webp 828w, /_astro/11.CkIVSmt-_vxXT3.webp 1080w, /_astro/11.CkIVSmt-_1uIsPC.webp 1280w, /_astro/11.CkIVSmt-_Z1S8dla.webp 1668w, /_astro/11.CkIVSmt-_OV93k.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マルチプレイのワールドだったので、念の為マルチプレイをオンにしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.JV8RH4Op_ZbWwVV.webp&quot; srcset=&quot;/_astro/12.JV8RH4Op_2j9BVr.webp 640w, /_astro/12.JV8RH4Op_Z3lv4H.webp 750w, /_astro/12.JV8RH4Op_KAsgI.webp 828w, /_astro/12.JV8RH4Op_ZvkH6d.webp 1080w, /_astro/12.JV8RH4Op_sOLPm.webp 1280w, /_astro/12.JV8RH4Op_2aaesv.webp 1668w, /_astro/12.JV8RH4Op_ZbWwVV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ファストトラベルを適当に解放してパルワールドを終了します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13.C8cUxeEQ_ZPEW7v.webp&quot; srcset=&quot;/_astro/13.C8cUxeEQ_1CPTEO.webp 640w, /_astro/13.C8cUxeEQ_ZIEdlk.webp 750w, /_astro/13.C8cUxeEQ_5hK06.webp 828w, /_astro/13.C8cUxeEQ_Z1a37gM.webp 1080w, /_astro/13.C8cUxeEQ_ZaRCkd.webp 1280w, /_astro/13.C8cUxeEQ_1vrOhV.webp 1668w, /_astro/13.C8cUxeEQ_ZPEW7v.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. 「Level.sav」をpalworld save toolでJSONへ変換する&lt;a href=&quot;#4-levelsavをpalworld-save-toolでjsonへ変換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら、&lt;a href=&quot;https://github.com/cheahjs/palworld-save-tools/releases&quot; target=&quot;_blank&quot;&gt;palworld save tools&lt;/a&gt;をGitHubのリポジトリからダウンロードします。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ダウンロードしたらそのZipを伸長（解凍）します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Level.sav&lt;/code&gt;の変換作業を行いたいのですが、その前に&lt;code&gt;Level.sav.json&lt;/code&gt;が同じフォルダにあった場合は、別の場所に避難させておきます。これから出力するファイルの名前も&lt;code&gt;Level.sav.json&lt;/code&gt;だからです。&lt;/li&gt;
&lt;li&gt;マルチプレイで使っていたセーブデータ&lt;code&gt;Level.sav&lt;/code&gt;を、palworld save tool内にある&lt;code&gt;convert.cmd&lt;/code&gt;へドラッグ・ドロップします。しかし、僕の場合はドロップしても上手く動かなかったので、&lt;code&gt;convert.py&lt;/code&gt;へドラッグ・ドロップしました。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Level.sav.json&lt;/code&gt;が出力されます。今回の変換は30秒ぐらいで終わりました。800MBほどの容量があります。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;code&gt;Level.sav&lt;/code&gt;があるフォルダに、&lt;code&gt;Level.sav.json&lt;/code&gt;が出力されました。
&lt;img loading=&quot;lazy&quot; width=&quot;684&quot; height=&quot;277&quot; src=&quot;/_astro/21.BH4zPZLO_1zURO0.webp&quot; srcset=&quot;/_astro/21.BH4zPZLO_Z2c06Hy.webp 640w, /_astro/21.BH4zPZLO_1zURO0.webp 684w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. 出力された Level.sav.json の編集&lt;a href=&quot;#5-出力された-levelsavjson-の編集&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしたら、出力された&lt;code&gt;Level.sav.json&lt;/code&gt;を編集していきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;今回は編集用のテキストエディタに「サクラエディタ」を使用しようと思ったのです。&lt;/li&gt;
&lt;li&gt;しかし、サクラエディタが落ちてしまったので「Visual Studio Code」でやりたいと思います。（おそらくインストールバージョンを使わなかったのが原因？）&lt;/li&gt;
&lt;li&gt;自分のマルチプレイにおける名前で検索して、自分のuidを特定します。（引き続き同じ人と遊びたい場合は、他の人のuidもメモしておきます。日本語のプレイヤー名は&lt;a href=&quot;https://affi-sapo-sv.com/tools/programming-assistance-tools/utf16-check-tool.php&quot; target=&quot;_blank&quot;&gt;文字変換ツール&lt;/a&gt;で確認します。）&lt;/li&gt;
&lt;li&gt;元のマルチプレイのワールド主だった人のuidを変えます。&lt;code&gt;00000000-0000-0000-0000-000000000001&lt;/code&gt;がそのuidなので、そのuidを&lt;code&gt;12345678-0000-0000-0000-000000000001&lt;/code&gt;とかに全て置換します。（検索すると、10000件以上ヒットします・・・。）&lt;/li&gt;
&lt;li&gt;なので、1個ずつ置換していくしかありません。（ずっと押しっぱなしにしているとエディタがクラッシュする恐れがあるので、5秒ぐらい押しっぱなしにしたら離す、置換したら再び5秒ぐらい押しっぱなしにしたら離す・・・、を繰り返すのが良いかもしれません。）&lt;/li&gt;
&lt;li&gt;所々でファイルを保存しておきます。これ大事です。&lt;/li&gt;
&lt;li&gt;作業が終わったらファイルを保存しておきます。これ大事です。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;111&quot; src=&quot;/_astro/22.BqWFZ0Xb_Z10k4jx.webp&quot; srcset=&quot;/_astro/22.BqWFZ0Xb_Z10k4jx.webp 486w&quot; /&gt;&lt;/p&gt;&lt;p&gt;お疲れ様です。それでは次に・・・、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;今やった全置換の作業を、次は自分がキャラクターに対しても行います・・・。（しかし、ゲストの場合は1800件ぐらいしかないのでご安心を。）&lt;/li&gt;
&lt;li&gt;作業が終わったらファイルを保存しておきます。これ大事です。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. 編集した Level.sav.json を Level.sav へ再変換する&lt;a href=&quot;#6-編集した-levelsavjson-を-levelsav-へ再変換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;palworld save toolのフォルダを開き、編集した&lt;code&gt;Level.sav.json&lt;/code&gt;を&lt;code&gt;convert.cmd&lt;/code&gt;へドラッグ・ドロップします。&lt;/li&gt;
&lt;li&gt;しかし今回もなんか動かないので、コマンドプロンプトを立ち上げて、palworld save toolのディレクトリに移動してから、&lt;code&gt;python convert.py [先程編集したjsonファイルの絶対パス]&lt;/code&gt;を実行します。（※コマンド実行は自己責任でお願いします。）&lt;/li&gt;
&lt;li&gt;処理が進むと、「Level.sav」を上書きするかどうかを聞かれます。上書きで大丈夫ですが、念の為に別の場所に退避しておいてもいいかもしれません。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Are you sure you want to continue? (y/n)&lt;/code&gt;と聞かれるので、yを入力してEnter。&lt;/li&gt;
&lt;li&gt;再変換が始まります。これもまた30秒ぐらいで終わりました。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. プレイヤーデータ.savの編集&lt;a href=&quot;#7-プレイヤーデータsavの編集&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、上記の4～6までの手順と同様の手順で、&lt;code&gt;Player&lt;/code&gt;フォルダにある&lt;code&gt;プレイヤーデータ.sav&lt;/code&gt;をJSONファイルにして、uidを編集して、保存してpalworld save toolでJSONファイルを&lt;code&gt;プレイヤーデータ.sav&lt;/code&gt;に再変換します。&lt;/p&gt;&lt;p&gt;そして、再変換したら、それぞれのファイル名をリネームします。例えば、元々のホストユーザーのプレイヤーデータである&lt;code&gt;00000000000000000000000000000001.sav&lt;/code&gt;は&lt;code&gt;12345678000000000000000000000001.sav&lt;/code&gt;となるようにリネームします。&lt;/p&gt;&lt;p&gt;自分のプレイヤーデータをリネームする場合は、先程編集したuidからハイフンを消して全て大文字にした文字列のファイルが自分のプレイヤーデータです。そのファイルを&lt;code&gt;00000000000000000000000000000001.sav&lt;/code&gt;にリネームします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8. 編集した Level.sav と プレイヤーデータ.sav を仮データへ上書きする&lt;a href=&quot;#8-編集した-levelsav-と-プレイヤーデータsav-を仮データへ上書きする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、先程仮で作成したワールドがあるフォルダに潜ります。おそらくこのフォルダに有るのではないでしょうか。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;%localappdata%\Pal\Saved\SaveGames&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら、そこにある仮で作成ワールドと思われるワールドのフォルダに潜ります。（更新日時などで特定します。）&lt;/p&gt;&lt;p&gt;そこにある&lt;code&gt;Level.sav&lt;/code&gt;と&lt;code&gt;プレイヤーデータ.sav&lt;/code&gt;を、ついさっきまで編集していた同名のファイルで上書きします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9. Palworldを起動する。&lt;a href=&quot;#9-palworldを起動する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;初回起動時は最初に設定したキャラクター名になっていますが、そのデータで起動します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31.DJlr6TgL_1c8VEG.webp&quot; srcset=&quot;/_astro/31.DJlr6TgL_1GRvQd.webp 640w, /_astro/31.DJlr6TgL_ZECB9V.webp 750w, /_astro/31.DJlr6TgL_9jmbu.webp 828w, /_astro/31.DJlr6TgL_RKLvp.webp 1080w, /_astro/31.DJlr6TgL_1QVgrY.webp 1280w, /_astro/31.DJlr6TgL_Z1vUpIN.webp 1668w, /_astro/31.DJlr6TgL_1c8VEG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;色々と処理が走って少しロード完了までに時間がかかります。
そして、無事に起動出来れば変換は完了です！
あれっ、パルスフィアでなんか変なミステリーサークルが出来ていますね・・・。「誰でも拾えるようになるまで　23:59」・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32.DLIBInPD_Z1PnRmA.webp&quot; srcset=&quot;/_astro/32.DLIBInPD_Z2afzkk.webp 640w, /_astro/32.DLIBInPD_xqqss.webp 750w, /_astro/32.DLIBInPD_1mnoNS.webp 828w, /_astro/32.DLIBInPD_Z29L2vR.webp 1080w, /_astro/32.DLIBInPD_Z1aAxzi.webp 1280w, /_astro/32.DLIBInPD_vIT2Q.webp 1668w, /_astro/32.DLIBInPD_Z1PnRmA.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10. ワールド設定を直して再び置換する。&lt;a href=&quot;#10-ワールド設定を直して再び置換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程のミステリーサークルが出来た原因は、ワールド設定で「拠点の作業パル最大数」を増やしておかなかったことが原因でした。そのため、ワールド設定を修正して、再び&lt;code&gt;Level.sav&lt;/code&gt;と&lt;code&gt;プレイヤーデータ.sav&lt;/code&gt;を置換します。&lt;/p&gt;&lt;p&gt;ワールド設定で「拠点の作業パル最大数」および「ギルド毎の拠点最大数」を上限いっぱいにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33.DQcP7esk_1velw4.webp&quot; srcset=&quot;/_astro/33.DQcP7esk_4qa8h.webp 640w, /_astro/33.DQcP7esk_Z2i4WRR.webp 750w, /_astro/33.DQcP7esk_Z1t7Ywr.webp 828w, /_astro/33.DQcP7esk_1bQbmM.webp 1080w, /_astro/33.DQcP7esk_2b1Fjm.webp 1280w, /_astro/33.DQcP7esk_Z1cP0Rq.webp 1668w, /_astro/33.DQcP7esk_1velw4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしてファイルを置換してPalworldを再起動すると、次はしっかり拠点にいる全てのパルが配置されました。ミステリーサークルは出現していません。&lt;/p&gt;&lt;p&gt;これでワールドデータの移行は完了です。マップの進捗などが初期化されてしまいますが、パルを全て引っ越しできたので良しとします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/34.6XevErTm_2cusAf.webp&quot; srcset=&quot;/_astro/34.6XevErTm_Z1xgzL3.webp 640w, /_astro/34.6XevErTm_1apq1J.webp 750w, /_astro/34.6XevErTm_1Ymona.webp 828w, /_astro/34.6XevErTm_1S7iqX.webp 1080w, /_astro/34.6XevErTm_Z2cTlqo.webp 1280w, /_astro/34.6XevErTm_ZvySNf.webp 1668w, /_astro/34.6XevErTm_2cusAf.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、Steam上でもちゃんと同期される。&lt;a href=&quot;#ちなみにsteam上でもちゃんと同期される&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、今回の作業で移行したPalworldのデータがちゃんとSteamに同期されているかどうかを確かめました。つまり、違うPCでSteamからパルワールドをインストールしても、移行したワールドのデータを引き続き使えるのかということです。&lt;/p&gt;&lt;p&gt;結果はイエス、使えます。&lt;/p&gt;&lt;p&gt;以下のフォルダを確認すると、自分の以前のPCにあったデータがあることが確認できました。（他のサーバへゲストとしてログインしていたワールドも同期されていました。）&lt;/p&gt;&lt;p&gt;おそらく、&lt;code&gt;%localappdata%\Pal\Saved\SaveGames&lt;/code&gt;フォルダの中にある&lt;code&gt;steam_autocloud.vdf&lt;/code&gt;というファイルが同期しているんですかねえ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/35.BzwLaqYw_1fNr5n.webp&quot; srcset=&quot;/_astro/35.BzwLaqYw_Z1f7jv3.webp 640w, /_astro/35.BzwLaqYw_1syGhJ.webp 750w, /_astro/35.BzwLaqYw_2hvEDa.webp 828w, /_astro/35.BzwLaqYw_VqgV6.webp 1080w, /_astro/35.BzwLaqYw_1UAKRF.webp 1280w, /_astro/35.BzwLaqYw_Z1sfUj7.webp 1668w, /_astro/35.BzwLaqYw_1fNr5n.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Palworldを快適に&lt;a href=&quot;#palworldを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4f93sC8&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4f93sC8&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3WDMeX7&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;超軽量ワイヤレスゲーミングマウス ATK Blazing Sky F1 Ultimate 重さ約38g 最大ポーリングレート8000Hz F1 ULTIMATE (ホワイト)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3WDMeX7&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49tkLfQ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49tkLfQ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/40Agq6x&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;IODATA モニター MiniLED ゲーミング 27インチ 180Hz 1ms WQHD AHVAパネル 非光沢 広色域 ブラック 無輝点保証対応 (量子ドット/HDR1000/HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-LDQ271JAB&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/40Agq6x&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いやあ長かったな・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作業している間に記事が書き終わっちまったぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>筆者がAmazonブラックフライデー2024で買ったもの</title><link>https://endorphinbath.com/posts/amazon-black-friday-2024-bought/</link><guid isPermaLink="true">https://endorphinbath.com/posts/amazon-black-friday-2024-bought/</guid><description>Amazonブラックフライデー2024で、NAS構築用のPCパーツなど11点を購入しました。 主な購入品は、Western Digitalの4TB内蔵ハードディスク、MSIのMini-ITXマザーボード、AMDのRyzen 5 8500G CPUなどです。</description><pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;安すぎんだろ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;怖いぐらい安いな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Amazonブラックフライデー2024で購入した物たち&lt;a href=&quot;#amazonブラックフライデー2024で購入した物たち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;2024/11/29から（先行セールは11/27から）、2024/12/6までの期間でAmazonブラックフライデーが開催されています。（2024/12/7時点からはされていました。）&lt;/p&gt;&lt;p&gt;今回ブラックフライデーで購入したのはPC・ガジェット関係や日用品など全部で11点です。（ほとんど自作PC用途ですが・・・。）あと、ブラックフライデー直前に購入してしまった3点も紹介します。
それでは見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Western Digital WD Red Plus 内蔵ハードディスク 4TB&lt;a href=&quot;#western-digital-wd-red-plus-内蔵ハードディスク-4tb&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g1cnqm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;【Amazon.co.jp限定】Western Digital ウエスタンデジタル WD Red Plus 内蔵 HDD ハードディスク 4TB CMR 3.5インチ SATA 5400rpm キャッシュ256MB NAS WD40EFPX-AJP エコパッケージ 【国内正規取扱代理店】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g1cnqm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;HDD以外にも外付けSSDなど、ストレージといえばWestern Digital的な節があります。&lt;/p&gt;&lt;p&gt;このWD Red PlusのHDDの4TBのものは、キャッシュが256MBあるものが「WD40EFPX」、128MBのものが「WD40EFZX」、64MBのものが「WD40EFPX」という型番で売られています。
筆者が確認した時の価格は、4TBで16,080円でした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;MOGOOD Micro B to Type C変換アダプター&lt;a href=&quot;#mogood-micro-b-to-type-c変換アダプター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g8Shuo&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;MOGOOD Micro B 3.0アダプタ Micro B to Type C変換アダプター USB3.0 Cメス マイクロBオスアダプタ マイクロB USB Cメスデータアダプタ 外付けハードSSDドライブ デジタルカメラ 電話用マイクロB USB Cデータ充電コンバータアダプタ(1パック)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g8Shuo&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;「Micro B to Type C」・・・？　「Type C to Micro B」な気がするんですけど・・・、まあ出品サイトに書いてある通りに紹介しておきます。&lt;/p&gt;&lt;p&gt;USB Type CメスとUSB Micro Bオスを備えた変換アダプタです。自分が使っている外付けHDDやSSDの中にUSB Micro Bメスでしか繋げられないものがあるので、それらのためだけにケーブルを持つのが嫌になり、このアダプタを購入しました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リヒトラブ キャリングドキュメント A4 6ポケット ブラック&lt;a href=&quot;#リヒトラブ-キャリングドキュメント-a4-6ポケット-ブラック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g2WQGw&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;リヒトラブ キャリングドキュメント スマートフィット A4 6ポケット ブラック A7589-24&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g2WQGw&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;自宅で保管しているガジェットの保証書を、これと同じようなフォルダにまとめていたのですが、ある日保証に必要なシリアルナンバーが書いてある書類が1枚抜け漏れ出ていたので、これはマズイと思いこの商品を購入しました。&lt;/p&gt;&lt;p&gt;これと似たフォルダの他の商品でも多いんですよね、ちょっとした隙間が空いていて同じように抜け漏れ出そうなものが。しかし、このリヒトラブのフォルダであれば大丈夫だと思います。なんなら、既に1点持っていて、細かい書類が漏れていたことはこの執筆時点まで見たことがありません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;MSI MPG B650I EDGE WIFI マザーボード Mini-ITX MB5906&lt;a href=&quot;#msi-mpg-b650i-edge-wifi-マザーボード-mini-itx-mb5906&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4iqGZTQ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;MSI MPG B650I EDGE WIFI マザーボード Mini-ITX MB5906&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4iqGZTQ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;ここから自作臭がしてきます。
これからとうとうNASを導入していくぞということで、そのためのPCのマザボとして購入しました。
筆者が確認した時の価格は、26,980円でした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;M.2からSATA3.0へのアダプタカード&lt;a href=&quot;#m2からsata30へのアダプタカード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3Zx05yW&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;M.2からSATA3.0へのアダプタカード、M.2 M-EKY PCIE3.0からSATAへのアダプタカード、ASM1166 6GbpsPh516スマートインジケータ付き6ポート拡張インターフェイスカード&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3Zx05yW&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;これは特にブラックフライデー価格になっていたわけではありませんでしたが、一緒に買いました。&lt;/p&gt;&lt;p&gt;上記のマザーボードに取り付けて、SATA3.0端子を増設するためのアダプターです。「JMB585チップ」のものを探していたのですが、たまたまこのアダプターに付いている「ASM1166チップ」に辿り着いたので買ってみました。これで果たしてNASを構築できるのだろうか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AMD CPU Ryzen 5 8500G with Wraith Stealth Cooler&lt;a href=&quot;#amd-cpu-ryzen-5-8500g-with-wraith-stealth-cooler&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3OMcDxl&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;AMD CPU Ryzen 5 8500G with Wraith Stealth Cooler AM5 3.5GHz 6コア / 12スレッド 22MB 65W 正規代理店品 100-100000931BOX&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3OMcDxl&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;NAS用PCのCPUとして使うべく買いました。&lt;/p&gt;&lt;p&gt;このブラックフライデーの期間中、同じぐらいの性能を持ったRyzenのCPUと比べて抜きん出て安かったのがこのRyzen 5 8500Gでした。筆者が買った時には既にブラックフライデー価格にはなっていませんでしたが、十分すぎる安値で依然として販売されていました。そりゃあ近々PCを作ろうと思っている人ならば買うしかありませんね。&lt;/p&gt;&lt;p&gt;NAS用としては、このCPUはオーバースペックかもしれません。しかしながら、先程構築しようと思っているNASというのは、「TrueNAS」というシステムで作る予定です。そして、これから長年その「TrueNAS」を運用していく際にあまり世代の低いCPUにすると、そのTrueNASのシステム要件から外れるのが怖くて、世代が新しいものにしました。それにソケットタイプもAM5のものにした方が新しいマザボにも合いますし。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Crucial メモリ 16GB×2枚 DDR5-6000&lt;a href=&quot;#crucial-メモリ-16gb2枚-ddr5-6000&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D8JiLf&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Crucial(クルーシャル) PRO (マイクロン製) デスクトップ用メモリ 16GB×2枚 DDR5-6000 制限付無期限保証 オーバークロック CP2K16G60C36U5B 【国内正規代理店品】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D8JiLf&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;メモリも安すぎる・・・！！&lt;/p&gt;&lt;p&gt;筆者が確認した時の価格は、12,860円でした。いやいや安すぎんだろ。
なんか知りませんがオーバークロックしてあるんですかね？　まあでも、AMD ExpoもIntel XMP 3.0もサポートされているようなので、こんなにも安くなっていたら購入せずにはおられんでしょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;玄人志向 80Plus Gold 400W SFX電源 KRPW-SX400W/90+&lt;a href=&quot;#玄人志向-80plus-gold-400w-sfx電源-krpw-sx400w90&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3VA8hgH&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;玄人志向 80Plus Gold 400W SFX電源 KRPW-SX400W/90+&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3VA8hgH&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;電源ユニットをAmazonで買うとは思わなかった・・・。&lt;/p&gt;&lt;p&gt;以前に別のゲーミング用のPCを自作した時は、電源ユニットをAmazonで買うことはないだろうと思っていたのですが、前言撤回、イイものが売られていました・・・
今度作るPCのケースがSFX対応とのことなので、このSFX規格の電源ユニットを買うことにしました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;BENFEI SATAケーブル 45cm 6セット&lt;a href=&quot;#benfei-sataケーブル-45cm-6セット&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/41qwD04&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;BENFEI SATAケーブル（ストレート型）45 cm 6セット SATA 3 6 Gbpsラッチ付きSSDとHDD増設-ブラック&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/41qwD04&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;NAS自作用に購入しました。内蔵HDDおよび内蔵SSDと、マザボに増設するSATAプラグを繋ぐためのケーブルです。SATA III対応です。
個人的には、1本あたりの値段が、USB Type-C充電ケーブルよりも安いというのが意外でした。こっちの方が送れる情報量が多いのに。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SATA USB 変換ケーブル&lt;a href=&quot;#sata-usb-変換ケーブル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZLlmX0&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;WOSOB SATA USB 変換ケーブル hdd 3.5 usb 2.5/3.5インチ 変換アダプター SSD HDD データ取り出しSATA3 USB 3.0 変換ケーブル UASP対応 高速転送 最大6TB&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZLlmX0&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;SATA端子とUSB端子を繋いでくれるケーブルです。USB 3.0とSATA IIIですと、USB 3.0の方が転送量が少ないのでそっちでボトルネックになります。これを使って、AliExpressから手に入るHDDやSSDの性能テストをする予定です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;エレコム ゲームパッド 有線 Xinput PS系配置&lt;a href=&quot;#エレコム-ゲームパッド-有線-xinput-ps系配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZsvMJF&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;エレコム ゲームパッド 有線 Xinput PS系配置 連射 スティックモード切替 軽量 ブラック JC-GP20SBK&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZsvMJF&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;筆者は少し時間が空いた時に、テトリスをやるわけなんですけど、そのために使っていたDualSenseのRボタンの調子が悪くなってきたので、そろそろ買い替えようと思っていました。でも、DualSenseって高いですよね・・・？&lt;/p&gt;&lt;p&gt;なので、このとても廉価なゲームパッドを購入して、そのDualSenseの代替にならないかどうかを試している最中です。テトリスなのでスティックは全く使いません。ボタンさえ動けばよいのです。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g8SvSg&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ちなみに、XBox系配置のものもあるみたいですよ。&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g8SvSg&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;ちなみにちなみに、USB 3.0にスピーカーを繋いでいる状態で、USB 3.0にこのゲームパッドを繋ぐと、スピーカーが動かなくなったりしました。その場合は、パッドをUSB 2.0に繋いでやると直ったりします。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ブラックフライデーの前に購入してしまった物たち&lt;a href=&quot;#ブラックフライデーの前に購入してしまった物たち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここで、ブラックフライデーに入る前についつい購入してしまった物品を紹介します。くそう、この時全くブラックフライデーのことを確認していませんでした・・・。
それでは見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;USB Type C ケーブル【1.5m 2本】&lt;a href=&quot;#usb-type-c-ケーブル15m-2本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D8XTGn&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;USB Type C ケーブル【1.5m 2本】Baiwwa タイプC ケーブル 急速充電 USB-A to USB-C ケーブル iPhone 16 15 Pro Plus、iPad Pro、Galaxy S22 S21 S20 S10 S9 A22 A21、Xperia、Switch、MacBookその他Android 等機器対応 ブラック&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D8XTGn&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;作業場周りの環境が変わったので、もう少し長い充電ケーブルが欲しくて購入。あと、ケーブルの導線がゴムで覆われているものって、年を経る毎にベタついてきて、臭くなるんですよね。なので、ナイロン製のものである点もこだわりポイントです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Anker PowerPort III 3-Port 65W&lt;a href=&quot;#anker-powerport-iii-3-port-65w&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gtn4li&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Anker PowerPort III 3-Port 65W Pod (USB PD 充電器 USB-A &amp;amp; USB-C 3ポート)【独自技術Anker GaN II採用 / PD対応 / PPS規格対応 / PSE技術基準適合 / 折りたたみ式プラグ】MacBook PD対応Windows PC iPad iPhone Galaxy Android スマートフォン ノートPC 各種 その他機器対応（ブラック）&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gtn4li&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;出力の高い充電器が欲しくて購入。実際のところ、これで2個目です。&lt;/p&gt;&lt;p&gt;最近、供給電力が60W以上無いと充電できないスピーカーを購入したので、もう1個同じ充電器が必要になったというわけです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;fogman S字フック 大きめ&lt;a href=&quot;#fogman-s字フック-大きめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4fiT0YU&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;fogman フック S字フック 金属 おしゃれ 大きめ 汎用フック 金具 ハンガー 10個セット (ブラック)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4fiT0YU&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;今まで、家にある物干し竿の太さに合うS字フックが無くてハンガーで代用していたのですが、そろそろ見栄えの悪さに嫌気が差してその物干し竿の太さでも掛けることが出来るS字フックを購入しました。&lt;/p&gt;&lt;p&gt;そしたら大満足でした。今までハンガーにかけていたバックパックやベルトや帽子などを、S字フックに掛けるようにしたことで、物干し竿全体の外観がスマートになりました。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AliExpressのブラックフライデーで買った物たち&lt;a href=&quot;#aliexpressのブラックフライデーで買った物たち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;何もブラックフライデーが開催されているのはAmazonだけではありません。AliExpressでも開催されていて、いっつも安い一部の商品がさらに安くなっています。（2024/12/7時点からはなっていました。）
性能が本当に大丈夫なのかどうか不安な商品もありますが・・・、それでは見ていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JONSBO-N4 PCケース&lt;a href=&quot;#jonsbo-n4-pcケース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ミニアルミニウム鋼プレート付きミニケース,JONSBO-N4 mm,6つの大きな2つの小さなハードドライブスロット,CPUクーラー用,130&lt;/p&gt;&lt;a href=&quot;https://fr.aliexpress.com/item/1005006064962837.html?src=ibdm_d03p0558e02r02&amp;amp;sk=&amp;amp;aff_platform=&amp;amp;aff_trace_key=&amp;amp;af=&amp;amp;cv=&amp;amp;cn=&amp;amp;dp=&amp;amp;aff_short_key=&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/images/eng/wholesale/icon/aliexpress.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;aliexpress.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;JONSBO N4 Mini NAS boîtier ITX Mini en aluminium avec plaque d&apos;acier pour refroidisseur de processeur 130mm emplacement d&apos;alimentation SFX 6 grands 2 petites emplacements pour disque dur - AliExpress 7&lt;/div&gt;&lt;div&gt;Smarter Shopping, Better Living! Aliexpress.com&lt;/div&gt;&lt;div&gt;fr.aliexpress.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/kf/Sc13390d8094a4f43b206256f4cdc0a41A.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;元々は、このPCケースを買うためにAliExpressを覗きました。&lt;/p&gt;&lt;p&gt;NASを作るために、3.5インチ内蔵HDDが6ベイ、2.5インチ内蔵SSDが2ベイ入るPCケースです。Mini-ITXのマザボに対応しています。&lt;/p&gt;&lt;p&gt;筆者が確認した時の価格は、14,595円でした。あまりにも安かったので買ってしまいました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Western Digital WD Red Plus 内蔵ハードディスク 4TB&lt;a href=&quot;#western-digital-wd-red-plus-内蔵ハードディスク-4tb-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;WD-デスクトップ用の内部デジタルハードディスク,WD Red NAS, 3テラバイト,2テラバイト,1テラバイト,4テラバイト,3.5インチ,HDD, 6GB,SATA, 64 MBキャッシュ,オリジナル&lt;/p&gt;&lt;a href=&quot;https://fr.aliexpress.com/item/1005007965174001.html?src=ibdm_d03p0558e02r02&amp;amp;sk=&amp;amp;aff_platform=&amp;amp;aff_trace_key=&amp;amp;af=&amp;amp;cv=&amp;amp;cn=&amp;amp;dp=&amp;amp;aff_short_key=&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/images/eng/wholesale/icon/aliexpress.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;aliexpress.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Original Western numérique WD rouge NAS 3 to 2 to 1 to 4 to 3.5&lt;/div&gt;&lt;div&gt;Smarter Shopping, Better Living! Aliexpress.com&lt;/div&gt;&lt;div&gt;fr.aliexpress.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/kf/Sd29c07697f2a4513bf8e1bc25e7892e80.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;先程、Amazonブラックフライデーでも購入しました。「Western Digital WD Red Plus 内蔵ハードディスク 4TB」です。&lt;/p&gt;&lt;p&gt;しかし、こちらのHDDは型番が違います。256MBキャッシュの「WD40EFPX」ではなく、64MBキャッシュの「WD40EFRX」です。まあでも、このキャッシュのサイズによって性能にそこまで大きな差が出るか分からないので、（少し調べてみるとあまり変わらないという意見が多め？だった。）Amazonで安くなっていない分はAliExpressで購入してみることにしました。&lt;/p&gt;&lt;p&gt;筆者が確認した時の価格は、11,478円でした。3台ぐらい買ってしまったのですが、安すぎて怖いので後で性能テストはする予定です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Edlike Goldenfir SSD SATA 256GB&lt;a href=&quot;#edlike-goldenfir-ssd-sata-256gb&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Goldenfir-SSD,SATA 128.5インチ,容量512GB,480GB,256GB,テラバイトGB,500GB,2.5 GB,ノートブックコンピューター用&lt;/p&gt;&lt;a href=&quot;https://fr.aliexpress.com/item/1005005367572468.html?src=ibdm_d03p0558e02r02&amp;amp;sk=&amp;amp;aff_platform=&amp;amp;aff_trace_key=&amp;amp;af=&amp;amp;cv=&amp;amp;cn=&amp;amp;dp=&amp;amp;aff_short_key=&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/images/eng/wholesale/icon/aliexpress.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;aliexpress.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Goldenfir – disque dur SSD, sata 3, avec capacité de 128 go, 512 go, 480 go, 256 go, 500 go, 1 to, pour ordinateur portable, 2.5 - AliExpress 7&lt;/div&gt;&lt;div&gt;Smarter Shopping, Better Living! Aliexpress.com&lt;/div&gt;&lt;div&gt;fr.aliexpress.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ae01.alicdn.com/kf/Sf0944321715e4da6abde48fd8f1ff0afV.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回AliExpressでポチった物の内、最も怖いのがコイツ・・・。&lt;/p&gt;&lt;p&gt;筆者が確認した時の価格は、&lt;strong&gt;1,850&lt;/strong&gt;円でした・・・・・・。（桁違いに安いというのは当にこのこと。）&lt;/p&gt;&lt;p&gt;その安さ故に、ググってみるとネガティブな情報が錯綜していました・・・。コイツには、NAS用PCのOSのブート、それからファイルのキャッシュを担ってもらう予定なので、なんとか優等生であってくれ・・・。（完全に博打なんだよなあ。）&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Amazonのブラックフライデーは12/6（金）まで&lt;a href=&quot;#amazonのブラックフライデーは126金まで&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事では、筆者がブラックフライデーセールで買ったものを紹介しました。
お目当てのものはこの機会を逃さないようにしましょう。
（ちなみに、AliExpressのブラックフライデーは12/4（水）16:59まで。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;散財したなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあでも使いますし・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年10月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202410/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202410/</guid><description>kinkingame135mlのYouTube等の更新状況になります。主にSatisfactoryのシリーズを更新しています。アズールレーンも上げています。</description><pubDate>Sun, 17 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年10月に投稿した動画の一覧&lt;a href=&quot;#2024年10月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】石油コークスで作る磁界発生装置と組立指揮システムで作るバッテリー #40 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory石油コークスで作る磁界発生装置と組立指揮システムで作るバッテリー-40--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sbRwrn8XsyQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】商船護衛で前衛ノーダメージ（解説あり）&lt;a href=&quot;#アズールレーン商船護衛で前衛ノーダメージ解説あり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/IUS47nJrLPc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】熱推進型ロケットも製造する四重塔を建てる！ #41 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory熱推進型ロケットも製造する四重塔を建てる-41--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/smPc6jsg8vc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】スマプレ不足に対応するべくスマプレ専用工場を建設する #42 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryスマプレ不足に対応するべくスマプレ専用工場を建設する-42--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/k87iMLb9Ywg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】モジュラーエンジンが必要なターボライフル弾 #43 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryモジュラーエンジンが必要なターボライフル弾-43--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CazUHEQUboo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】更に進化する風力発電とリアクター #44 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory更に進化する風力発電とリアクター-44--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fjuidiBdgqg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】スマプレとスパコンが必要なリアクター #45 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryスマプレとスパコンが必要なリアクター-45--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/C1PRPs5uN9E/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】リアクターを作るために十重塔を建てる！ #46 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryリアクターを作るために十重塔を建てる-46--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/10/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kXKUo92J_X8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】開発時に導入して個人的に便利だった事柄まとめ</title><link>https://endorphinbath.com/posts/python-tips-for-develpment/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-tips-for-develpment/</guid><description>Pythonで開発する時に導入してみて個人的に便利だった事柄をまとめて紹介します。Pythonのパス、reuqrements.txtの区別、実行中の関数名の取得などを解説します。</description><pubDate>Sat, 16 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よしよし、これは便利だぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以前の不満が解消されたな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonで便利な事柄まとめ&lt;a href=&quot;#pythonで便利な事柄まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕が今までPythonを使ってきて、なんでこうなってるんだ訳わからん、こうだったら良いのに、とかとか思ってきてその都度ググっては、Pythonによる開発が楽になるようにある程度土壌は固まってきたような気はしています。&lt;/p&gt;&lt;p&gt;そこで、僕が現在Pythonの開発に導入してみて便利だと思った事柄をまとめましたので、便利そうだなと思ったら試してみてください。それではいきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. Pythonのルートパスを設定する。&lt;a href=&quot;#1-pythonのルートパスを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonの開発をしてその作ったツールをパッケージ化しようと思った時のことです。&lt;/p&gt;&lt;p&gt;パッケージ化しようとも思ってなかった時は、ソースコードがリポジトリのルートディレクトリに散乱していて、その中にある&lt;code&gt;main.py&lt;/code&gt;的なやつを動くようにしていたわけなんですけど、パッケージ化しようとなるとそうは行きません。さすがにそんな汚い状態でパッケージ化したくはありません。&lt;/p&gt;&lt;p&gt;なので、main.pyも含めてPythonで動くファイルは全て&lt;code&gt;src&lt;/code&gt;的なフォルダに入れて、テストコードが書かれているファイルは&lt;code&gt;tests&lt;/code&gt;的なフォルダに入れましたとさ。そして、Pythonの開発を再開しようと思った矢先のことです。なぜか、さっきまで汚いながらも問題なく動いていたPythonファイル達は、&lt;code&gt;ImportError&lt;/code&gt;が起こることで全く動かなくなったのです。（厳密に言うと、pytestが動かなくなった。）&lt;/p&gt;&lt;p&gt;&lt;code&gt;src&lt;/code&gt;フォルダにあるファイルを動かせば、&lt;code&gt;tests&lt;/code&gt;フォルダにあるファイルが動かなくなる。かといって&lt;code&gt;src&lt;/code&gt;と&lt;code&gt;tests&lt;/code&gt;を同じフォルダに配置するのも不細工な感じがしてしまう。一体どうすればいいんだ・・・。&lt;/p&gt;&lt;p&gt;そんな時にまるっと&lt;code&gt;ImportError&lt;/code&gt;を解決してくれたのが、&lt;code&gt;pyproject.toml&lt;/code&gt;でした。そいつをこんな感じのディレクトリ構造で設置します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  pyproject.toml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├─src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    a.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    b.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├─tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    test_a.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    test_b.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、&lt;code&gt;pyproject.toml&lt;/code&gt;の中はこう書いておけばとりあえずは動くかと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ini_options&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pythonpath&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;src&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;testpaths&lt;/span&gt;&lt;span&gt; = [&lt;/span&gt;&lt;span&gt;&quot;tests&quot;&lt;/span&gt;&lt;span&gt;,]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. reuqrements.txtを開発用と本番用に分ける。&lt;a href=&quot;#2-reuqrementstxtを開発用と本番用に分ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Python用のパッケージを作ってそれをインストールする時に、開発の時に使っていたテスト用のライブラリやメモリ使用量などの測定に使っていたライブラリは不要です。なのでそれらのライブラリはパッケージをインストールした時には混ざっていないようにしたい。&lt;/p&gt;&lt;p&gt;そういう時には、&lt;code&gt;requirements.txt&lt;/code&gt;に加えて&lt;code&gt;requirements&lt;/code&gt;フォルダも作成しておいて、以下のようなディレクトリ構成で配置しておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├─requirements&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    common.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    dev.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│    prod.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、それぞれのテキストファイルには以下のように書いておきます。
&lt;code&gt;common.txt&lt;/code&gt;は例えばこのようにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PyGithub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;functions_framework&amp;gt;=3.5.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;dev.txt&lt;/code&gt;は例えばこのようにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# requirements for development&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-r common.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# List packages that are only used in the development environment below:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-cov&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-mock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-xdist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;memory-profiler&amp;gt;=0.61.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;prod.txt&lt;/code&gt;は例えばこのようにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# requirements for production&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-r common.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# List packages that are only used in the commercial environment below:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしていつもの&lt;code&gt;requirements.txt&lt;/code&gt;にはこのように書いておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-r requirements/prod.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみにこの方策はこちらの記事を参考にさせていただきました。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/key/items/3684ec013c9798c0f02c&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;requirements.txtを分割する - Qiita&lt;/div&gt;&lt;div&gt;ローカルの開発環境、開発コードの結合環境、商用環境など、1つのプロジェクトで環境ごとに複数のRequirements Fileを使いたいケースがあると思います。そんなときはファイルを分割しましょう。 …とこないだ知ったことをメモります。 手順 Requirements ...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjk4NjAlMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2ODU0MDU_aXhsaWI9cmItNC4xLjEmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPTE2OGU0NWMzZjczYjNkZTZhMTllY2Y1N2M5MDQ0ZDFm%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Dbdfb84be5438efb690042193cee30e6b?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9cmVxdWlyZW1lbnRzLnR4dCVFMyU4MiU5MiVFNSU4OCU4NiVFNSU4OSVCMiVFMyU4MSU5OSVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTU2NmQ5ODJjMTM2OThmNzMyYjM1YzY2N2Q3YTg0ZTcw&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBrZXkmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz0yOGVlODFhNDhmZWMyNzdkOWU1NGQwMTgxM2UxNGQ2MQ&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=bdfc8b51d6fbc1cffd6d3525ede464ac&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. Pytest実行方法のあれこれ。&lt;a href=&quot;#3-pytest実行方法のあれこれ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonで書いたソースコードを強固なものにするために、Pytestはとても有用です。そして、そのPytestをより便利なものにするために、Pytestに加えて以下のライブラリもインストールするようにしています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-cov&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-mock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest-xdist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pytest-cov&lt;/code&gt;: テスト実行後にカバレッジ（網羅率）を表示することが可能になります。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pytest-mock&lt;/code&gt;: テスト時にソースコードの中をモックしやすくするモジュールが追加されます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pytest-xdist&lt;/code&gt;: テストを並列実行できるようにします。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;例えば、カバレッジを取得するためには、以下のように実行しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cov=src&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cov-branch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tb=short&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、カバレッジの取得、およびテストを並列実行して速く終わらせたい時には、以下のように実行しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auto&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cov=src&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cov-branch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cov-report=html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tb=short&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この他にもPytestを便利にする拡張ライブラリ的なものはあると思いますので、Pythonコードのテストをより迅速に行っていきたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. 現在実行している関数の名前を取得する。&lt;a href=&quot;#4-現在実行している関数の名前を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ログを出力する際に、どの処理で出力されたログなのかを確認したいです。ログの冒頭に関数名を書いてもいいですが、既に書いた関数からコピペする際に、その冒頭に書いてある関数名を更新し忘れることも起こり得ます。&lt;/p&gt;&lt;p&gt;その抜け漏れを防止するために、&lt;code&gt;inspect&lt;/code&gt;ライブラリを呼び出して実行中の関数名をログに出力するようにします。inspectはPythonのビルトインライブラリです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; inspect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inspect.&lt;/span&gt;&lt;span&gt;currentframe&lt;/span&gt;&lt;span&gt;().f_code.co_name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: start processing into PostgreSQL...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. メモリの使用量を把握する。&lt;a href=&quot;#5-メモリの使用量を把握する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;クラウド上にサーバレス関数をデプロイする際に、その関数がどれぐらいのメモリを使用するのかは把握しておく必要があります。その際に、関数内の各処理におけるメモリ使用率が確認できる&lt;code&gt;memory_profiler&lt;/code&gt;のライブラリを使います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;memory-profiler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、こんな感じで使います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; memory_profiler &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;./memory_profiler.log&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;span&gt;(execute, &lt;/span&gt;&lt;span&gt;stream&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;f)()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. 標準出力をファイルに残す。&lt;a href=&quot;#6-標準出力をファイルに残す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;個人的なツールを作っていても、処理の内容が煩雑になってくると、テストコードを書きたくなってきます。&lt;/p&gt;&lt;p&gt;特に、APIを叩いてJSONを受け取ってどーのこーのする処理では、やはりテストコードを書いて、正常な挙動を担保するのと、実際にどんな動きになっているのかを確認できるようにしたいです。レコードの数も膨大になってくれば、スクリプトの挙動を個所で確認できるようにしたい。&lt;/p&gt;&lt;p&gt;そこで、処理の途中の標準出力をテキストファイルに出力できるようにして、テストデータを楽に作れるようにします。標準出力をテキストファイルに出力する処理って、以前は作っていなかったんですよね。&lt;/p&gt;&lt;p&gt;そこでPythonの標準出力先を変える設定に関して少し調べました。そしたら、少し気を付けた方が良い点が見つかりました。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/maboy/items/0933e9ab601ecde50938&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】標準出力の出力先をファイルにする。 - Qiita&lt;/div&gt;&lt;div&gt;はじめに 僕はiOSのPythonista3というAppで、よく寝っ転がりながらPythonするのですが、モジュールのヘルプを見ても英語がわからないのでGoogle翻訳が欠かせません。 一度、調べたこともすぐに忘れてしまうので、原文と翻訳テキストを保存しておくことにしまし...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1pbWFnZS1zdG9yZSUyRjAlMkYyODAxMjklMkY2MTg2MTM1Yjg2NDAwMGRjZjYzNjc1N2NlZjhkYWM1NTUyOGM5ZTFlJTJGbGFyZ2UucG5nJTNGMTUzNjA1MDgwNj9peGxpYj1yYi00LjEuMSZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9M2Q5MDFlMGEyNzk0MmVlYWM1ZDVhM2YzNWI2ZjA1YmU%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Db6746cb4bab529df73cdc862d8c1aa31?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgwJTkwUHl0aG9uJUUzJTgwJTkxJUU2JUE4JTk5JUU2JUJBJTk2JUU1JTg3JUJBJUU1JThBJTlCJUUzJTgxJUFFJUU1JTg3JUJBJUU1JThBJTlCJUU1JTg1JTg4JUUzJTgyJTkyJUUzJTgzJTk1JUUzJTgyJUExJUUzJTgyJUE0JUUzJTgzJUFCJUUzJTgxJUFCJUUzJTgxJTk5JUUzJTgyJThCJUUzJTgwJTgyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9NGZkMDI3MmE4YTIxOTNhYTNhOTliYWFkMmY4OWY3MzQ&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBtYWJveSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTUzMGVlOThlNzY3YjYyYTczNzNhZGUyOGY4NDhjMDA4&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=0b46ed31335091105e4d16bed6aa81d2&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Pythonの標準出力をテキストファイルに出力する時に、&lt;code&gt;sys.stdout&lt;/code&gt;を避難させておくと、コンソールに出力できなくなる事故を防げます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;outputs_stdout_to_file = True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;STDOUT = sys.stdout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if outputs_stdout_to_file:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.stdout = open(&quot;./tmp_log.txt&quot;, &quot;w&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;with open(&quot;./memory_profiler.log&quot;, &quot;w&quot;) as f:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;profile(execute, stream=f)()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;except Exception as e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raise e&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;finally:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.stdout = STDOUT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;普通は、&lt;code&gt;sys.stdout = sys.stdout&lt;/code&gt;で戻せるらしくて、環境起因の稀な事象らしいんですけど、自分がもしもそんな事故に引っ掛かってしまったら面倒なので、知っておいて良かったです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. NemotronでDocstringを作る。&lt;a href=&quot;#7-nemotronでdocstringを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PythonのDocstringも書いていきたくて、Sphinxで利用できる&lt;code&gt;reStructuredText style&lt;/code&gt;で書きたいんですけど、色々な大規模言語モデルにそのスタイルでDocstringを書くように頼んでも全然書いてくれないんですよね。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/llm-knows-python-restructuredtextstyle/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】大規模言語モデル達の間ではReStructuredTextスタイルはあまり知られていないらしい&lt;/div&gt;&lt;div&gt;大規模言語モデルはPythonのSphinx用のReStructuredTextスタイルのdocstringを生成させる記事になります。汎用大規模言語モデルにも得手不得手があるようです。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240224_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで、NVIDIAが作ったLlama-3.1ベースの大規模言語モデルである&lt;code&gt;Nemorton-70B-Instruct&lt;/code&gt;にreStructuredTextスタイルでPythonのDocstringを書かせたら、今までの中で最も良い感じです。&lt;/p&gt;&lt;a href=&quot;https://build.nvidia.com/nvidia/llama-3_1-nemotron-70b-instruct&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://build.nvidia.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NVIDIA NIM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;llama-3.1-nemotron-70b-instruct Model by NVIDIA | NVIDIA NIM&lt;/div&gt;&lt;div&gt;Llama-3.1-Nemotron-70B-Instruct is a large language model customized by NVIDIA in order to improve the helpfulness of LLM generated responses.&lt;/div&gt;&lt;div&gt;build.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://assets.ngc.nvidia.com/products/api-catalog/images/llama-3_1-nemotron-70b-instruct.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、内容物が長過ぎるのが欠点かも。まあ、LLMをトレーニングする合成データの生成のために作られたAIなので、少しおしゃべり好きな部分があるのかもしれません。&lt;/p&gt;&lt;p&gt;Add Docstring with reStructuredText style into following Python script. Write it over here too.&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Execute Database Operations on a PostgreSQL Database&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;This function executes a given SQL query on a PostgreSQL database engine.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;It optionally accepts a list of records to be inserted into the database&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if the query is designed for insertion operations.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:param engine: A SQLAlchemy database engine instance connected to a PostgreSQL database.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:type engine: sqlalchemy.engine.base.Engine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:param query: The SQL query to be executed. For insert operations, the query should specify columns, e.g., ``INSERT INTO table (column1, column2) VALUES (:column1, :column2)``.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:type query: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:param records: Optional list of lists containing data to be inserted. Each inner list represents a row, with elements corresponding to the columns specified in the query.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:type records: List[List[any]], optional (default is None)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:Example:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.. code-block:: python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;from sqlalchemy import create_engine&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;from typing import List, Any&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Assuming &apos;sqlalchemy&apos; and necessary dependencies are installed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;engine = create_engine(&apos;postgresql://user:password@localhost/dbname&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Example query for insertion with specified columns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;insert_query = &quot;INSERT INTO mytable (id, name) VALUES (:id, :name)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Sample records to insert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;records_to_insert = [[1, &apos;John Doe&apos;], [2, &apos;Jane Doe&apos;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;execute_db_ops(engine, insert_query, records_to_insert)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Execute a query without records (e.g., SELECT, UPDATE, DELETE)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;select_query = &quot;SELECT * FROM mytable&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;execute_db_ops(engine, select_query)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Pythonで開発する時に導入してみて個人的に便利だった事柄をまとめて紹介しました。&lt;/p&gt;&lt;p&gt;上記のライブラリやファイルを導入して、快適に開発ができるようになりました。他にも開発が楽になるようなコツはないかなあ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もっともっと便利にしたいなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;開発を積み重ねていくしかないな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python、Golang】NotionのページのプロパティをCloud SQLのPostgreSQLに記録する（第1回）</title><link>https://endorphinbath.com/posts/python-cloudsql-postgresql-notion-page/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-cloudsql-postgresql-notion-page/</guid><description>NotionのページのプロパティをPythonで取得して、Cloud SQL上に作成されたPostgreSQLのDBに記録する手順を紹介します。Cloud FunctionsではCloud SQLを使えない。</description><pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これだと出来ないな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Pythonにした方が楽だな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionの情報をPostgreSQLに格納するツール。&lt;a href=&quot;#notionの情報をpostgresqlに格納するツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は毎日Notionを使っています。そのNotionに入っているデータを使って日々の生活を楽にするツールを作るためにGoogle Apps Script（以下、GAS）を使っているわけなんですけど、このGASって実行時間の上限が短いんですよね。手動実行だと最大6分、時間主導実行だと最大30分の上限が設けられています。（時間主導実行の上限については、公にGoogleから掲示されているわけではないんですけど、2024-11-25時点では確かにその間だけ実行できるんですよね。）&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/apps-script/guides/services/quotas?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google サービスの割り当て | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;Apps Script 内の Google サービスの 1 日の割り当てと制限を確認して、スクリプトが中断なく実行されるようにします。&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://developers.notion.com/guides/get-started/overview&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Overview - Notion Docs&lt;/div&gt;&lt;div&gt;Discover what Notion connections are, when to use each type, and what you can build.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、Notionのページを取得する処理を行う際に、ページの数が1700個ぐらいになってくると、その最大30分上限ですらオーバーするようになってきます。なぜなら、Notion APIの「Query a database」エンドポイントでは、リクエスト1回につき100件までのページしか取得できず、リクエストの回数が多くなるためです。&lt;/p&gt;&lt;p&gt;じゃあ、APIを非同期処理の中で叩けばいいじゃないかと言うと、それではダメなんです。Notion APIで101件目から先のページを取得するためには100件目までを取得したレスポンス内にある「next_cursor」を含めてリクエストしなければならないからです。&lt;/p&gt;&lt;p&gt;じゃあ、「next_cursor」をGASのScriptPropertyとかの中に入れて、再度同じGASを実行すればいいとも思いましたが、以前にトリガーの生成をコード内で行った時に上手く動かなかったんですよね・・・。だから、これはちょっとGASで作るのには限界を感じました。&lt;/p&gt;&lt;p&gt;そこで、今回はNotionのページを取得したら、そのページの情報をPostgreSQLデータベースに格納するツールを、Cloud Functionsで作っていきたいと思います。Cloud Functionの実行時間の上限は、2024-11-25時点で、第2世代としてデプロイすれば最大60分です。そして、その関数でDBにデータを入れてしまえば、GASからの1度のリクエストで全てのレコードを参照することが出来るようになります。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/functions/quotas?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;割り当て | Cloud Run functions | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;このページは、Cloud Functions v2 API で作成された関数を対象としています。代わりに、Cloud Run での関数の使用に移行することをおすすめします。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回のツールのイメージはこんな感じです。Cloud Functionsが2種類必要になってきますかね。
&lt;img loading=&quot;lazy&quot; width=&quot;1392&quot; height=&quot;804&quot; src=&quot;/_astro/11.BimGN2X1_b55K.webp&quot; srcset=&quot;/_astro/11.BimGN2X1_lyi6p.webp 640w, /_astro/11.BimGN2X1_2dWUCN.webp 750w, /_astro/11.BimGN2X1_j0rze.webp 828w, /_astro/11.BimGN2X1_Z1a6pon.webp 1080w, /_astro/11.BimGN2X1_2o93rp.webp 1280w, /_astro/11.BimGN2X1_b55K.webp 1392w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Goは今回相性が悪かった。&lt;a href=&quot;#goは今回相性が悪かった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ところで、当初はこのツールをGoで作ろうとしたんですけど、今回の目的を果たすためには少し相性が悪かったです。（Goの方がPythonよりも遥かに速いし、メモリ使用量も少ないので。）
以下に、悪かった点を書きます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Notion APIと相性が悪い。&lt;a href=&quot;#notion-apiと相性が悪い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notion APIから取得できるJSONをGoで取得して構造体に反映させるのって、けっこう面倒くさいんですよね。煩雑です。そのために、「go-notion」というライブラリを使ったんですけど、「ID」カテゴリのプロパティを取得することが出来ない。（これは自分で直せばいい気もしますが・・・。）&lt;/p&gt;&lt;a href=&quot;https://github.com/dstotijn/go-notion&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub - dstotijn/go-notion: Go client for the Notion API.&lt;/div&gt;&lt;div&gt;Go client for the Notion API. Contribute to dstotijn/go-notion development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://repository-images.githubusercontent.com/367162672/a5dd2480-b5df-11eb-8636-a371ca6b0855&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかしさらに、この「go-notion」ライブラリの更新が鈍重なんですよね。メインリポジトリの更新日が、2023-03-01と・・・、あまり活発なリポジトリではないことが窺えます。（2024-11-25に確認しました。）&lt;/p&gt;&lt;p&gt;まあでも、大きなリポジトリの運営って絶対大変でしょうからね・・・。そこはしょうがない・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SQLと相性が悪い。&lt;a href=&quot;#sqlと相性が悪い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GoでPostgreSQLを叩いていこうと思いました。しかし、DBのカラムが増えたり名前を変えたりして、DBへのクエリを変えると同時に構造体も編集するのはいちいち面倒くさいですね。なので、今回は「GORM」ライブラリでDBのテーブルと構造体のObject-Relation-Mappinngをしていきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://gorm.io/index.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://gorm.io/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GORM&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GORM&lt;/div&gt;&lt;div&gt;The fantastic ORM library for Golang aims to be developer friendly.&lt;/div&gt;&lt;div&gt;gorm.io&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、今回はこれが上手くいきませんでした。&lt;/p&gt;&lt;p&gt;まず厄介なことに、GoのSQLドライバーは、DBのカラムの中に配列を入れることが出来ないらしいです。&lt;/p&gt;&lt;a href=&quot;https://github.com/DATA-DOG/go-sqlmock/issues/175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Question about sql error &quot;unsupported type []string, a slice of string&quot; · Issue #175 · DATA-DOG/go-sqlmock&lt;/div&gt;&lt;div&gt;Help needed Please see the example code and the error message at the bottom. I&apos;m not sure what is causing the error. My insert function works fine. I&apos;m using this code to insert to a clickhouse dat...&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/7dfe31a2a92c1050a85ce5b69d55fb0a9a22d74911d3a3f7a4d239e9666cfb15/DATA-DOG/go-sqlmock/issues/175&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;GORMライブラリでやろうとすると、DBに配列を持てません。なので、例えばカラムをテキスト型にしてCSVを入れようとすると、SELECT文でテキスト型のカラムを参照する時に構造体の配列に変換できずにエラーが発生します。つまり、構造体に配列の属性を持てない。&lt;/p&gt;&lt;p&gt;こうなってしまうと、DBを参照して配列に変換するための構造体まで準備しなくてはなりません。元々、リレーションと構造体の両方を治すのが面倒だからORMを使用したいというのに、これでは本末転倒です。全然開発が進まない・・・。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;unsupported type []string, a slice of string&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PythonでPostgreSQLに格納する。&lt;a href=&quot;#pythonでpostgresqlに格納する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Goで今回のような処理を実装しようとすると、どうにも開発が鈍足になり、成果物も完璧なものにはならないことが分かりました・・・。&lt;/p&gt;&lt;p&gt;なので、今回のNotionのページをPostgreSQLに記録するツールは、Pythonで実装していこうと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;SQLAlchemyを使う。&lt;a href=&quot;#sqlalchemyを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、Cloud SQLを使っていくので、公式のチュートリアルを確認すると、SQLAlchemyを使っていました。&lt;/p&gt;&lt;p&gt;なので、Cloud SQLにDBを作る前に、ローカルでSQLAlchemyを使ってPostgreSQLに記録する処理を作りたいと思います。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sql/docs/postgres/samples/cloud-sql-postgres-sqlalchemy-connect-connector?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cloud SQL Python Connector を使用して接続を作成する | Cloud SQL for PostgreSQL | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;Cloud SQL Python Connector を使用して Cloud SQL for PostgreSQL への接続を開きます。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SQLAlchemyでInsert文を作る。&lt;a href=&quot;#sqlalchemyでinsert文を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SQLAlchemyでPostgreSQLのDBにデータを格納していきます。&lt;/p&gt;&lt;p&gt;今回は例として、Create文とInsert文だけ。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; sqlalchemy &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; create_engine, text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# PostgreSQL接続情報&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;DATABASE_URL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;postgresql+psycopg2://username:password@localhost:5432/dbname&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# SQLAlchemyエンジンのセットアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;engine &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_engine&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DATABASE_URL&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テーブル作成クエリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;create_table_query &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE TABLE IF NOT EXISTS records (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id SERIAL PRIMARY KEY,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name VARCHAR(255) NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number INTEGER NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_active BOOLEAN NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;account_number INTEGER NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_verified BOOLEAN NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;score VARCHAR(50) NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;url TEXT,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extra_info TEXT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データ挿入クエリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;insert_query &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO records (name, number, is_active, account_number, is_verified, score, url, extra_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;VALUES (:name, :number, :is_active, :account_number, :is_verified, :score, :url, :extra_info);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データ（複数レコード）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;record &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;tanaka&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;67890&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;5&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;https://www.google.co.jp/&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; engine.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; connection:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テーブル作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;connection.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;(create_table_query))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Table created or already exists.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# データを挿入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;connection.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;(insert_query), record)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Multiple records inserted successfully!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SQLAlchemyで一気にInsertできるクエリを作る。&lt;a href=&quot;#sqlalchemyで一気にinsertできるクエリを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SQLAlchemyを使う際のトピックとしては、Insert文の作り方ですね。&lt;/p&gt;&lt;p&gt;Insertする際に、DBに1文ずつ渡すのでは時間が掛かり過ぎです。なので、SQLAlchemyのInsert実行のメソッドは1度だけ実行するようにしたい・・・。しかし、SQLAlchemyでググった際に、SQLAlchemyのメソッド内でInsertを一気に実行している記事が見られました。&lt;/p&gt;&lt;p&gt;まあそれでもいいんですけど・・・、でも個人的には、Insert実行のメソッドにはクエリを渡すようにしたいんですよね・・・。DBを操作するのに、自分が書いていない関数でやるのって、なんかスキルが身に付いている感じがしない・・・。だからクエリを渡す方法でやりたい・・・。&lt;/p&gt;&lt;p&gt;そこでまたSQLAlchemyでググったのですが・・・、Insert文をクエリの中に1つしか書いていない情報しか見つけられませんでした。なのでここに動いたものを書いておきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; sqlalchemy &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; create_engine, text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# PostgreSQL接続情報&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;DATABASE_URL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;postgresql+psycopg2://username:password@localhost:5432/dbname&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# SQLAlchemyエンジンのセットアップ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;engine &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_engine&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DATABASE_URL&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# テーブル作成クエリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;create_table_query &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE TABLE IF NOT EXISTS records (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id SERIAL PRIMARY KEY,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name VARCHAR(255) NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number INTEGER NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_active BOOLEAN NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;account_number INTEGER NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_verified BOOLEAN NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;score VARCHAR(50) NOT NULL,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;url TEXT,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extra_info TEXT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データ挿入クエリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;insert_query &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;INSERT INTO records (name, number, is_active, account_number, is_verified, score, url, extra_info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;VALUES (:name, :number, :is_active, :account_number, :is_verified, :score, :url, :extra_info);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# データ（複数レコード）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;records &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;tanaka&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;67890&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;5&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;https://www.google.co.jp/&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;suzuki&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;25&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;12345&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;8&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;https://www.example.com/&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;extra data&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;yamada&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;67891&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;3&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;https://www.test.com/&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 実行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; engine.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; connection:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# テーブル作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;connection.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;(create_table_query))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Table created or already exists.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 複数レコードのデータを挿入&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;connection.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;(insert_query),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;is_active&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;account_number&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;is_verified&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;score&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;extra_info&quot;&lt;/span&gt;&lt;span&gt;: record[&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; record &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; records&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Multiple records inserted successfully!&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記の処理はChatGPTに出してもらったんですけど、（だからもう少し頑張ってググれば記事はあるのだろうか。）&lt;/p&gt;&lt;p&gt;僕はこの処理をさらに関数化して、その関数にはクエリとレコードを渡すようにして、正規表現でクエリ内に書いてあるカラム名を抽出して、リスト内包表記で辞書を作成する処理にしました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; TypedDict, Final, List&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; sqlalchemy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; inspect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execute_db_ops&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;engine&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; sqlalchemy.engine.base.Engine&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; List[List[&lt;/span&gt;&lt;span&gt;any&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extract_columns&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;*?&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, query.text)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; match:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; match.&lt;/span&gt;&lt;span&gt;group&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;,&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [column.&lt;/span&gt;&lt;span&gt;strip&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; column &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; columns] &lt;/span&gt;&lt;span&gt;# remove spaces&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;func_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; inspect.&lt;/span&gt;&lt;span&gt;currentframe&lt;/span&gt;&lt;span&gt;().f_code.co_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: start processing into PostgreSQL...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; engine.&lt;/span&gt;&lt;span&gt;begin&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; conn:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; records:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: processing with records into PostgreSQL...&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extract_columns&lt;/span&gt;&lt;span&gt;(query)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columns &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [c.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; c &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; columns]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: columns:&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(columns)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mapped_records &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [{column: record[i] &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i, column &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enumerate&lt;/span&gt;&lt;span&gt;(columns)} &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; record &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; records]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: mapped_records:&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(mapped_records)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;conn.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(query, mapped_records)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: completed processing with records into PostgreSQL.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;conn.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(query)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;func_name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: completed processing into PostgreSQL.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;また、ここでもう一つ気を付けたのが、このSQLAlchemy実行用の関数の引数に辞書型の変数を渡さないようにしたことです。&lt;/p&gt;&lt;p&gt;今後このツールを改造して、このPythonのソースコードをコンパイル出来るようになったら、スタックメモリを使える処理が出てくるかもしれません。しかし、辞書型を渡す処理は間違いなくヒープメモリを使うことになります。そして、ヒープメモリを使う方がメモリ使用量が増えるんですよね多分。あと処理も遅くなります。&lt;/p&gt;&lt;p&gt;あと、今回使うCloud Functionsでは、最大メモリ使用サイズによって費用が変わるので、なるべくスタックメモリを使って余計なリソースを使わないで節約したいです。もしかしたらCloud Functions以外のサービスでデプロイする時にもコストを抑えられるかもしれません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;日本語ロケールの設定&lt;a href=&quot;#日本語ロケールの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DBに日本語の情報を使う際に、利用するサーバに日本語ロケールを設定します。こうしないとDBで日本語を使えなかったりします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apt-get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;language-pack-ja&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dpkg-reconfigure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;locales&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら、PostgreSQLを起動して、コンソールに入ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/sbin/service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postgresql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;su&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postgres&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;SQLコンソールに入る。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;psql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postgres&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ユーザーとDBを作ります。DBのロケールを日本語に設定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;USER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myuser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PASSWORD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;mypassword&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATABASE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;testdb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OWNER&lt;/span&gt;&lt;span&gt; myuser &lt;/span&gt;&lt;span&gt;ENCODING&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;UTF8&apos;&lt;/span&gt;&lt;span&gt; lc_collate &lt;/span&gt;&lt;span&gt;&apos;ja_JP.UTF-8&apos;&lt;/span&gt;&lt;span&gt; lc_ctype &lt;/span&gt;&lt;span&gt;&apos;ja_JP.UTF-8&apos;&lt;/span&gt;&lt;span&gt; template &lt;/span&gt;&lt;span&gt;&apos;template0&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;GRANT&lt;/span&gt;&lt;span&gt; ALL PRIVILEGES &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATABASE&lt;/span&gt;&lt;span&gt; testdb &lt;/span&gt;&lt;span&gt;TO&lt;/span&gt;&lt;span&gt; myuser; &lt;/span&gt;&lt;span&gt;GRANT&lt;/span&gt;&lt;span&gt; USAGE, &lt;/span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SCHEMA&lt;/span&gt;&lt;span&gt; PUBLIC &lt;/span&gt;&lt;span&gt;TO&lt;/span&gt;&lt;span&gt; myuser;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PostgreSQLへの格納が完了。&lt;a href=&quot;#postgresqlへの格納が完了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;とりあえずはPostgreSQLへの格納が終わったので、次にこのDBをCloud SQL上に作っていきたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1464&quot; height=&quot;853&quot; src=&quot;/_astro/21.Dcwrx1GO_Z1WTfp9.webp&quot; srcset=&quot;/_astro/21.Dcwrx1GO_1YcATP.webp 640w, /_astro/21.Dcwrx1GO_Z1MBoWO.webp 750w, /_astro/21.Dcwrx1GO_ZvtY00.webp 828w, /_astro/21.Dcwrx1GO_Z1nfnr5.webp 1080w, /_astro/21.Dcwrx1GO_ZnBUem.webp 1280w, /_astro/21.Dcwrx1GO_Z1WTfp9.webp 1464w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud SQLを使う。&lt;a href=&quot;#cloud-sqlを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは次に、Cloud SQL上にPostgreSQLデータベースを作成して、同様にNotionの情報を格納していきます。
作業の流れは、「Cloud SQL Auth Proxy を使用して Cloud SQL for PostgreSQL に接続する」のGoogle Cloud公式ガイドを参考にやっていきます。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sql/docs/postgres/connect-instance-auth-proxy?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;クイックスタート: Cloud SQL Auth Proxy を使用して Cloud SQL for PostgreSQL に接続する | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;Cloud SQL インスタンスを作成する&lt;a href=&quot;#cloud-sql-インスタンスを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Cloud コンソールで、Cloud SQL の「インスタンス」 ページに移動します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41.eDpSa7Ij_1IR55v.webp&quot; srcset=&quot;/_astro/41.eDpSa7Ij_Zp9aUr.webp 640w, /_astro/41.eDpSa7Ij_2iwORl.webp 750w, /_astro/41.eDpSa7Ij_Z1WHkAa.webp 828w, /_astro/41.eDpSa7Ij_1ptTVe.webp 1080w, /_astro/41.eDpSa7Ij_2oEoRN.webp 1280w, /_astro/41.eDpSa7Ij_ZYchiY.webp 1668w, /_astro/41.eDpSa7Ij_1IR55v.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「インスタンスを作成」をクリックしてインスタンス作成画面に移動しようとすると「Compute Engine API」を有効にしておく必要があるので有効にします。有効にすると、インスタンスの作成画面が表示されます。
Cloud SQLのエディションには「Enterprise plus」と「Enterprise」の2種類あるらしく、「Enterprise」の方が安くなりそうです。今回は、「Enterprise」にしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/42.zBEYUDpb_Z1fAyHJ.webp&quot; srcset=&quot;/_astro/42.zBEYUDpb_Zl1Ph4.webp 640w, /_astro/42.zBEYUDpb_2mEavI.webp 750w, /_astro/42.zBEYUDpb_Z1SzYVM.webp 828w, /_astro/42.zBEYUDpb_Z1yXIR1.webp 1080w, /_astro/42.zBEYUDpb_ZzNeUr.webp 1280w, /_astro/42.zBEYUDpb_16wcGH.webp 1668w, /_astro/42.zBEYUDpb_Z1fAyHJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;エディションのプリセットは「サンドボックス」にします。そしてインスタンスの情報は以下の通りにしておきます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;データベースのバージョン：PostgreSQL 16&lt;/li&gt;
&lt;li&gt;インスタンス-ID：testdb-01&lt;/li&gt;
&lt;li&gt;パスワード：（任意の文字列）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;あと、「リージョンとゾーンの可用性の選択」です。
「サンドボックス」エディションでは、「シングルゾーン」しか選べないようなのですが、ここではなんかゴニョゴニョ編集できましたね・・・。「複数のゾーン」にして作成すると引っかかるのか？
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43.CnjgfkGy_2ew6gR.webp&quot; srcset=&quot;/_astro/43.CnjgfkGy_23V1fj.webp 640w, /_astro/43.CnjgfkGy_Ziz6KP.webp 750w, /_astro/43.CnjgfkGy_vmQzA.webp 828w, /_astro/43.CnjgfkGy_1U8V7A.webp 1080w, /_astro/43.CnjgfkGy_Z2aRHJL.webp 1280w, /_astro/43.CnjgfkGy_Ztxg7C.webp 1668w, /_astro/43.CnjgfkGy_2ew6gR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「マシンの構成」やら「ストレージ」やら、色々と設定できるみたいですが、今回はデフォルト設定にしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44.cVUMaK_W_11sq5H.webp&quot; srcset=&quot;/_astro/44.cVUMaK_W_dsXKq.webp 640w, /_astro/44.cVUMaK_W_Z2929fI.webp 750w, /_astro/44.cVUMaK_W_Z1k5aTi.webp 828w, /_astro/44.cVUMaK_W_H5fVq.webp 1080w, /_astro/44.cVUMaK_W_1GfJS0.webp 1280w, /_astro/44.cVUMaK_W_Z1GAViM.webp 1668w, /_astro/44.cVUMaK_W_11sq5H.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/45.CFlZo9NJ_Z19RmoW.webp&quot; srcset=&quot;/_astro/45.CFlZo9NJ_Nca8A.webp 640w, /_astro/45.CFlZo9NJ_Z1yiWRy.webp 750w, /_astro/45.CFlZo9NJ_ZJlYw8.webp 828w, /_astro/45.CFlZo9NJ_Z1tfwye.webp 1080w, /_astro/45.CFlZo9NJ_Zu52BE.webp 1280w, /_astro/45.CFlZo9NJ_1cfp0u.webp 1668w, /_astro/45.CFlZo9NJ_Z19RmoW.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「接続」では、デフォルト設定の「パブリックIP」を選択しておきます。新しいネットワークには今回特に入力しません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46.DI1MBxU8_C3Rk5.webp&quot; srcset=&quot;/_astro/46.DI1MBxU8_2uLrel.webp 640w, /_astro/46.DI1MBxU8_8gjdc.webp 750w, /_astro/46.DI1MBxU8_WdhyC.webp 828w, /_astro/46.DI1MBxU8_iFHaN.webp 1080w, /_astro/46.DI1MBxU8_1hQc7n.webp 1280w, /_astro/46.DI1MBxU8_Z260u4p.webp 1668w, /_astro/46.DI1MBxU8_C3Rk5.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、インスタンスを作成します。作成が始まると、インスタンスの概要を閲覧できる画面が表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/47.DSpFQSPT_dOebn.webp&quot; srcset=&quot;/_astro/47.DSpFQSPT_PUOFf.webp 640w, /_astro/47.DSpFQSPT_Z1vzikT.webp 750w, /_astro/47.DSpFQSPT_ZGCjYt.webp 828w, /_astro/47.DSpFQSPT_Z5xUWT.webp 1080w, /_astro/47.DSpFQSPT_SBxXF.webp 1280w, /_astro/47.DSpFQSPT_Z2uf8d7.webp 1668w, /_astro/47.DSpFQSPT_dOebn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud SQL Auth Proxy クライアントをインストールする。&lt;a href=&quot;#cloud-sql-auth-proxy-クライアントをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;インスタンスを作成したら、そのインスタンスに認証できるツール「Cloud SQL Auth Proxy」のクライアントをインストールします。
まずは、「APIとサービス」より「APIとサービスを有効にする」をクリックして、「Cloud SQL Admin API」を有効にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/48.BnkZ1n1V_m83Ps.webp&quot; srcset=&quot;/_astro/48.BnkZ1n1V_ZBQl5p.webp 640w, /_astro/48.BnkZ1n1V_25OEHn.webp 750w, /_astro/48.BnkZ1n1V_Z2apuK8.webp 828w, /_astro/48.BnkZ1n1V_2JSGb.webp 1080w, /_astro/48.BnkZ1n1V_11UnCK.webp 1280w, /_astro/48.BnkZ1n1V_Z2lViy2.webp 1668w, /_astro/48.BnkZ1n1V_m83Ps.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程Pythonで開発したツールが置いてある場所に、Cloud SQL Auth Proxy クライアントを設置します。&lt;/p&gt;&lt;p&gt;OSがDebianもしくはUbuntuであれば、以下のコマンドでダウンロードします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloud-sql-proxy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.13.0/cloud-sql-proxy.linux.amd64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Cloud SQL Auth Proxy を実行可能にします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+x&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloud-sql-proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud SQL Auth Proxyで認証する。&lt;a href=&quot;#cloud-sql-auth-proxyで認証する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは次に、Cloud SQL Auth Proxyで認証していきます。&lt;/p&gt;&lt;p&gt;まずは、Google Cloud コンソール内でDBインスタンスの画面から、「このインスタンスと接続」セクションで「接続名」をコピーします。接続名の形式は &lt;code&gt;projectID:region:instanceID&lt;/code&gt; です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/49.BRAQfrtv_ZSQ5Ul.webp&quot; srcset=&quot;/_astro/49.BRAQfrtv_tGTm4.webp 640w, /_astro/49.BRAQfrtv_Z1RNdE5.webp 750w, /_astro/49.BRAQfrtv_Z13QfiE.webp 828w, /_astro/49.BRAQfrtv_Z1deg4C.webp 1080w, /_astro/49.BRAQfrtv_Ze3L83.webp 1280w, /_astro/49.BRAQfrtv_1sgFu6.webp 1668w, /_astro/49.BRAQfrtv_ZSQ5Ul.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;OSがDebianもしくはUbuntuであれば、以下のコマンドでログインします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;./cloud-sql-proxy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projectID:region:instanceID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ログインしようとすると、認証の作業が入ります。僕の場合はCloud Shell上で作業していたのでこんな感じになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/50.CjO2GS_d_Z2kMkLU.webp&quot; srcset=&quot;/_astro/50.CjO2GS_d_gQt13.webp 640w, /_astro/50.CjO2GS_d_Z25DE06.webp 750w, /_astro/50.CjO2GS_d_Z1gGFDF.webp 828w, /_astro/50.CjO2GS_d_2q1CRJ.webp 1080w, /_astro/50.CjO2GS_d_Z1F00YC.webp 1280w, /_astro/50.CjO2GS_d_1kqCw.webp 1668w, /_astro/50.CjO2GS_d_Z2kMkLU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな感じのメッセージが表示されると、Cloud SQLが外部からのリクエストをListenしている状態になります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/11/29 02:19:18 The proxy has started successfully and is ready for new connections!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら今度は、Cloud SQL上のPostgreSQLに接続します。 その接続をする際に、必ずパスワードの入力が求められるので、Cloud SQLのコンソール上でサイドバーから「ユーザー」を選択して、表示された画面内でスーパーユーザー「postgres」のパスワードを設定しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51.CnOlqzS5_ZyHOeR.webp&quot; srcset=&quot;/_astro/51.CnOlqzS5_Z9F2is.webp 640w, /_astro/51.CnOlqzS5_Z2wbajB.webp 750w, /_astro/51.CnOlqzS5_Z1HebXb.webp 828w, /_astro/51.CnOlqzS5_ZS5Yo9.webp 1080w, /_astro/51.CnOlqzS5_64uxq.webp 1280w, /_astro/51.CnOlqzS5_1MoWaz.webp 1668w, /_astro/51.CnOlqzS5_ZyHOeR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/52.BMdC1YSy_2s4wco.webp&quot; srcset=&quot;/_astro/52.BMdC1YSy_1zluJK.webp 640w, /_astro/52.BMdC1YSy_ZM9Cgo.webp 750w, /_astro/52.BMdC1YSy_1Ml52.webp 828w, /_astro/52.BMdC1YSy_28Gm37.webp 1080w, /_astro/52.BMdC1YSy_Z1WkhOf.webp 1280w, /_astro/52.BMdC1YSy_ZfYPc6.webp 1668w, /_astro/52.BMdC1YSy_2s4wco.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;設定したら、その「postgres」で先程作ったPostgreSQLインスタンス内にデフォルトで作成される「postgres」DBにログインします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;psql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;host=127.0.0.1 port=5432 sslmode=disable dbname=postgres user=postgres&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみに、Cloud SQLのコンソール上でサイドバーにある「データベース」をクリックすると、現在存在するデータベースを確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/53.CgEhZ8YG_Z2gRkUF.webp&quot; srcset=&quot;/_astro/53.CgEhZ8YG_Z2l753m.webp 640w, /_astro/53.CgEhZ8YG_myUJq.webp 750w, /_astro/53.CgEhZ8YG_1bvT5Q.webp 828w, /_astro/53.CgEhZ8YG_2tVCIY.webp 1080w, /_astro/53.CgEhZ8YG_Z1B518n.webp 1280w, /_astro/53.CgEhZ8YG_5fqtL.webp 1668w, /_astro/53.CgEhZ8YG_Z2gRkUF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ユーザー、ロールおよびデータベースを作成する。&lt;a href=&quot;#ユーザーロールおよびデータベースを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DBに接続できたら、まずはユーザーを作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;USER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myuser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PASSWORD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;mypassword&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このSQLコマンドを実行して、現在のユーザーのロールと権限を確認できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; * &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; pg_roles &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt;&lt;span&gt; rolname &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;myuser&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;接続中のユーザーがsuperuser相当の状態で、myuserにロールを付与します。 次のようなSQLコマンドを実行して、ロールを付与できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;GRANT&lt;/span&gt;&lt;span&gt; myuser &lt;/span&gt;&lt;span&gt;TO&lt;/span&gt;&lt;span&gt; current_user;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、テーブルを作成します。日本語ロケールで作ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATABASE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lmakdb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OWNER&lt;/span&gt;&lt;span&gt; myuser &lt;/span&gt;&lt;span&gt;ENCODING&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;UTF8&apos;&lt;/span&gt;&lt;span&gt; lc_collate &lt;/span&gt;&lt;span&gt;&apos;ja_JP.UTF-8&apos;&lt;/span&gt;&lt;span&gt; lc_ctype &lt;/span&gt;&lt;span&gt;&apos;ja_JP.UTF-8&apos;&lt;/span&gt;&lt;span&gt; template &lt;/span&gt;&lt;span&gt;&apos;template0&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;DBを使いやすくします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;GRANT&lt;/span&gt;&lt;span&gt; ALL PRIVILEGES &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATABASE&lt;/span&gt;&lt;span&gt; testdb &lt;/span&gt;&lt;span&gt;TO&lt;/span&gt;&lt;span&gt; myuser; &lt;/span&gt;&lt;span&gt;GRANT&lt;/span&gt;&lt;span&gt; USAGE, &lt;/span&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SCHEMA&lt;/span&gt;&lt;span&gt; PUBLIC &lt;/span&gt;&lt;span&gt;TO&lt;/span&gt;&lt;span&gt; myuser;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これにて、データベースの作成は完了です。
先程、&lt;code&gt;GRANT myuser TO current_user;&lt;/code&gt;を実行した理由は、実行しないでテーブルを作成しようとした時に以下のエラーが発生したためです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ERROR:  must be member of &lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;今回作成したユーザーである「myuser」でそのエラーを回避するためには、どうやら「myuser」をsuperuser相当のユーザーからロールを付与されたユーザーにする必要があるみたいです。そうしないとテーブルを作成できません。 これはPostgreSQLの仕様のようです。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/bwtakacy/items/845c193c6da3218a546d&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;RDS (PostgreSQL) でデータベースを作成するときの注意点 - Qiita&lt;/div&gt;&lt;div&gt;RDS(PostgreSQL)でデータベース作成をしようとしてハマったのでメモ。 新規ユーザが所有者のデータベースを作りたい マスタユーザでログインして、 ユーザ（ロール）作成 上で作成したロールがOWNERなデータベース作成 をしようとすると、以下のようなエラーが出...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGODIwMzQlMkZwcm9maWxlLWltYWdlcyUyRjE0NzM3MDIzMDk_aXhsaWI9cmItNC4xLjEmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPWI1MWQ3NmJjZGJkNWMzNGEyYTdiNzk2ZjM4M2IwNjNk%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkZlZDUwNDFiZDAzYzgzYTllNDM4MWM2ZjQ3YmExMmViNjU3NmY0OTk2JTJGb3JpZ2luYWwuanBnJTNGMTU1MjYxNTE2MD9peGxpYj1yYi00LjEuMSZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz04N2NiYTIwYzdjNjE0YWZjZTEzNzJkNDk4MGFiOGEwNg%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3Dbcc04bdec1714faaf1765a7da1ecd31f?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9UkRTJTIwJTI4UG9zdGdyZVNRTCUyOSUyMCVFMyU4MSVBNyVFMyU4MyU4NyVFMyU4MyVCQyVFMyU4MiVCRiVFMyU4MyU5OSVFMyU4MyVCQyVFMyU4MiVCOSVFMyU4MiU5MiVFNCVCRCU5QyVFNiU4OCU5MCVFMyU4MSU5OSVFMyU4MiU4QiVFMyU4MSVBOCVFMyU4MSU4RCVFMyU4MSVBRSVFNiVCMyVBOCVFNiU4NCU4RiVFNyU4MiVCOSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTM5NzllOGFkOTVkZTZlZGIwYzU2NmY1MWQ1NmE2NjAw&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBid3Rha2FjeSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPWNjMzIxYWJjOWE0OGExMzgwMGNiZTE3YTE0OGI2NjA4&amp;amp;blend-x=242&amp;amp;blend-y=454&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;txt64=UXVpcHBlciBMaW1pdGVk&amp;amp;txt-x=242&amp;amp;txt-y=539&amp;amp;txt-width=838&amp;amp;txt-clip=end%2Cellipsis&amp;amp;txt-color=%231E2121&amp;amp;txt-font=Hiragino%20Sans%20W6&amp;amp;txt-size=28&amp;amp;s=bfe7a508c82874ee1fa54d7a25e20e5b&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、既存のテーブルおよび作成されたテーブルを「&lt;code&gt;\l&lt;/code&gt;」で確認してみると、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;      |       &lt;/span&gt;&lt;span&gt;Owner&lt;/span&gt;&lt;span&gt;       | &lt;/span&gt;&lt;span&gt;Encoding&lt;/span&gt;&lt;span&gt; | Locale &lt;/span&gt;&lt;span&gt;Provider&lt;/span&gt;&lt;span&gt; |   &lt;/span&gt;&lt;span&gt;Collate&lt;/span&gt;&lt;span&gt;   |    Ctype    | ICU Locale | ICU Rules |            Access privileges&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---------------+-------------------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cloudsqladmin | cloudsqladmin     | UTF8     | libc            | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  |            |           |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;testdb        | myuser            | UTF8     | libc            | &lt;/span&gt;&lt;span&gt;ja_JP&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;ja_JP&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt; |            |           | &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;Tc/myuser                             +&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;|                   |          |                 |             |             |            |           | myuser&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;CTc/myuser&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postgres      | cloudsqlsuperuser | UTF8     | libc            | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  |            |           |&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template0     | cloudsqladmin     | UTF8     | libc            | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;&lt;span&gt;  |            |           | &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;c/cloudsqladmin                       +&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;|                   |          |                 |             |             |            |           | cloudsqladmin&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;CTc/cloudsqladmin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template1     | cloudsqlsuperuser | UTF8     | libc            | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;  | &lt;/span&gt;&lt;span&gt;en_US&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UTF8&lt;/span&gt;&lt;span&gt;&lt;span&gt;  |            |           | &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;c/cloudsqlsuperuser                   +&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;|                   |          |                 |             |             |            |           | cloudsqlsuperuser&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;CTc/cloudsqlsuperuser&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rows&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみに、先程作成したユーザーとロールは、Cloud SQLへのセッションを閉じても、Cloud SQL上のインスタンスを停止しても消えません。&lt;/p&gt;&lt;p&gt;また、hostをPythonでホストに設定していた部分を「localhost」からデータベースが置いてあるIPアドレスを指定すれば、これまでと同じようにテーブルの作成、レコードの追加などを行うことが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Query InsightsでDBの状況を確認する。&lt;a href=&quot;#query-insightsでdbの状況を確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;テーブルを作成できたら、DBホストのアドレスを変えること以外は、先程ローカルで作成したPostgreSQLデータベースに対する処理と何も変わらないので、とりあえずNotionの情報をテーブルに格納しておきます。&lt;/p&gt;&lt;p&gt;そして、Cloud SQLのコンソール上でサイドバーにある「Query Insights」をクリックして、Query Insightsを有効にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/54.D6p1RaCj_ZXRwVa.webp&quot; srcset=&quot;/_astro/54.D6p1RaCj_Zt9kb.webp 640w, /_astro/54.D6p1RaCj_Z2mYhlk.webp 750w, /_astro/54.D6p1RaCj_Z1y2iYT.webp 828w, /_astro/54.D6p1RaCj_Z1ifH5r.webp 1080w, /_astro/54.D6p1RaCj_Zj5d8R.webp 1280w, /_astro/54.D6p1RaCj_1nfeth.webp 1668w, /_astro/54.D6p1RaCj_ZXRwVa.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Query Insightsを有効にすると、このようなダッシュボードが表示されました。&lt;/p&gt;&lt;p&gt;認証に失敗するとエラー扱いになるようなので、赤いチャートが目立っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/55.CZYSQKtG_2uJvkd.webp&quot; srcset=&quot;/_astro/55.CZYSQKtG_Z2lHD4s.webp 640w, /_astro/55.CZYSQKtG_lXmIk.webp 750w, /_astro/55.CZYSQKtG_1aUl4K.webp 828w, /_astro/55.CZYSQKtG_2bmlaV.webp 1080w, /_astro/55.CZYSQKtG_Z1TEiGq.webp 1280w, /_astro/55.CZYSQKtG_ZdjQ4h.webp 1668w, /_astro/55.CZYSQKtG_2uJvkd.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クエリのレイテンシー、CPU使用率を確認できて、ディスクストレージがあとどれぐらいで満杯になるかどうかを確認することも出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/56.CTdrdXv0_KKkVi.webp&quot; srcset=&quot;/_astro/56.CTdrdXv0_1c0pRO.webp 640w, /_astro/56.CTdrdXv0_Z1auH8k.webp 750w, /_astro/56.CTdrdXv0_ZlxILT.webp 828w, /_astro/56.CTdrdXv0_rnaM1.webp 1080w, /_astro/56.CTdrdXv0_1qxEIA.webp 1280w, /_astro/56.CTdrdXv0_Z1Wj1sc.webp 1668w, /_astro/56.CTdrdXv0_KKkVi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その他にも色々な指標を確認することが出来ます。個人的には、もう少し大量のデータを参照して、「オペレーション別の処理行数」がどのように推移していくのかを把握しておきたいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/58.CckeRaUr_Za4kyK.webp&quot; srcset=&quot;/_astro/58.CckeRaUr_F9pE7.webp 640w, /_astro/58.CckeRaUr_Z1GlHm2.webp 750w, /_astro/58.CckeRaUr_ZRoJ0B.webp 828w, /_astro/58.CckeRaUr_ZtruI2.webp 1080w, /_astro/58.CckeRaUr_uHYdx.webp 1280w, /_astro/58.CckeRaUr_2c3qPG.webp 1668w, /_astro/58.CckeRaUr_Za4kyK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/59.4Tppjglw_Z69vbM.webp&quot; srcset=&quot;/_astro/59.4Tppjglw_vgIHb.webp 640w, /_astro/59.4Tppjglw_Z1QeoiX.webp 750w, /_astro/59.4Tppjglw_Z12hpWx.webp 828w, /_astro/59.4Tppjglw_ZpwFl4.webp 1080w, /_astro/59.4Tppjglw_yCNAv.webp 1280w, /_astro/59.4Tppjglw_2fXgdE.webp 1668w, /_astro/59.4Tppjglw_Z69vbM.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud SQL Studioでテーブルを参照する。&lt;a href=&quot;#cloud-sql-studioでテーブルを参照する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは次は、Cloud SQL Studioでテーブルの中身を見ていきます。&lt;/p&gt;&lt;p&gt;Cloud SQLのコンソール上でサイドバーにある&lt;code&gt;Cloud SQL Studio&lt;/code&gt;をクリックして開きます。開くとログイン画面になるのでログインして、データベースの中身を確認できるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/60.BYJLLmDB_1b3tmD.webp&quot; srcset=&quot;/_astro/60.BYJLLmDB_Z1JhPL8.webp 640w, /_astro/60.BYJLLmDB_Xoa1E.webp 750w, /_astro/60.BYJLLmDB_1Ml8n5.webp 828w, /_astro/60.BYJLLmDB_QFjdm.webp 1080w, /_astro/60.BYJLLmDB_1PPN9V.webp 1280w, /_astro/60.BYJLLmDB_Z1x0S1Q.webp 1668w, /_astro/60.BYJLLmDB_1b3tmD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;列やシーケンスを確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/61.CkPTuOcF_1oxMM7.webp&quot; srcset=&quot;/_astro/61.CkPTuOcF_yebQY.webp 640w, /_astro/61.CkPTuOcF_Z1NgV9a.webp 750w, /_astro/61.CkPTuOcF_ZYjWMJ.webp 828w, /_astro/61.CkPTuOcF_15aCCP.webp 1080w, /_astro/61.CkPTuOcF_24l7zp.webp 1280w, /_astro/61.CkPTuOcF_Z1jvyBn.webp 1668w, /_astro/61.CkPTuOcF_1oxMM7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、SQLを打ち込めるコンソールもあるので、SELECT文を打てば先程テーブルに格納したレコードを確認することが出来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/62.DkblxLMf_YKWuj.webp&quot; srcset=&quot;/_astro/62.DkblxLMf_Z24EPow.webp 640w, /_astro/62.DkblxLMf_D1aog.webp 750w, /_astro/62.DkblxLMf_1rX8JG.webp 828w, /_astro/62.DkblxLMf_FnMl2.webp 1080w, /_astro/62.DkblxLMf_1EyhhB.webp 1280w, /_astro/62.DkblxLMf_Z1IioTb.webp 1668w, /_astro/62.DkblxLMf_YKWuj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;DBインスタンスを片付ける。&lt;a href=&quot;#dbインスタンスを片付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、お試しに作っただけなので、課金されないように片付けたいと思います。&lt;/p&gt;&lt;p&gt;インスタンスが不要になったら削除したいところですが、削除する前に&lt;code&gt;インスタンスの削除保護&lt;/code&gt;を解除する必要があります。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sql/docs/mysql/deletion-protection?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;インスタンスの削除を防止する | Cloud SQL for MySQL | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この&lt;code&gt;インスタンスの削除保護&lt;/code&gt;の解除は、インスタンスが起動している間にしか行うことが出来ません。なので、停止する前に設定します。
片付けたいDBインスタンスを表示して&lt;code&gt;編集&lt;/code&gt;をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/63.ULAH5KUJ_1TA8PU.webp&quot; srcset=&quot;/_astro/63.ULAH5KUJ_1Ih0KF.webp 640w, /_astro/63.ULAH5KUJ_ZDe7ft.webp 750w, /_astro/63.ULAH5KUJ_aHQ5W.webp 828w, /_astro/63.ULAH5KUJ_1AcXGD.webp 1080w, /_astro/63.ULAH5KUJ_Z2uNFaI.webp 1280w, /_astro/63.ULAH5KUJ_ZNtdxz.webp 1668w, /_astro/63.ULAH5KUJ_1TA8PU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;インスタンスのカスタマイズ&lt;/code&gt;セクションにて、&lt;code&gt;データの保護&lt;/code&gt;の項目で、&lt;code&gt;削除からの保護の有効化&lt;/code&gt;のチェックボックスをオフにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/64.CPF3H5VD_1P8002.webp&quot; srcset=&quot;/_astro/64.CPF3H5VD_Z4V4BE.webp 640w, /_astro/64.CPF3H5VD_Z2rrcCN.webp 750w, /_astro/64.CPF3H5VD_Z1Cuehn.webp 828w, /_astro/64.CPF3H5VD_1vJOPK.webp 1080w, /_astro/64.CPF3H5VD_2uUjMk.webp 1280w, /_astro/64.CPF3H5VD_ZRVmos.webp 1668w, /_astro/64.CPF3H5VD_1P8002.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その状態で保存すると、設定したインスタンスを削除できるようになっています。そしたらインスタンスを削除します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/65.vb0jxDNO_eovBF.webp&quot; srcset=&quot;/_astro/65.vb0jxDNO_ZC6xWY.webp 640w, /_astro/65.vb0jxDNO_25zrON.webp 750w, /_astro/65.vb0jxDNO_Z2aEHCH.webp 828w, /_astro/65.vb0jxDNO_Z4XDwB.webp 1080w, /_astro/65.vb0jxDNO_TbPoX.webp 1280w, /_astro/65.vb0jxDNO_Z2tEPLO.webp 1668w, /_astro/65.vb0jxDNO_eovBF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/66.numtkl9C_1hvLVT.webp&quot; srcset=&quot;/_astro/66.numtkl9C_Z245TFl.webp 640w, /_astro/66.numtkl9C_DA67r.webp 750w, /_astro/66.numtkl9C_1sx4sR.webp 828w, /_astro/66.numtkl9C_X8BMC.webp 1080w, /_astro/66.numtkl9C_1Wj6Jc.webp 1280w, /_astro/66.numtkl9C_Z1qxzrA.webp 1668w, /_astro/66.numtkl9C_1hvLVT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;削除できました。削除するのに1分ほど掛かりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/67.DlpthVir_Z1BHTY7.webp&quot; srcset=&quot;/_astro/67.DlpthVir_8gNeM.webp 640w, /_astro/67.DlpthVir_Z2eejLm.webp 750w, /_astro/67.DlpthVir_Z1phlpV.webp 828w, /_astro/67.DlpthVir_Z1V658o.webp 1080w, /_astro/67.DlpthVir_ZVUAbO.webp 1280w, /_astro/67.DlpthVir_JoQqk.webp 1668w, /_astro/67.DlpthVir_Z1BHTY7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud FunctionsではCloud SQLを使えない。&lt;a href=&quot;#cloud-functionsではcloud-sqlを使えない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回試しにCloud SQLを使ってみて分かったことは、Cloud FunctionsではCloud SQLを使えないということです。&lt;/p&gt;&lt;p&gt;Cloud SQLがリクエストをListen出来る状態にして、Cloud SQLにアクセス出来るようにしなければなりません。&lt;/p&gt;&lt;p&gt;ということで、今回は一旦ここで切り上げて、第2回で何かしらデプロイした環境からCloud SQLを叩けるようにしたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、PythonでNotion APIから取得した情報をCloud SQL上に作成したPostgreSQLデータベースに格納する方法を紹介しました。&lt;/p&gt;&lt;p&gt;そして、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Goは、Notion APIから取得した情報をPostgreSQLに格納するという処理に不向きである。&lt;/li&gt;
&lt;li&gt;SQLAlchemyで一気にInsertできるクエリを作った。&lt;/li&gt;
&lt;li&gt;PostgreSQLのDBに日本語の情報を使う際に、利用するサーバに日本語ロケールを設定する。&lt;/li&gt;
&lt;li&gt;Cloud SQLを利用するために、Cloud SQL Auth Proxy クライアントをインストールすると楽ができる。&lt;/li&gt;
&lt;li&gt;PostgreSQLの仕様で、GRANTで新規ユーザーに何かしらのロールを割り当てないと、そのユーザー用にテーブルを作成できない。&lt;/li&gt;
&lt;li&gt;Cloud SQLのQuery InsightsでDBの状況を確認出来る。&lt;/li&gt;
&lt;li&gt;Cloud SQL Studioでテーブルを参照することが出来る。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;SQLAlchemyを使った格納処理が出来てしまえば、Cloud SQLのインスタンスを参照する部分はそこまで大変ではありませんでした。Cloud SQL使いやすかったです。&lt;/p&gt;&lt;p&gt;それから、今回作ったテーブルと同じようなものを再度作ってみて、Cloud SQLにかかる費用を確認してみたいですね・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、形になったぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;たまにはPythonも気持ちいいですねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>40万円で手に入れた2つのPCの性能のベンチマークを比較する（第1回：3DMarkとCinebench）</title><link>https://endorphinbath.com/posts/making-gaming-pc-first-vs-pc/</link><guid isPermaLink="true">https://endorphinbath.com/posts/making-gaming-pc-first-vs-pc/</guid><description>Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのベンチマークを比較した記事です。</description><pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;組み立てが終わったなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあPCを試すか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの性能をまとめておきたい。&lt;a href=&quot;#pcの性能をまとめておきたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、初めて自作したPCを使ってベンチマークテストやらゲームのFPSの比較結果を記録しておきました。以前に同じぐらいの価格で購入して使っていたゲーミングノートPCからどれぐらい性能が向上したのかを検証しています。&lt;/p&gt;&lt;p&gt;2年前に40万円で買ったノートPCと、その2年後に40万円で自作したゲーミングデスクトップのベンチマークを計測して比較した記事です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの構成&lt;a href=&quot;#pcの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回比較していく2台のPCの構成はこれらで行きます。&lt;/p&gt;&lt;p&gt;エントリーナンバー1番、「ROG Strix SCAR 17 G733ZX-I9R3080T」です。ゲーミングノートPCです。2022年に新品で¥399,800で購入しました。&lt;/p&gt;&lt;a href=&quot;https://rog.asus.com/jp/laptops/rog-strix/rog-strix-scar-17-2022-series/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://rog.asus.com/rog/nuxtStatic/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@ROG&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ROG Strix Scar 17 (2022) G733&lt;/div&gt;&lt;div&gt;描かれるフレーム数が増えた最新の2022 ROG Strix SCARなら、たくさんのゲームに勝利できます。最大55WのCPUインテル® Core™ i9-12900Hと最大150WのTGPを備えたNVIDIA® GeForce RTX™ 3080Ti Laptop GPUが、あらゆる敵に勝利します。PCIe® 4.0 x4 SSDを搭載しており、読み込み画面に悩ませられることはもうありません。DDR5メモリにより帯域幅とスループットが向上したSCARは、競合他社のモデルとは大きく異なります。&lt;/div&gt;&lt;div&gt;rog.asus.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://dlcdnwebimgs.asus.com/gain/1B5E5B13-DB17-40F5-9F71-C4127C6C7693&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX™ 3080 Ti Laptop&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core™ i9-12900H&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;ASUSTeK Computer Inc. G733ZX 1.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;SK Hynix  HMCG78MEBSA095N (16GB x2)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;分からん。(1TB)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;エントリーナンバー2番、最近組んだ自作デスクトップゲーミングPCです。パーツのあれこれの内容は以下の通りで、全て2024年に購入して合計金額が¥426,678でした。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;NVIDIA GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;192,891&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/4g4kPW0&quot; target=&quot;_blank&quot;&gt;AMD Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;104,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;ADATA_XPG_LANCER_RGB_AX5U6400C3216G-DCLARWH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;23,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N&lt;/a&gt;&lt;/td&gt;&lt;td&gt;17,780&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Supply Unit&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Cooler&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238/&quot; target=&quot;_blank&quot;&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Fan&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;DEEP COOL FK120 R-FK120-BKNPF1-G-1&lt;/a&gt; x2&lt;/td&gt;&lt;td&gt;2,752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PC Case&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332/&quot; target=&quot;_blank&quot;&gt;Antec FLUX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;td&gt;15,182&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;エントリーナンバー2番の自作PCの、各パーツを選ぶ過程は、別の記事に載せておきました。よければご参考いただければと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-for-the-first-time/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241018_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;組み立ての過程は、別の記事に載せておきました。ハードウェア面の参考にどうぞ。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-assembly/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241111_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パーツ毎の性能値の比較&lt;a href=&quot;#パーツ毎の性能値の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは性能を比較していきましょう。&lt;/p&gt;&lt;p&gt;まずは、パーツ毎に各メーカーから公表されている値を比較します。&lt;a href=&quot;https://www.cpuid.com/softwares/cpu-z.html&quot; target=&quot;_blank&quot;&gt;CPU-Z&lt;/a&gt;から手に入れた情報もあります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;CPU&lt;a href=&quot;#cpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;CPUは、2年前はIntel Coreシリーズ、その2年後はAMD Ryzenシリーズとしています。&lt;/p&gt;&lt;p&gt;自作デスクトップが積んでいるCPUの方が、コア数、スレッド数、クロック周波数など、殆どの指標において向上しています。そこに加えてTDPも2倍以上に増えていますが、デスクトップの最大の利点と言ってもいい排熱性能は仕上げたつもりなので、おそらくCPU本来の能力がちゃんと引き出されて、より高いパフォーマンスを出せると思います。あと、L3キャッシュの容量も24MBから128MBに増えました。ここが増えたのでかなりゲーム性能が上がりそうです。&lt;/p&gt;








































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.intel.co.jp/content/www/jp/ja/products/sku/132214/intel-core-i912900h-processor-24m-cache-up-to-5-00-ghz/specifications.html&quot; target=&quot;_blank&quot;&gt;Intel® Core™ i9-12900H&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/desktops/ryzen/7000-series/amd-ryzen-9-7950x3d.html&quot; target=&quot;_blank&quot;&gt;AMD Ryzen™ 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;発売日&lt;/td&gt;&lt;td&gt;2022年第1四半期&lt;/td&gt;&lt;td&gt;2023年1月&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プラットフォーム&lt;/td&gt;&lt;td&gt;モバイル&lt;/td&gt;&lt;td&gt;デスクトップ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コア数&lt;/td&gt;&lt;td&gt;14（パフォーマンスコア：6、効率コア：8）&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スレッド数&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ベースクロック周波数&lt;/td&gt;&lt;td&gt;3.8 GHz（効率コア）&lt;/td&gt;&lt;td&gt;4.2 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大ブーストクロック周波数&lt;/td&gt;&lt;td&gt;最大5.0 GHz（パフォーマンスコア）&lt;/td&gt;&lt;td&gt;最大5.7 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L1キャッシュ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L2キャッシュ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;16 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;L3キャッシュ&lt;/td&gt;&lt;td&gt;24 MB&lt;/td&gt;&lt;td&gt;128 MB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;製造プロセス&lt;/td&gt;&lt;td&gt;Intel 7 (FinFET)&lt;/td&gt;&lt;td&gt;TSMC 5nm FinFET&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TDP（熱設計電力）&lt;/td&gt;&lt;td&gt;45 W&lt;/td&gt;&lt;td&gt;120 W&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メモリタイプ&lt;/td&gt;&lt;td&gt;DDR5-4800、DDR4-3200、LPDDR5-5200、LPDDR4x-4267&lt;/td&gt;&lt;td&gt;2x1R DDR5-5200、2x2R DDR5-5200、4x1R DDR5-3600、4x2R DDR5-3600&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大メモリサイズ&lt;/td&gt;&lt;td&gt;64 GB&lt;/td&gt;&lt;td&gt;128 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;内蔵グラフィックス&lt;/td&gt;&lt;td&gt;Intel® Iris® Xe Graphics&lt;/td&gt;&lt;td&gt;AMD Radeon™ Graphics&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;グラフィックス最大周波数&lt;/td&gt;&lt;td&gt;1.45 GHz&lt;/td&gt;&lt;td&gt;2.2 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PCI Expressバージョン&lt;/td&gt;&lt;td&gt;PCIe 4.0&lt;/td&gt;&lt;td&gt;PCIe 5.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ソケット&lt;/td&gt;&lt;td&gt;FCBGA1744&lt;/td&gt;&lt;td&gt;AM5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大動作温度&lt;/td&gt;&lt;td&gt;100°C&lt;/td&gt;&lt;td&gt;89°C&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;RAM&lt;a href=&quot;#ram&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ROG Strixの方のメモリ性能は&lt;a href=&quot;https://product.skhynix.com/products/dram/module.go&quot; target=&quot;_blank&quot;&gt;この公式ページ&lt;/a&gt;から確認しました。どちらもDRAMの製造はSK Hynixですが、自作デスクトップPCの方が、CAS Latencyおよびクロック周波数が向上しています。&lt;/p&gt;






















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Part Number&lt;/td&gt;&lt;td&gt;HMCG78MEBSA095N&lt;/td&gt;&lt;td&gt;AX5U6400C3216G-DCLARWH&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Module Manuf.&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;td&gt;A-DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DRAM Manuf.&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;td&gt;SK Hynix&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Capacity&lt;/td&gt;&lt;td&gt;16GB x2&lt;/td&gt;&lt;td&gt;16GB x2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Speed (MT/s)&lt;/td&gt;&lt;td&gt;4800&lt;/td&gt;&lt;td&gt;6400&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Timing&lt;/td&gt;&lt;td&gt;40-39-39&lt;/td&gt;&lt;td&gt;32-39-39&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DRAM Type&lt;/td&gt;&lt;td&gt;DDR5&lt;/td&gt;&lt;td&gt;DDR5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Module Type&lt;/td&gt;&lt;td&gt;SO-DIMM&lt;/td&gt;&lt;td&gt;UDIMM&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Voltage (V)&lt;/td&gt;&lt;td&gt;1.10&lt;/td&gt;&lt;td&gt;1.35&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GPU&lt;a href=&quot;#gpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GPUも、ノートPCから自作デスクトップになって、CPUと同様に殆どの性能が向上しています。CUDAコアやクロック周波数が1.4～2倍に向上して、VRAMもGDDR6Xになって帯域幅が上昇しているようです。&lt;/p&gt;&lt;p&gt;デスクトップ用のGeForce RTX 3080と比べても全体的な性能がかなり向上しています。&lt;/p&gt;
























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;- （参考）&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/laptops/30-series/&quot; target=&quot;_blank&quot;&gt;GeForce RTX 3080 Ti Laptop GPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-specs&quot; target=&quot;_blank&quot;&gt;GeForceRTX 3080&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CUDA Core&lt;/td&gt;&lt;td&gt;7424&lt;/td&gt;&lt;td&gt;8704&lt;/td&gt;&lt;td&gt;10240&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Shader Core (TFLOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ray-Tracing Core (TFLOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tensor Core (AI TOPS)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;836&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Boost Clock (GHz)&lt;/td&gt;&lt;td&gt;1.59&lt;/td&gt;&lt;td&gt;1.71&lt;/td&gt;&lt;td&gt;2.55&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Base Clock (GHz)&lt;/td&gt;&lt;td&gt;1.125&lt;/td&gt;&lt;td&gt;1.26 / 1.44&lt;/td&gt;&lt;td&gt;2.29&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Type&lt;/td&gt;&lt;td&gt;GDDR6&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Video Random Access Memory (dedicated: GB)&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;12 / 10&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Memory Interface Width (Bit)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;384 / 320&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Max GPU Temperature (C)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Average Power Consumption (W)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;246&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;System Requirements Power (W)&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;SSDは片方が特定できなかったので比較はしません。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;CrystalDiskMark&lt;a href=&quot;#crystaldiskmark&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずはSSDの性能から見ていきます。デフォルト設定の「5 1GiB」で測定しました。
それでは、エントリーナンバー1番、「ROG Strix SCAR 17 G733ZX-I9R3080T」（2022年）です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/61.C4jDTkGh_Z3MWWS.webp&quot; srcset=&quot;/_astro/61.C4jDTkGh_Z1LJ7ob.webp 640w, /_astro/61.C4jDTkGh_UVSoB.webp 750w, /_astro/61.C4jDTkGh_1JSQK2.webp 828w, /_astro/61.C4jDTkGh_Znb87a.webp 1080w, /_astro/61.C4jDTkGh_AYlOp.webp 1280w, /_astro/61.C4jDTkGh_2ijNry.webp 1668w, /_astro/61.C4jDTkGh_Z3MWWS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、エントリーナンバー2番、自作デスクトップゲーミングPC（2024年）です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/62.D4QQzcA-_Z2bHSjr.webp&quot; srcset=&quot;/_astro/62.D4QQzcA-_Z2kVVhT.webp 640w, /_astro/62.D4QQzcA-_mJ4uS.webp 750w, /_astro/62.D4QQzcA-_1bG2Qj.webp 828w, /_astro/62.D4QQzcA-_Z2v63sI.webp 1080w, /_astro/62.D4QQzcA-_Z1vUyw9.webp 1280w, /_astro/62.D4QQzcA-_aoS60.webp 1668w, /_astro/62.D4QQzcA-_Z2bHSjr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれぇ、デスクトップの方が弱くないか・・・？&lt;/p&gt;&lt;p&gt;シーケンシャルリード(SEQ1M)ではROG Strixが大幅に高速。特にマルチスレッド(Q8T1)での読み込み性能の差が顕著です。&lt;/p&gt;&lt;p&gt;自作デスクトップは書き込み性能、特にSEQ1Mでのマルチスレッドライト(Q8T1)でROG Strixを上回っています。&lt;/p&gt;&lt;p&gt;ランダムアクセス(RND4K)では、両者の性能差は比較的少ないですね。ゲームのワールド生成はROG Strixの方が速かったりするんでしょうかね？　ゲームのセーブ作業は自作デスクトップの方が速そう。&lt;/p&gt;


























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;テスト項目&lt;/th&gt;&lt;th&gt;ROG Strix (MB/s)&lt;/th&gt;&lt;th&gt;自作デスクトップ (MB/s)&lt;/th&gt;&lt;th&gt;増減値 (MB/s)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;SEQ1M Q8T1 Read&lt;/td&gt;&lt;td&gt;6802.64&lt;/td&gt;&lt;td&gt;5049.60&lt;/td&gt;&lt;td&gt;-1753.04&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SEQ1M Q8T1 Write&lt;/td&gt;&lt;td&gt;2230.18&lt;/td&gt;&lt;td&gt;3949.01&lt;/td&gt;&lt;td&gt;1718.83&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SEQ1M Q1T1 Read&lt;/td&gt;&lt;td&gt;3630.20&lt;/td&gt;&lt;td&gt;2934.34&lt;/td&gt;&lt;td&gt;-695.86&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SEQ1M Q1T1 Write&lt;/td&gt;&lt;td&gt;2214.47&lt;/td&gt;&lt;td&gt;3912.13&lt;/td&gt;&lt;td&gt;1697.66&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RND4K Q32T1 Read&lt;/td&gt;&lt;td&gt;743.80&lt;/td&gt;&lt;td&gt;700.83&lt;/td&gt;&lt;td&gt;-42.97&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RND4K Q32T1 Write&lt;/td&gt;&lt;td&gt;601.61&lt;/td&gt;&lt;td&gt;374.84&lt;/td&gt;&lt;td&gt;-226.77&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RND4K Q1T1 Read&lt;/td&gt;&lt;td&gt;58.12&lt;/td&gt;&lt;td&gt;53.05&lt;/td&gt;&lt;td&gt;-5.07&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RND4K Q1T1 Write&lt;/td&gt;&lt;td&gt;268.01&lt;/td&gt;&lt;td&gt;264.47&lt;/td&gt;&lt;td&gt;-3.54&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cinebench + Hardware Monitor&lt;a href=&quot;#cinebench--hardware-monitor&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;新しい方が負けてるって、なんか不穏な始まり方ですね・・・。まあ、気を取り直して次の計測に参りましょう。&lt;/p&gt;&lt;p&gt;次は、CinebenchでCG画像のレンダリング性能を見てみます。CPUのシングルコア、CPUのマルチコア、GPUの3種類で計測します。そして、その間のCPUとGPUの状態をHardware Monitorでモニタリングしていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ROG Strixのテスト&lt;a href=&quot;#rog-strixのテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは古いノートPCの方からです。CPUのマルチコアによるレンダリングでは、CPUの温度は90℃周辺を推移しました・・・。全然排熱できてない・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/71.CI9FDP6F_Z29CqYx.webp&quot; srcset=&quot;/_astro/71.CI9FDP6F_hdqPN.webp 640w, /_astro/71.CI9FDP6F_Z25hGal.webp 750w, /_astro/71.CI9FDP6F_Z1gkHNU.webp 828w, /_astro/71.CI9FDP6F_Z2t0B8O.webp 1080w, /_astro/71.CI9FDP6F_Z1tP7cf.webp 1280w, /_astro/71.CI9FDP6F_cukpT.webp 1668w, /_astro/71.CI9FDP6F_Z29CqYx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUのシングルコアの方では、マルチコアほどCPUの温度は上がりませんでした。CPUのレンダリングスコアはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/72.CK0RhQGW_ZI3Qk2.webp&quot; srcset=&quot;/_astro/72.CK0RhQGW_Z1D1W3B.webp 640w, /_astro/72.CK0RhQGW_14E3Jb.webp 750w, /_astro/72.CK0RhQGW_1SB25B.webp 828w, /_astro/72.CK0RhQGW_Z12r1tj.webp 1080w, /_astro/72.CK0RhQGW_Z3gwwJ.webp 1280w, /_astro/72.CK0RhQGW_1D3U5p.webp 1668w, /_astro/72.CK0RhQGW_ZI3Qk2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら最後に、GPUによるレンダリングテストです。GPUも相変わらず高い温度を推移しています・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/73.DkQHwAbs_1mtWDT.webp&quot; srcset=&quot;/_astro/73.DkQHwAbs_1xctCL.webp 640w, /_astro/73.DkQHwAbs_ZOiDnn.webp 750w, /_astro/73.DkQHwAbs_ZlF1W.webp 828w, /_astro/73.DkQHwAbs_136MuC.webp 1080w, /_astro/73.DkQHwAbs_22hhrc.webp 1280w, /_astro/73.DkQHwAbs_Z1lzoJA.webp 1668w, /_astro/73.DkQHwAbs_1mtWDT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;GPUのレンダリングスコアが出ました。ふむふむ、なるほどです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/74.DlNx2llc_2ipYXl.webp&quot; srcset=&quot;/_astro/74.DlNx2llc_Z41oi2.webp 640w, /_astro/74.DlNx2llc_Z2qwwjb.webp 750w, /_astro/74.DlNx2llc_Z1BzxWK.webp 828w, /_astro/74.DlNx2llc_1Y2OO4.webp 1080w, /_astro/74.DlNx2llc_Z26XO3i.webp 1280w, /_astro/74.DlNx2llc_ZpDmq9.webp 1668w, /_astro/74.DlNx2llc_2ipYXl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自作デスクトップのテスト&lt;a href=&quot;#自作デスクトップのテスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、新しいデスクトップPCのテストです。初めはCPUのマルチコアによるレンダリングテストで、CPUの温度は80℃後半以下を推移しました。まあ問題ないレベルではないでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/75.BIIAuqDs_2gmGFo.webp&quot; srcset=&quot;/_astro/75.BIIAuqDs_Ze5OJN.webp 640w, /_astro/75.BIIAuqDs_2tAb2Y.webp 750w, /_astro/75.BIIAuqDs_Z1LDYpw.webp 828w, /_astro/75.BIIAuqDs_1VYww7.webp 1080w, /_astro/75.BIIAuqDs_Z2927lf.webp 1280w, /_astro/75.BIIAuqDs_ZrGEI6.webp 1668w, /_astro/75.BIIAuqDs_2gmGFo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUのシングルコアによるレンダリングテストのスコアが出ました。なんか数字が増えたような・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/76.COY0CswP_ZAeIrb.webp&quot; srcset=&quot;/_astro/76.COY0CswP_19k63R.webp 640w, /_astro/76.COY0CswP_Z1db1Wh.webp 750w, /_astro/76.COY0CswP_Zoe3AQ.webp 828w, /_astro/76.COY0CswP_ZTBSAs.webp 1080w, /_astro/76.COY0CswP_4xAl7.webp 1280w, /_astro/76.COY0CswP_1KS2Xg.webp 1668w, /_astro/76.COY0CswP_ZAeIrb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、GPUのレンダリングテストです。50℃周辺を推移していて、かなりちゃんと冷ませていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/77.Tvonlt84_FUQAf.webp&quot; srcset=&quot;/_astro/77.Tvonlt84_11PwvQ.webp 640w, /_astro/77.Tvonlt84_Z1kEAui.webp 750w, /_astro/77.Tvonlt84_ZvHC8R.webp 828w, /_astro/77.Tvonlt84_mxGqX.webp 1080w, /_astro/77.Tvonlt84_1lIbnx.webp 1280w, /_astro/77.Tvonlt84_Z228uNf.webp 1668w, /_astro/77.Tvonlt84_FUQAf.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;GPUのレンダリングのスコアが出ました。かなり数字が増えたような・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/78.CLdZoH_a_Z1AKATK.webp&quot; srcset=&quot;/_astro/78.CLdZoH_a_2gnLDN.webp 640w, /_astro/78.CLdZoH_a_Z67lml.webp 750w, /_astro/78.CLdZoH_a_HOBY5.webp 828w, /_astro/78.CLdZoH_a_Z1U8L42.webp 1080w, /_astro/78.CLdZoH_a_ZUXh7s.webp 1280w, /_astro/78.CLdZoH_a_KmauG.webp 1668w, /_astro/78.CLdZoH_a_Z1AKATK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CinebenchおよびHardware Monitorの結果の比較&lt;a href=&quot;#cinebenchおよびhardware-monitorの結果の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が、CinebenchおよびHardware Monitorの測定結果を比較した表です。
パーツの性能が上がったことも然り、ちゃんと冷却されているおかげでそのパーツの性能をしっかり引き出せていることが窺えます。
古いノートPCの方も一応、Core i9ですからね。なのに、マルチコアのスコアは2倍の差が付いています。あまりチップの温度が上がらないシングルコアのテストではあまり差が付いていませんね。やはり冷却性能が大事ですね・・・。
GPUもデスクトップの方では大方の性能は出せていそうです。これはゲームの画質に期待できそう。
逆に、パーツの性能が上がったことで消費電力の数値も上がりましたね・・・。毎月の電気代が増えるなあ・・・。&lt;/p&gt;


















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,514 MHz (4,200 MHz))&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Score (Multi core)&lt;/td&gt;&lt;td&gt;889&lt;/td&gt;&lt;td&gt;1,952&lt;/td&gt;&lt;td&gt;2.20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Temperature (Multi core: ℃)&lt;/td&gt;&lt;td&gt;90.0&lt;/td&gt;&lt;td&gt;72.7&lt;/td&gt;&lt;td&gt;0.81&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Power (Multi core: W)&lt;/td&gt;&lt;td&gt;67.48&lt;/td&gt;&lt;td&gt;123.08&lt;/td&gt;&lt;td&gt;1.82&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Score (Single core)&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;1.15&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Temperature (Single core: ℃)&lt;/td&gt;&lt;td&gt;74.0&lt;/td&gt;&lt;td&gt;57.8&lt;/td&gt;&lt;td&gt;0.78&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Power (Single core: W)&lt;/td&gt;&lt;td&gt;29.48&lt;/td&gt;&lt;td&gt;61.92&lt;/td&gt;&lt;td&gt;2.10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU MP Ratio (x)&lt;/td&gt;&lt;td&gt;8.9&lt;/td&gt;&lt;td&gt;17.02&lt;/td&gt;&lt;td&gt;1.91&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,805 MHz (2,295 MHz))&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU Score&lt;/td&gt;&lt;td&gt;10,628&lt;/td&gt;&lt;td&gt;24,555&lt;/td&gt;&lt;td&gt;2.31&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU Temperature (℃)&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;0.50&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU Power (W)&lt;/td&gt;&lt;td&gt;132.27&lt;/td&gt;&lt;td&gt;185.69&lt;/td&gt;&lt;td&gt;1.40&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3DMark&lt;a href=&quot;#3dmark&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次は、3DMarkによるテストを行っていきます。様々なケースでPCのベンチマークを取ることが出来ます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;テスト1：Steel Nomad&lt;a href=&quot;#テスト1steel-nomad&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最初に行うテスト「Steel Nomad」は、クロスプラットフォームで、レイトレーシングを使用しない、高性能ゲーミングPC向けのベンチマークです。WindowsではDirectX 12 APIを使用します。描画する画質は4K(3840×2160)です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/81.BRRypnUV_1kE3Bb.webp&quot; srcset=&quot;/_astro/81.BRRypnUV_Z1yXyBb.webp 640w, /_astro/81.BRRypnUV_18HrbB.webp 750w, /_astro/81.BRRypnUV_1WEpx2.webp 828w, /_astro/81.BRRypnUV_11gSrT.webp 1080w, /_astro/81.BRRypnUV_20rnot.webp 1280w, /_astro/81.BRRypnUV_Z1npiMj.webp 1668w, /_astro/81.BRRypnUV_1kE3Bb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出力している映像の画質は同じなのでFPSによる比較になりますが、自作デスクトップの方が2.4倍も高いFPSを出せていました。4K画質で60FPS出れば上々ではないでしょうか。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Score&lt;/td&gt;&lt;td&gt;2611&lt;/td&gt;&lt;td&gt;6278&lt;/td&gt;&lt;td&gt;+ 140.4 %&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Score&lt;/td&gt;&lt;td&gt;2611&lt;/td&gt;&lt;td&gt;6278&lt;/td&gt;&lt;td&gt;+ 140.4 %&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test&lt;/td&gt;&lt;td&gt;26.12 FPS&lt;/td&gt;&lt;td&gt;62.78 FPS&lt;/td&gt;&lt;td&gt;+ 140.4 %&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;テスト結果の比較です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト2：CPU Profile&lt;a href=&quot;#テスト2cpu-profile&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3DMark CPU Profileは、CPUベンチマーキングに新しいアプローチを導入します。単一のスコアを生成するのではなく、3DMark CPU Profileは、使用するコア数とスレッド数に応じて、CPUのパフォーマンスがどのように変化し、拡張されるかを示します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/82.BTi2PD31_1hXLU2.webp&quot; srcset=&quot;/_astro/82.BTi2PD31_1d2Omi.webp 640w, /_astro/82.BTi2PD31_Z19siDQ.webp 750w, /_astro/82.BTi2PD31_Zkvkiq.webp 828w, /_astro/82.BTi2PD31_XABKK.webp 1080w, /_astro/82.BTi2PD31_1WL6Hk.webp 1280w, /_astro/82.BTi2PD31_Z1q5zts.webp 1668w, /_astro/82.BTi2PD31_1hXLU2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
1スレッドのみの処理では10%の差しかありませんが、スレッドの数が増える毎にどんどん差が開いていって、16スレッドでは自作デスクトップの方が1.85倍も高い性能を発揮できていました。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;














































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Max threads&lt;/td&gt;&lt;td&gt;7913&lt;/td&gt;&lt;td&gt;14313&lt;/td&gt;&lt;td&gt;+80.88%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16 threads&lt;/td&gt;&lt;td&gt;7281&lt;/td&gt;&lt;td&gt;13475&lt;/td&gt;&lt;td&gt;+85.07%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8 threads&lt;/td&gt;&lt;td&gt;5477&lt;/td&gt;&lt;td&gt;7838&lt;/td&gt;&lt;td&gt;+43.11%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4 threads&lt;/td&gt;&lt;td&gt;3370&lt;/td&gt;&lt;td&gt;4175&lt;/td&gt;&lt;td&gt;+23.89%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2 threads&lt;/td&gt;&lt;td&gt;1857&lt;/td&gt;&lt;td&gt;2137&lt;/td&gt;&lt;td&gt;+15.08%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1 threads&lt;/td&gt;&lt;td&gt;958&lt;/td&gt;&lt;td&gt;1071&lt;/td&gt;&lt;td&gt;+11.80%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト3：Fire Strike&lt;a href=&quot;#テスト3fire-strike&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Fire Strikeは、ゲーミングPC用のDirectX 11ベンチマークです。 Fire Strikeには、グラフィックスを2種類、物理演算を1種類、CPUとGPUの両方に負荷を掛けるコンバインテストの計4種類のテストが含まれています。2024-12-03時点ですと、けっこう古く軽めのテストになってしまっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/83.GvOOsZXZ_Y4C0q.webp&quot; srcset=&quot;/_astro/83.GvOOsZXZ_1QsbOy.webp 640w, /_astro/83.GvOOsZXZ_Zv2VbA.webp 750w, /_astro/83.GvOOsZXZ_iT29P.webp 828w, /_astro/83.GvOOsZXZ_EGrQ9.webp 1080w, /_astro/83.GvOOsZXZ_1DQVMI.webp 1280w, /_astro/83.GvOOsZXZ_Z1IYJo4.webp 1668w, /_astro/83.GvOOsZXZ_Y4C0q.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
ROG Strixでも高いFPSが出ていますが、自作デスクトップだとその1.5～2倍のFPSを打ち出せています。このレベルの画質でアクションゲームを遊べる時代になったのですね・・・。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;


























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Test Category&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change (%)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Score&lt;/td&gt;&lt;td&gt;23 095&lt;/td&gt;&lt;td&gt;43 057&lt;/td&gt;&lt;td&gt;+86.4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Score&lt;/td&gt;&lt;td&gt;26 074&lt;/td&gt;&lt;td&gt;51 653&lt;/td&gt;&lt;td&gt;+98.1%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Physics Score&lt;/td&gt;&lt;td&gt;23 518&lt;/td&gt;&lt;td&gt;37 147&lt;/td&gt;&lt;td&gt;+58.0%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Combined Score&lt;/td&gt;&lt;td&gt;12 260&lt;/td&gt;&lt;td&gt;21 428&lt;/td&gt;&lt;td&gt;+74.8%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 1&lt;/td&gt;&lt;td&gt;122.70 FPS&lt;/td&gt;&lt;td&gt;238.20 FPS&lt;/td&gt;&lt;td&gt;+94.1%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 2&lt;/td&gt;&lt;td&gt;105.35 FPS&lt;/td&gt;&lt;td&gt;212.43 FPS&lt;/td&gt;&lt;td&gt;+101.6%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Physics Test&lt;/td&gt;&lt;td&gt;74.66 FPS&lt;/td&gt;&lt;td&gt;117.93 FPS&lt;/td&gt;&lt;td&gt;+58.0%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Combined Test&lt;/td&gt;&lt;td&gt;57.03 FPS&lt;/td&gt;&lt;td&gt;99.67 FPS&lt;/td&gt;&lt;td&gt;+74.8%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト4：Time Spy&lt;a href=&quot;#テスト4time-spy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程行った「Steel Nomad」の前身、「Fire Strike」の後継のテストです。
Time Spyは、Windows 10を搭載したゲーミングPC用のDirectX 12ベンチマークテストです。 Time Spyには、グラフィックステストが2種類とCPUテストが1種類含まれています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/84.BBQfKHBS_lKX1L.webp&quot; srcset=&quot;/_astro/84.BBQfKHBS_Z1AToW0.webp 640w, /_astro/84.BBQfKHBS_16LAPM.webp 750w, /_astro/84.BBQfKHBS_1UIzcd.webp 828w, /_astro/84.BBQfKHBS_2nMRu.webp 1080w, /_astro/84.BBQfKHBS_11yhO4.webp 1280w, /_astro/84.BBQfKHBS_Z2miomI.webp 1668w, /_astro/84.BBQfKHBS_lKX1L.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
全体的にスコアが上昇して、FPSが2.5倍以上になっています。CPUのみだと50FPS近く出せるようになったみたいですね。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;














































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Score&lt;/td&gt;&lt;td&gt;9,634&lt;/td&gt;&lt;td&gt;23,578&lt;/td&gt;&lt;td&gt;+ 144.74%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Score&lt;/td&gt;&lt;td&gt;9,807&lt;/td&gt;&lt;td&gt;26,336&lt;/td&gt;&lt;td&gt;+ 168.54%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Score&lt;/td&gt;&lt;td&gt;8,761&lt;/td&gt;&lt;td&gt;14,799&lt;/td&gt;&lt;td&gt;+ 68.92%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 1&lt;/td&gt;&lt;td&gt;65.00 FPS&lt;/td&gt;&lt;td&gt;171.78 FPS&lt;/td&gt;&lt;td&gt;+ 164.28%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 2&lt;/td&gt;&lt;td&gt;55.42 FPS&lt;/td&gt;&lt;td&gt;150.89 FPS&lt;/td&gt;&lt;td&gt;+ 172.27%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Test&lt;/td&gt;&lt;td&gt;29.44 FPS&lt;/td&gt;&lt;td&gt;49.72 FPS&lt;/td&gt;&lt;td&gt;+ 68.89%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト5：Speed Way&lt;a href=&quot;#テスト5speed-way&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Speed Wayは、Windows 10および11を実行するレイトレーシング対応のゲーミングPC用のDirectX 12 Ultimateベンチマークです。Speed Wayのエンジンは、DirectX 12 Ultimateがレイトレースゲームに持ってくる新機能を示すように構成されています。描画される画質はWQHD(2560 × 1440)です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/85.ByyAtXl5_26XLtX.webp&quot; srcset=&quot;/_astro/85.ByyAtXl5_Z1HrPbt.webp 640w, /_astro/85.ByyAtXl5_10eaBj.webp 750w, /_astro/85.ByyAtXl5_1Ob8WJ.webp 828w, /_astro/85.ByyAtXl5_1MABkG.webp 1080w, /_astro/85.ByyAtXl5_Z2iq2wF.webp 1280w, /_astro/85.ByyAtXl5_ZB5zTw.webp 1668w, /_astro/85.ByyAtXl5_26XLtX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
レイトレーシングが必要な状況では、WQHDで70FPSが出せるようになりました。以前のノートPCだと30FPSも出せなかったんですね。レイトレーシングが使われるのであれば、映像の滑らかさも欲しいところです。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Score&lt;/td&gt;&lt;td&gt;2,775&lt;/td&gt;&lt;td&gt;7,009&lt;/td&gt;&lt;td&gt;+ 152.6%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Score&lt;/td&gt;&lt;td&gt;2,775&lt;/td&gt;&lt;td&gt;7,009&lt;/td&gt;&lt;td&gt;+ 152.6%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test&lt;/td&gt;&lt;td&gt;27.76 FPS&lt;/td&gt;&lt;td&gt;70.10 FPS&lt;/td&gt;&lt;td&gt;+ 152.6%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト6：Fire Strike Ultra&lt;a href=&quot;#テスト6fire-strike-ultra&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Fire Strike Ultraは、ゲーミングPC用のDirectX 11ベンチマークです。 先程紹介した通り、Fire Strikeにはグラフィックステストが2種類、物理演算テストが1種類、CPUとGPUの両方に負荷を掛けるコンバインテストが含まれています。しかしながら、レンダリング解像度が普通のものとは異なっています。レンダリング解像度が、1080pの4倍に相当する3840 × 2160 (4K UHD)に引き上げます。 4Kモニターは必須ではありませんが、グラフィックカードには少なくとも3GBのメモリが必要らしいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/86.Cjcgrloi_14ykCD.webp&quot; srcset=&quot;/_astro/86.Cjcgrloi_Zqru6b.webp 640w, /_astro/86.Cjcgrloi_2hevGB.webp 750w, /_astro/86.Cjcgrloi_Z1Y0DKT.webp 828w, /_astro/86.Cjcgrloi_Kbatm.webp 1080w, /_astro/86.Cjcgrloi_1JlEpV.webp 1280w, /_astro/86.Cjcgrloi_Z1Dv1KQ.webp 1668w, /_astro/86.Cjcgrloi_14ykCD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
先程のFire Strikeでは200FPSぐらい出せましたが、4K画質となると流石に手強いようですね・・・。（先程のFire Strikeの画質はFull HDでした。）自作デスクトップで実際に出せたFPSは、30～70ぐらいでした。ROG Strixだと10～50ぐらい。WQHDでもう少し滑らかにした方がゲーム体験は良いものになりそうです。
Measured Machines&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores&lt;/p&gt;


























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3DMark Score&lt;/td&gt;&lt;td&gt;6,954&lt;/td&gt;&lt;td&gt;15,275&lt;/td&gt;&lt;td&gt;+119.7%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Score&lt;/td&gt;&lt;td&gt;6,791&lt;/td&gt;&lt;td&gt;15,426&lt;/td&gt;&lt;td&gt;+127.2%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Physics Score&lt;/td&gt;&lt;td&gt;26,624&lt;/td&gt;&lt;td&gt;37,732&lt;/td&gt;&lt;td&gt;+41.7%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Combined Score&lt;/td&gt;&lt;td&gt;3,607&lt;/td&gt;&lt;td&gt;7,770&lt;/td&gt;&lt;td&gt;+115.4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 1&lt;/td&gt;&lt;td&gt;34.74 FPS&lt;/td&gt;&lt;td&gt;84.89 FPS&lt;/td&gt;&lt;td&gt;+144.4%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphics Test 2&lt;/td&gt;&lt;td&gt;25.68 FPS&lt;/td&gt;&lt;td&gt;55.43 FPS&lt;/td&gt;&lt;td&gt;+115.9%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Physics Test&lt;/td&gt;&lt;td&gt;84.52 FPS&lt;/td&gt;&lt;td&gt;119.78 FPS&lt;/td&gt;&lt;td&gt;+41.7%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Combined Test&lt;/td&gt;&lt;td&gt;16.78 FPS&lt;/td&gt;&lt;td&gt;36.14 FPS&lt;/td&gt;&lt;td&gt;+115.4%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト7：Steel Nomad Stress Test&lt;a href=&quot;#テスト7steel-nomad-stress-test&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程行った「Steel Nomad」のテストには、「ストレステスト」も存在します。&lt;/p&gt;&lt;p&gt;このストレステストにより、長時間のゲーミングセッション中にPCのゲーミングパフォーマンスがどのように変化するかを簡単に確認できます。ストレステストは、標準システムのコンポーネント温度が安定する時間を確保するために、20分間実行されます。つまり、この20分間のテスト中に、PCがどれだけその性能を安定させられるかどうかを検証していくわけです。&lt;/p&gt;&lt;p&gt;「ストレステストを開始する前に、デバイスでベンチマークやゲームを実行していないことを確認してください。そうしないと、前のタスクによる熱が実行結果に影響を与える可能性があります。」という感じで、テストした方が良いようです。（今回はMSI Afterburnerを開いていましたが・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/87.BC9KJQRW_Zh55Uu.webp&quot; srcset=&quot;/_astro/87.BC9KJQRW_T3la.webp 640w, /_astro/87.BC9KJQRW_Z2lB4EY.webp 750w, /_astro/87.BC9KJQRW_Z1wE6jy.webp 828w, /_astro/87.BC9KJQRW_ZAsg4L.webp 1080w, /_astro/87.BC9KJQRW_nHdQN.webp 1280w, /_astro/87.BC9KJQRW_252FtW.webp 1668w, /_astro/87.BC9KJQRW_Zh55Uu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。
ROG Strixでは合格できなかったテストを、自作デスクトップでは合格できています。「Stress test stability」が92.0～99.2 %のどこかに合格ラインが設定されているのでしょう。&lt;/p&gt;&lt;p&gt;「Stress test stability」は、「Best loop score」を「Worst loop score」で割った値になっています。自作デスクトップの構成にしたことで、全体的なスコアが上昇したことに加えて、安定して稼働できるようになったわけですね。処理ユニットは世代が新しくなる毎に安定動作していくというわけでしょうか。&lt;/p&gt;&lt;p&gt;Measured Machines:&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,539 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,730 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores:&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;ROG Strix&lt;/th&gt;&lt;th&gt;自作デスクトップ&lt;/th&gt;&lt;th&gt;Change&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;SteelNomad Stress test passed&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stress test stability&lt;/td&gt;&lt;td&gt;92.0 %&lt;/td&gt;&lt;td&gt;99.2 %&lt;/td&gt;&lt;td&gt;+7.9 %&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Best loop score&lt;/td&gt;&lt;td&gt;2,606&lt;/td&gt;&lt;td&gt;6,259&lt;/td&gt;&lt;td&gt;+140.2 %&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Worst loop score&lt;/td&gt;&lt;td&gt;2,397&lt;/td&gt;&lt;td&gt;6,211&lt;/td&gt;&lt;td&gt;+159.1 %&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Stress test loops done&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テスト8：Nvidia DLSS&lt;a href=&quot;#テスト8nvidia-dlss&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回比較したPCは両方ともNVIDIA製のGPUを搭載しているので、DLSSに関するテストもしていきたいと思います。&lt;/p&gt;&lt;p&gt;NVIDIA DLSSの機能テストは、DLSS処理のパフォーマンスと画像品質をテストおよび比較するのに役立ちます。NVIDIA DLSS 機能テストを実行する時、DLSS 1、DLSS 2もしくはDLSS 3のいずれかを選択できます。&lt;/p&gt;&lt;p&gt;NVIDIAのGPUで利用できるDLSSは、AIを活用してフレーム間に新しいフレームを生成して、FPS性能を飛躍的に向上させます。バージョンが上がる毎に、対応するゲームが増えたり、その性能も向上しているようです。DLSS 3.0以上はGeForce RTX 40シリーズから利用できるみたいです。&lt;/p&gt;&lt;p&gt;今回は、GPUの性能を比較したいので、ROG StrixのGPUはDLSS 1で計測して（DLSS 1しか無い。）、自作デスクトップのGPUはDLSS 3で計測したいと思います。その代わり、4K画質の場合も追加で計測します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/88.CzLqknK0_Z1lrkwc.webp&quot; srcset=&quot;/_astro/88.CzLqknK0_Z2tiqXh.webp 640w, /_astro/88.CzLqknK0_enyOv.webp 750w, /_astro/88.CzLqknK0_13kxaV.webp 828w, /_astro/88.CzLqknK0_Z1EOuFt.webp 1080w, /_astro/88.CzLqknK0_ZFE0IT.webp 1280w, /_astro/88.CzLqknK0_10FqSf.webp 1668w, /_astro/88.CzLqknK0_Z1lrkwc.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テスト結果の比較です。&lt;/p&gt;&lt;p&gt;ROG Strixでは、DLSS 1ということもあって、オンにしても50FPSも出せていないようでした。しかし、自作デスクトップのGPUでDLSS 3をオンにすることで、およそ2.8～3.6倍のFPSを出せるようになりました。DLSS 3を利用することで、4K画質でも120FPSが出せるようになるわけですね。こりゃあいいぞ・・・。&lt;/p&gt;&lt;p&gt;Measured Machines:&lt;/p&gt;






















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix(WQHD)&lt;/th&gt;&lt;th&gt;自作デスクトップ(WQHD)&lt;/th&gt;&lt;th&gt;自作デスクトップ(4K)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i9-12900H Processor (4,988 MHz (2,500 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (5,514 MHz (4,200 MHz))&lt;/td&gt;&lt;td&gt;AMD Ryzen 9 7950X3D​ (0 MHz (4,200 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 3080 Ti (notebook) (1x Off) (1,867 MHz (975 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,805 MHz (2,295 MHz))&lt;/td&gt;&lt;td&gt;NVIDIA GeForce RTX 4080 SUPER (1x Off) (2,295 MHz (2,295 MHz))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Detailed Scores:&lt;/p&gt;






















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;ROG Strix(WQHD)&lt;/th&gt;&lt;th&gt;自作デスクトップ(WQHD)&lt;/th&gt;&lt;th&gt;自作デスクトップ(4K)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;DLSS off&lt;/td&gt;&lt;td&gt;31.88 FPS&lt;/td&gt;&lt;td&gt;79.78 FPS&lt;/td&gt;&lt;td&gt;38.51 FPS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DLSS on&lt;/td&gt;&lt;td&gt;43.37 FPS&lt;/td&gt;&lt;td&gt;225.26 FPS&lt;/td&gt;&lt;td&gt;141.35 FPS&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、2年前に40万円で買ったノートPCと、その2年後に40万円で自作したゲーミングデスクトップのベンチマークを計測して比較していきました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;やはり、PCをちゃんと冷ませるかどうかで、性能は大きく変化する。&lt;/li&gt;
&lt;li&gt;CPUおよぎGPUの性能が、1.5～3倍ぐらいに向上して安定稼働するようになったが、消費電力も1.4～2倍に増えた。&lt;/li&gt;
&lt;li&gt;AMD Ryzen 9 7950X3DとNVIDIA GeForce RTX 4080 SUPERの構成だと、WQHD(2560 × 1440)画質のレイトレースゲームでは、70FPSぐらい出せる。&lt;/li&gt;
&lt;li&gt;GeForce RTX 40シリーズからはDLSS 3を利用できて、ゲーム性能が大きく向上する。&lt;/li&gt;
&lt;li&gt;DLSS 3を利用すると、4K画質で40FPS出せていなかったものが140FPS出せるようになる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;次回は、実際に色々なゲームを起動した時のベンチマークを計測していきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-vs-pc-02/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;40万円で手に入れた2つのPCの性能のベンチマークを比較する（第2回：SatisfactoryやGhost of Tsushimaなど）&lt;/div&gt;&lt;div&gt;Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのゲーム画質やFPSを比較した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241206_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ガジェット&lt;a href=&quot;#ガジェット&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4guyeGH&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;KTC 27インチモニターWQHD (2560x1440) Fast IPS 180Hz 1ms 124%sRGBゲーミングモニター低ブルーライトフリッカーフリーFreeSync &amp;amp; G-Sync対応高輝度300cd/m PS5対応HDMI×2 DP×2 3年保証H27T22S&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4guyeGH&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gpmDsi&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;KOORUI ゲーミングモニター 27インチ WQHD(2560×1440) 240Hz モニター (IPSパネル / 応答速度1ms / AdaptiveSync対応/HDMI×2 / DisplayPort/傾斜/高さ/縦横回転調整 対応) 27E3QK&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gpmDsi&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4it0HOM&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4it0HOM&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;DLSS スゲエエエ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは早くゲームしたいですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【自作ゲーミングPC】初めてデスクトップPCを組んでいく（OS設定編）</title><link>https://endorphinbath.com/posts/making-gaming-pc-first-os-setting/</link><guid isPermaLink="true">https://endorphinbath.com/posts/making-gaming-pc-first-os-setting/</guid><description>初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCのOSの設定をする際の一助になれば良いかと思います。</description><pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ハードが終わったから次はソフトだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちゃんと性能を発揮させたいです。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの設定の過程をまとめておきたい。&lt;a href=&quot;#pcの設定の過程をまとめておきたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分の備忘録として、今回PCのソフト面の設定の過程を記録しておいたので、そのスクショをペタペタ貼ったり、メモしていきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの構成&lt;a href=&quot;#pcの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回設定していくPCの構成はこれで行きます。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;NVIDIA GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;192,891&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/4g4kPW0&quot; target=&quot;_blank&quot;&gt;AMD Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;104,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;ADATA_XPG_LANCER_RGB_AX5U6400C3216G-DCLARWH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;23,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N&lt;/a&gt;&lt;/td&gt;&lt;td&gt;17,780&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Supply Unit&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Cooler&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238/&quot; target=&quot;_blank&quot;&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Fan&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;DEEP COOL FK120 R-FK120-BKNPF1-G-1&lt;/a&gt; x2&lt;/td&gt;&lt;td&gt;2,752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PC Case&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332/&quot; target=&quot;_blank&quot;&gt;Antec FLUX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;td&gt;15,182&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;各PCパーツを選ぶ過程は、別の記事に載せておきました。よければご参考いただければと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-for-the-first-time/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241018_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;組み立ての過程は、別の記事に載せておきました。ハードウェア面の参考にどうぞ。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-assembly/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241111_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;それでは設定しましょう&lt;a href=&quot;#それでは設定しましょう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;BIOSで設定する。&lt;/li&gt;
&lt;li&gt;Windows OSをインストールする。&lt;/li&gt;
&lt;li&gt;Windows OSをローカルアカウントでセットアップする。&lt;/li&gt;
&lt;li&gt;Windowsセットアップ後の設定。&lt;/li&gt;
&lt;li&gt;「AMD Ryzen 9 7950X3DやRyzen 9 7900X3Dを使う人のためのパフォーマンス改善設定」を行う。&lt;/li&gt;
&lt;li&gt;NVIDIA Control Panelを設定する。&lt;/li&gt;
&lt;li&gt;エクスプローラを使いやすくする。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. BIOSで設定する。&lt;a href=&quot;#1-biosで設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;前回の組立編より。&lt;/p&gt;&lt;p&gt;いよいよASRockのマザボのBIOSが起動したので、色々と設定をしていきたいと思います。&lt;/p&gt;&lt;p&gt;PCの電源を入れて、OSのイメージファイルにアクセスできる状態の場合は、起動時に&lt;code&gt;Delete&lt;/code&gt;キーか&lt;code&gt;F2&lt;/code&gt;キーを連打してBIOS設定画面に入ります。まあ、電源を入れる時はイメージファイルが入ったUSBとかはまだ挿さない方が楽ですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_01.B5iHiicZ_1ed0sb.webp&quot; srcset=&quot;/_astro/01_01.B5iHiicZ_ZlsFeb.webp 640w, /_astro/01_01.B5iHiicZ_owncj.webp 750w, /_astro/01_01.B5iHiicZ_Ze1Bbv.webp 828w, /_astro/01_01.B5iHiicZ_1GMDh8.webp 1080w, /_astro/01_01.B5iHiicZ_Z1JQsbz.webp 1280w, /_astro/01_01.B5iHiicZ_Z1rOplx.webp 1668w, /_astro/01_01.B5iHiicZ_1ed0sb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1-1. AMD Expoでオーバークロックする。&lt;a href=&quot;#1-1-amd-expoでオーバークロックする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回使っているCPUはAMD Ryzenなので、メモリはAMD Expoプロファイルに対応しているものを選びました。&lt;/p&gt;&lt;p&gt;なので、AMD Expoプロファイルでメモリをオーバークロックしていきたいと思います。&lt;/p&gt;&lt;p&gt;まずは、BIOSのこの最初の画面で、&lt;code&gt;OC Tweaker&lt;/code&gt;に進みます。（なんか10年前に触ったBIOSよりもキレイな気がする・・・。これがUEFI BIOSってやつか・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_02.D4-yOor5_z5nuD.webp&quot; srcset=&quot;/_astro/01_02.D4-yOor5_Z2kPkhG.webp 640w, /_astro/01_02.D4-yOor5_Z1zPgQc.webp 750w, /_astro/01_02.D4-yOor5_Z2dogf1.webp 828w, /_astro/01_02.D4-yOor5_12F1jA.webp 1080w, /_astro/01_02.D4-yOor5_Z2oY597.webp 1280w, /_astro/01_02.D4-yOor5_Z26W2j5.webp 1668w, /_astro/01_02.D4-yOor5_z5nuD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;DRAM Profile Configuration&lt;/code&gt;をクリック。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_03.DYqlWdb-_Z2oNRBX.webp&quot; srcset=&quot;/_astro/01_03.DYqlWdb-_ZsCz6t.webp 640w, /_astro/01_03.DYqlWdb-_hmtk1.webp 750w, /_astro/01_03.DYqlWdb-_Zlbv3N.webp 828w, /_astro/01_03.DYqlWdb-_Z1VeeN1.webp 1080w, /_astro/01_03.DYqlWdb-_ZiGcrM.webp 1280w, /_astro/01_03.DYqlWdb-_ZE9BK.webp 1668w, /_astro/01_03.DYqlWdb-_Z2oNRBX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;DRAM Profile Setting&lt;/code&gt;でEXPOをロードします。（メモリの公式ページに載ってたCAS Latencyより速いんだが。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_04.CRryJ0O-_Zc9w2I.webp&quot; srcset=&quot;/_astro/01_04.CRryJ0O-_23Nh53.webp 640w, /_astro/01_04.CRryJ0O-_Z2gnNio.webp 750w, /_astro/01_04.CRryJ0O-_2bfl7I.webp 828w, /_astro/01_04.CRryJ0O-_gq6Le.webp 1080w, /_astro/01_04.CRryJ0O-_1SX97s.webp 1280w, /_astro/01_04.CRryJ0O-_2c0bWu.webp 1668w, /_astro/01_04.CRryJ0O-_Zc9w2I.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;EXPOプロファイルが&lt;code&gt;DRAM Profile Setting&lt;/code&gt;に設定されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_05.CbvmtRuI_Z1YrEuk.webp&quot; srcset=&quot;/_astro/01_05.CbvmtRuI_Z2pSmlC.webp 640w, /_astro/01_05.CbvmtRuI_Z1ESiU8.webp 750w, /_astro/01_05.CbvmtRuI_Z2iriiW.webp 828w, /_astro/01_05.CbvmtRuI_Z1vR1Fn.webp 1080w, /_astro/01_05.CbvmtRuI_6F0EQ.webp 1280w, /_astro/01_05.CbvmtRuI_oH3uS.webp 1668w, /_astro/01_05.CbvmtRuI_Z1YrEuk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;EXPOプロファイルに切り替わったことで、&lt;code&gt;SoC/Uncore OC Voltage (VDD_SOC)&lt;/code&gt;などの値が変わったようです。赤くなってる項目もありますね。
これで、メモリのオーバークロックは完了です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_06.buzdqhyU_Z1Rb5tI.webp&quot; srcset=&quot;/_astro/01_06.buzdqhyU_1ltW7z.webp 640w, /_astro/01_06.buzdqhyU_26u0y4.webp 750w, /_astro/01_06.buzdqhyU_1sV1af.webp 828w, /_astro/01_06.buzdqhyU_Z1oArEL.webp 1080w, /_astro/01_06.buzdqhyU_dVzFs.webp 1280w, /_astro/01_06.buzdqhyU_vXCvu.webp 1668w, /_astro/01_06.buzdqhyU_Z1Rb5tI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-2. LEDライトのオンオフ。&lt;a href=&quot;#1-2-ledライトのオンオフ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Advancecd&lt;/code&gt;＞&lt;code&gt;RGB LED On/Off&lt;/code&gt;で、PCケースの中で光っているLEDライトをオンオフできます。なるほどなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_01.BToykqrb_ZaByaI.webp&quot; srcset=&quot;/_astro/02_01.BToykqrb_zMLTe.webp 640w, /_astro/02_01.BToykqrb_1kMPkI.webp 750w, /_astro/02_01.BToykqrb_HePVT.webp 828w, /_astro/02_01.BToykqrb_hX4De.webp 1080w, /_astro/02_01.BToykqrb_1Uv6Ys.webp 1280w, /_astro/02_01.BToykqrb_2dx9Ou.webp 1668w, /_astro/02_01.BToykqrb_ZaByaI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-3. Re-Size BAR Support をオンにする。&lt;a href=&quot;#1-3-re-size-bar-support-をオンにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Advancecd&lt;/code&gt;＞&lt;code&gt;PCI Configuration&lt;/code&gt;＞&lt;code&gt;Re-Size BAR Support&lt;/code&gt;が&lt;code&gt;Enabled&lt;/code&gt;になっていることを確認します。&lt;code&gt;Enabled&lt;/code&gt;になっているとグラフィックス性能が向上します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_01.3nI2HBaz_1hDWAk.webp&quot; srcset=&quot;/_astro/03_01.3nI2HBaz_Z1OpqaH.webp 640w, /_astro/03_01.3nI2HBaz_Z14pmJd.webp 750w, /_astro/03_01.3nI2HBaz_Z1GXm82.webp 828w, /_astro/03_01.3nI2HBaz_1KeAph.webp 1080w, /_astro/03_01.3nI2HBaz_Z1Gpv3q.webp 1280w, /_astro/03_01.3nI2HBaz_Z1onsdo.webp 1668w, /_astro/03_01.3nI2HBaz_1hDWAk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Resizable BARを使うことで、CPUからグラフィックスカード上のビデオメモリーの全領域にアクセスできるようになり、データ処理や特定のゲームのパフォーマンスが向上するようです。必要な時に必要なだけ、アセットを要求して全て転送できるので、CPUはフレームバッファ全体に効率よくアクセスすることができるようになるというわけらしいです。また、複数のリクエストがあった場合、データ転送は順番にではなく同時に行われるみたいです。&lt;/p&gt;&lt;a href=&quot;https://www.asus.com/jp/support/faq/1046107/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;サポート 公式 | ASUS 日本&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[マザーボード][グラフィックスカード] Resizable BAR機能を有効にする方法 | サポート 公式 | ASUS 日本&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.asus.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.gigabyte.com/jp/WebPage/785/NVIDIA_resizable_bar_jp.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.gigabyte.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.gigabyte.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.gigabyte.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-4. 設定を保存してBIOSを終了。&lt;a href=&quot;#1-4-設定を保存してbiosを終了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Exit&lt;/code&gt;をクリックして、&lt;code&gt;Save Changes and Exit&lt;/code&gt;をクリックします。&lt;/p&gt;&lt;p&gt;色々と設定が変更されたので、その値を確認します。&lt;/p&gt;&lt;p&gt;確認できたら、OSのイメージファイルが入ったUSBがPCに挿さっていることを確認して、&lt;code&gt;Yes&lt;/code&gt;をクリックしてBIOSを終了します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_01.C6vjq72-_Z2rJpjt.webp&quot; srcset=&quot;/_astro/04_01.C6vjq72-_1Ymx2x.webp 640w, /_astro/04_01.C6vjq72-_Z2kOxkT.webp 750w, /_astro/04_01.C6vjq72-_26NB5d.webp 828w, /_astro/04_01.C6vjq72-_Z1Y9Luw.webp 1080w, /_astro/04_01.C6vjq72-_ZlBJ9i.webp 1280w, /_astro/04_01.C6vjq72-_Z3zGjg.webp 1668w, /_astro/04_01.C6vjq72-_Z2rJpjt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. Windows OSをインストールする。&lt;a href=&quot;#2-windows-osをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;BIOSを終了して、OSのイメージファイルが入ったUSBが挿さっていると、OSのイメージファイルを読み込み始めてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_01.CmLz3GjJ_ZwtJuv.webp&quot; srcset=&quot;/_astro/11_01.CmLz3GjJ_T6wmo.webp 640w, /_astro/11_01.CmLz3GjJ_1E6zMS.webp 750w, /_astro/11_01.CmLz3GjJ_11xAp4.webp 828w, /_astro/11_01.CmLz3GjJ_Z3T6Fy.webp 1080w, /_astro/11_01.CmLz3GjJ_1yCUEF.webp 1280w, /_astro/11_01.CmLz3GjJ_1QEXuH.webp 1668w, /_astro/11_01.CmLz3GjJ_ZwtJuv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しばらく待っていると、「Windows」の文字が表示されました・・・。流れに沿って進めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_02.DSuKD48j_1EPW50.webp&quot; srcset=&quot;/_astro/11_02.DSuKD48j_ZaAQQF.webp 640w, /_astro/11_02.DSuKD48j_zobyO.webp 750w, /_astro/11_02.DSuKD48j_Z39MO0.webp 828w, /_astro/11_02.DSuKD48j_28qzSW.webp 1080w, /_astro/11_02.DSuKD48j_Z1jdvyK.webp 1280w, /_astro/11_02.DSuKD48j_Z11bsII.webp 1668w, /_astro/11_02.DSuKD48j_1EPW50.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「今すぐインストール」。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_03.Bq09QFLL_2h2S4R.webp&quot; srcset=&quot;/_astro/11_03.Bq09QFLL_Z1WsY3u.webp 640w, /_astro/11_03.Bq09QFLL_Z1csUC0.webp 750w, /_astro/11_03.Bq09QFLL_Z1P1U0O.webp 828w, /_astro/11_03.Bq09QFLL_Z2kyBU7.webp 1080w, /_astro/11_03.Bq09QFLL_ZH1zyS.webp 1280w, /_astro/11_03.Bq09QFLL_ZoYwIQ.webp 1668w, /_astro/11_03.Bq09QFLL_2h2S4R.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;またしばらく待ちます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_04.CmoGOidY_Z9ksft.webp&quot; srcset=&quot;/_astro/11_04.CmoGOidY_Z2mgJyU.webp 640w, /_astro/11_04.CmoGOidY_Z1BgG8q.webp 750w, /_astro/11_04.CmoGOidY_Z2eOFwf.webp 828w, /_astro/11_04.CmoGOidY_jfayt.webp 1080w, /_astro/11_04.CmoGOidY_1VMcTH.webp 1280w, /_astro/11_04.CmoGOidY_2eOfJJ.webp 1668w, /_astro/11_04.CmoGOidY_Z9ksft.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;キーライセンスの認証画面です。購入したWindowsのライセンスキーを入力します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_05.q4GR6Rue_ZIgpgk.webp&quot; srcset=&quot;/_astro/11_05.q4GR6Rue_1dJ80u.webp 640w, /_astro/11_05.q4GR6Rue_1XJbqY.webp 750w, /_astro/11_05.q4GR6Rue_1lbc3a.webp 828w, /_astro/11_05.q4GR6Rue_ZfFLrn.webp 1080w, /_astro/11_05.q4GR6Rue_1mQfSQ.webp 1280w, /_astro/11_05.q4GR6Rue_1ESiIS.webp 1668w, /_astro/11_05.q4GR6Rue_ZIgpgk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ライセンスキーを入力したら、同意画面で同意して、インストールで「カスタム」を選びました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_06.JDwXPEMC_ZzyoCP.webp&quot; srcset=&quot;/_astro/11_06.JDwXPEMC_1I2qA5.webp 640w, /_astro/11_06.JDwXPEMC_2t2u1z.webp 750w, /_astro/11_06.JDwXPEMC_1PtuCK.webp 828w, /_astro/11_06.JDwXPEMC_Z6XKNS.webp 1080w, /_astro/11_06.JDwXPEMC_1vygwl.webp 1280w, /_astro/11_06.JDwXPEMC_1NAjmn.webp 1668w, /_astro/11_06.JDwXPEMC_ZzyoCP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ドライブを選ぶ画面になりました。しかしドライブは今回1つしか無いので、このまま何も変更することなく先に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_07.BeuqbyVd_Z1tQcyl.webp&quot; srcset=&quot;/_astro/11_07.BeuqbyVd_ncuB7.webp 640w, /_astro/11_07.BeuqbyVd_18cy2B.webp 750w, /_astro/11_07.BeuqbyVd_uDyDM.webp 828w, /_astro/11_07.BeuqbyVd_Z11gyJo.webp 1080w, /_astro/11_07.BeuqbyVd_BgsAP.webp 1280w, /_astro/11_07.BeuqbyVd_TivqR.webp 1668w, /_astro/11_07.BeuqbyVd_Z1tQcyl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;OSのインストールが始まりました。何もカスタムしなかったな・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_08.wDfMyv_C_ZuhPXs.webp&quot; srcset=&quot;/_astro/11_08.wDfMyv_C_f9hf1.webp 640w, /_astro/11_08.wDfMyv_C_109kFv.webp 750w, /_astro/11_08.wDfMyv_C_mAlhG.webp 828w, /_astro/11_08.wDfMyv_C_Z1Hd9v.webp 1080w, /_astro/11_08.wDfMyv_C_1AOObI.webp 1280w, /_astro/11_08.wDfMyv_C_1SQR1K.webp 1668w, /_astro/11_08.wDfMyv_C_ZuhPXs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しばらく待ちます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_09.C4oj5No6_ZgvLm3.webp&quot; srcset=&quot;/_astro/11_09.C4oj5No6_Zyqzbv.webp 640w, /_astro/11_09.C4oj5No6_byteY.webp 750w, /_astro/11_09.C4oj5No6_ZqYv8P.webp 828w, /_astro/11_09.C4oj5No6_c3QrT.webp 1080w, /_astro/11_09.C4oj5No6_1OASN8.webp 1280w, /_astro/11_09.C4oj5No6_27CVDa.webp 1668w, /_astro/11_09.C4oj5No6_ZgvLm3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おおっ、キタアッッ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_10.DwR-EbzQ_ZKU97h.webp&quot; srcset=&quot;/_astro/11_10.DwR-EbzQ_ZJpM0P.webp 640w, /_astro/11_10.DwR-EbzQ_zgpE.webp 750w, /_astro/11_10.DwR-EbzQ_ZBXHXa.webp 828w, /_astro/11_10.DwR-EbzQ_Zikvik.webp 1080w, /_astro/11_10.DwR-EbzQ_1kcw2T.webp 1280w, /_astro/11_10.DwR-EbzQ_1CeyRV.webp 1668w, /_astro/11_10.DwR-EbzQ_ZKU97h.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. Windows OSをローカルアカウントでセットアップする。&lt;a href=&quot;#3-windows-osをローカルアカウントでセットアップする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、Windowsのセットアップをしていきます。&lt;/p&gt;&lt;p&gt;この工程では、かなり気を付けなければならないことがあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_01.DtLGCruq_9sxX3.webp&quot; srcset=&quot;/_astro/12_01.DtLGCruq_1TuqMI.webp 640w, /_astro/12_01.DtLGCruq_Z2pGDzI.webp 750w, /_astro/12_01.DtLGCruq_21VuPo.webp 828w, /_astro/12_01.DtLGCruq_C3bM0.webp 1080w, /_astro/12_01.DtLGCruq_2fAe8e.webp 1280w, /_astro/12_01.DtLGCruq_Z2wyQPF.webp 1668w, /_astro/12_01.DtLGCruq_9sxX3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それは、絶対にMicrosoftアカウントでログインしてはならないということです。一旦ここで作業を止めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_02.BKBpRa5U_Z1gXqqh.webp&quot; srcset=&quot;/_astro/12_02.BKBpRa5U_Z2etpxE.webp 640w, /_astro/12_02.BKBpRa5U_Z1ttm7a.webp 750w, /_astro/12_02.BKBpRa5U_Z272luY.webp 828w, /_astro/12_02.BKBpRa5U_ZNnMBk.webp 1080w, /_astro/12_02.BKBpRa5U_O9eIT.webp 1280w, /_astro/12_02.BKBpRa5U_17bhyV.webp 1668w, /_astro/12_02.BKBpRa5U_Z1gXqqh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここで、&lt;code&gt;Shift + F10&lt;/code&gt;でコマンドプロンプトを起動します。Windows 11のエディションが「Pro」だとわざわざコマンドプロンプトを出す必要はないのですが、「Home」で動かしているので仕方がありません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_03.B6eVSSV__JgUN4.webp&quot; srcset=&quot;/_astro/12_03.B6eVSSV__16BVAp.webp 640w, /_astro/12_03.B6eVSSV__1QC01T.webp 750w, /_astro/12_03.B6eVSSV__1e40D5.webp 828w, /_astro/12_03.B6eVSSV__1cQyC1.webp 1080w, /_astro/12_03.B6eVSSV__Z2eMwPG.webp 1280w, /_astro/12_03.B6eVSSV__Z1VKu0E.webp 1668w, /_astro/12_03.B6eVSSV__JgUN4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;イーサネットを抜いたり、Wi-Fiから切断して、このコマンドを打ち込みます。（コマンド入力は自己責任でお願いします。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;oobe\BypassNRO.cmd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;するとOSのセットアップがやり直しになります。しかし、一つだけ変わることがあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_04.BTXE1zPq_Z1FIkq8.webp&quot; srcset=&quot;/_astro/12_04.BTXE1zPq_2NlTN.webp 640w, /_astro/12_04.BTXE1zPq_MNpli.webp 750w, /_astro/12_04.BTXE1zPq_afpWt.webp 828w, /_astro/12_04.BTXE1zPq_Z1d8GBb.webp 1080w, /_astro/12_04.BTXE1zPq_pokJ3.webp 1280w, /_astro/12_04.BTXE1zPq_Hqnz5.webp 1668w, /_astro/12_04.BTXE1zPq_Z1FIkq8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんと、先程の画面の右下に、「インターネットに接続されていません」という選択肢が追加されます。インターネットにはまだ繋ぎません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_05.Cvbx2lkU_Z1qrty0.webp&quot; srcset=&quot;/_astro/12_05.Cvbx2lkU_Z1pK6vK.webp 640w, /_astro/12_05.Cvbx2lkU_ZEK35g.webp 750w, /_astro/12_05.Cvbx2lkU_Z1ij2t5.webp 828w, /_astro/12_05.Cvbx2lkU_ZWQPJ3.webp 1080w, /_astro/12_05.Cvbx2lkU_EFbBb.webp 1280w, /_astro/12_05.Cvbx2lkU_WHerd.webp 1668w, /_astro/12_05.Cvbx2lkU_Z1qrty0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その追加された選択肢をクリックすると、ローカルアカウントを作成する画面になるので、適当に設定しましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_06.BHcEIvtC_Z9q7aX.webp&quot; srcset=&quot;/_astro/12_06.BHcEIvtC_Z22g8Ta.webp 640w, /_astro/12_06.BHcEIvtC_Z1hg5sF.webp 750w, /_astro/12_06.BHcEIvtC_Z1TO4Qu.webp 828w, /_astro/12_06.BHcEIvtC_j9vCY.webp 1080w, /_astro/12_06.BHcEIvtC_1VGxYd.webp 1280w, /_astro/12_06.BHcEIvtC_2eIAOf.webp 1668w, /_astro/12_06.BHcEIvtC_Z9q7aX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ユーザー名、パスワード、セキュリティの質問その1～3を入力しました。
またしばらく待ちます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_07.BjFKod9T_2wok1u.webp&quot; srcset=&quot;/_astro/12_07.BjFKod9T_1OaefJ.webp 640w, /_astro/12_07.BjFKod9T_Z2v1Q7H.webp 750w, /_astro/12_07.BjFKod9T_1VBiip.webp 828w, /_astro/12_07.BjFKod9T_Z25daXu.webp 1080w, /_astro/12_07.BjFKod9T_ZrF8Cg.webp 1280w, /_astro/12_07.BjFKod9T_Z9D5Me.webp 1668w, /_astro/12_07.BjFKod9T_2wok1u.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おおっ、キタアッッ！　ローカルアカウントでWindowsのサインインが出来ました！
これであの忌々しいOneDriveの同期処理がバックグラウンドで走らなくなります！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12_08.Cow87R7x_Z16I5z1.webp&quot; srcset=&quot;/_astro/12_08.Cow87R7x_Z649mP.webp 640w, /_astro/12_08.Cow87R7x_DUT3E.webp 750w, /_astro/12_08.Cow87R7x_1mTEP.webp 828w, /_astro/12_08.Cow87R7x_ZD8rK4.webp 1080w, /_astro/12_08.Cow87R7x_YozAa.webp 1280w, /_astro/12_08.Cow87R7x_1hqCqc.webp 1668w, /_astro/12_08.Cow87R7x_Z16I5z1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. Windowsセットアップ後の設定。&lt;a href=&quot;#4-windowsセットアップ後の設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もう、インターネットに繋いで大丈夫です。&lt;/p&gt;&lt;p&gt;これからWindowsセットアップ後の各種設定を行っていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;4-1. Windows Updateを完全に済ませる。&lt;a href=&quot;#4-1-windows-updateを完全に済ませる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;何をするよりも始めに、新しいPCにインストールされていないWindows Updateの更新パッチをインストールし切ります。それまで、ブラウザだのSteamだののソフトウェアは入れてはなりません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_01.2ZGHJSSw_Z1qmwuA.webp&quot; srcset=&quot;/_astro/13_01.2ZGHJSSw_xjJYu.webp 640w, /_astro/13_01.2ZGHJSSw_1ijNpY.webp 750w, /_astro/13_01.2ZGHJSSw_EKO2a.webp 828w, /_astro/13_01.2ZGHJSSw_ZWLSFD.webp 1080w, /_astro/13_01.2ZGHJSSw_EK8EA.webp 1280w, /_astro/13_01.2ZGHJSSw_WMbuC.webp 1668w, /_astro/13_01.2ZGHJSSw_Z1qmwuA.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように、最新の状態になっていたらWindows Updateは完了です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_02.DoBafHv1_QbA3b.webp&quot; srcset=&quot;/_astro/13_02.DoBafHv1_Z20gSIR.webp 640w, /_astro/13_02.DoBafHv1_Z1fgPin.webp 750w, /_astro/13_02.DoBafHv1_Z1ROOGc.webp 828w, /_astro/13_02.DoBafHv1_1jLdR8.webp 1080w, /_astro/13_02.DoBafHv1_Z27RRAz.webp 1280w, /_astro/13_02.DoBafHv1_Z1OPOKx.webp 1668w, /_astro/13_02.DoBafHv1_QbA3b.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-2. OneDriveを動かなくする。&lt;a href=&quot;#4-2-onedriveを動かなくする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在の環境ではローカルアカウントでサインインしているので、OneDriveのファイル自動同期処理は動いていませんが、依然として意味もなくバックグラウンドで常駐しています。なので、本当の本当に動かなくしてしまいましょう。OSが無駄に重くなります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;アプリ&lt;/code&gt;＞&lt;code&gt;スタートアップ&lt;/code&gt;で&lt;code&gt;Microsoft OneDrive&lt;/code&gt;をオフにします。これでPCの起動時にOneDriveが起動しなくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;536&quot; src=&quot;/_astro/13_03.DZi62aNp_1ViJsc.webp&quot; srcset=&quot;/_astro/13_03.DZi62aNp_IS4H8.webp 640w, /_astro/13_03.DZi62aNp_Z1PbB07.webp 750w, /_astro/13_03.DZi62aNp_ZavEdb.webp 828w, /_astro/13_03.DZi62aNp_1ViJsc.webp 894w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-3. ハードウェアドライバーを更新する。&lt;a href=&quot;#4-3-ハードウェアドライバーを更新する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ASRockのマザボから、ハードウェア関連のドライバーを更新するようにお達しがあったので更新します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_04.CVUqBPph_Zo6C2t.webp&quot; srcset=&quot;/_astro/13_04.CVUqBPph_ZeEI9C.webp 640w, /_astro/13_04.CVUqBPph_vkkgR.webp 750w, /_astro/13_04.CVUqBPph_Z7dE6W.webp 828w, /_astro/13_04.CVUqBPph_4t0Lt.webp 1080w, /_astro/13_04.CVUqBPph_1H137H.webp 1280w, /_astro/13_04.CVUqBPph_2035WJ.webp 1668w, /_astro/13_04.CVUqBPph_Zo6C2t.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;正常にインストールが完了したとのことです。こういう時は念の為、PCを再起動しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_05.oydFsUPT_2nlnWe.webp&quot; srcset=&quot;/_astro/13_05.oydFsUPT_Z9cgzd.webp 640w, /_astro/13_05.oydFsUPT_AMLQh.webp 750w, /_astro/13_05.oydFsUPT_Z1Kcwx.webp 828w, /_astro/13_05.oydFsUPT_Z2eg72K.webp 1080w, /_astro/13_05.oydFsUPT_ZAI4Gw.webp 1280w, /_astro/13_05.oydFsUPT_ZiG1Qu.webp 1668w, /_astro/13_05.oydFsUPT_2nlnWe.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-4. 電源モードを最適なパフォーマンスにする。&lt;a href=&quot;#4-4-電源モードを最適なパフォーマンスにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここからは、細々とした設定をしていきます。&lt;code&gt;Windowsキー + I&lt;/code&gt;で設定アプリを開けますので、設定していきます。&lt;/p&gt;&lt;p&gt;設定アプリで、&lt;code&gt;システム&lt;/code&gt;＞&lt;code&gt;電源&lt;/code&gt;で、&lt;code&gt;電源モード&lt;/code&gt;を&lt;code&gt;最適なパフォーマンス&lt;/code&gt;に設定します。&lt;/p&gt;&lt;p&gt;デスクトップPCなので、電力効率を考える必要はありません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-5. モニターのリフレッシュレートを最大にする。&lt;a href=&quot;#4-5-モニターのリフレッシュレートを最大にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定アプリで、&lt;code&gt;システム&lt;/code&gt;＞&lt;code&gt;ディスプレイ&lt;/code&gt;＞&lt;code&gt;ディスプレイの詳細設定&lt;/code&gt;で、&lt;code&gt;リフレッシュレートの選択&lt;/code&gt;で最も高いリフレッシュレートにします。&lt;/p&gt;&lt;p&gt;この設定をしておかないと、いくらPCが頑張ってFPSを上げてもモニターがFPSを上げてくれません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-6. HDRのオンオフを設定する。&lt;a href=&quot;#4-6-hdrのオンオフを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定アプリを開いて、&lt;code&gt;システム&lt;/code&gt;＞&lt;code&gt;ディスプレイ&lt;/code&gt;で、&lt;code&gt;HDRを使用する&lt;/code&gt;をオンにするかオフにするかで、モニターの見え方がかなり変わってきます。&lt;/p&gt;&lt;p&gt;HDRをオンにすると、輝度を変えることが出来なくなります。しかしながら、ゲーム体験は向上する・・・？　この機能は個人の好みかもしれませんね。（ちなみに僕は普段遣いの時は間違いなくオフにします。明るすぎる。）&lt;/p&gt;&lt;p&gt;ちなみにこのHDR機能について、&lt;code&gt;AMD FreeSync Premium Pro&lt;/code&gt;、&lt;code&gt;Dolby Vision&lt;/code&gt;、&lt;code&gt;NVIDIA G-SYNC ULTIMATE&lt;/code&gt;、&lt;code&gt;VESA DisplayHDR&lt;/code&gt;などの規格に準拠しているモニターがこの機能を利用することが出来るようです。&lt;/p&gt;&lt;a href=&quot;https://support.microsoft.com/en-us/windows/what-is-hdr-in-windows-f5fbf5cb-149d-4a0d-8be1-9ed78c68d3b4&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.microsoft.com/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;support.microsoft.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;What is HDR in Windows? - Microsoft Support&lt;/div&gt;&lt;div&gt;Learn about HDR capabilities in Windows 11 to bring a wider range of colors and details to your display.&lt;/div&gt;&lt;div&gt;support.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-7. 視覚効果を無効にする。&lt;a href=&quot;#4-7-視覚効果を無効にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定アプリを開いて、&lt;code&gt;アクセシビリティ&lt;/code&gt;＞&lt;code&gt;視覚効果&lt;/code&gt;で、&lt;code&gt;透明効果&lt;/code&gt;をオフにします。これで余計な場所でリソースを使わせません。
&lt;code&gt;アニメーション効果&lt;/code&gt;はオンにしていないと、何かしらのアプリを使っている際にフリーズした感じの動きになることがあるので、僕はオンにしています。ブラウザ内の動きにも影響してきます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. 「AMD Ryzen 9 7950X3DやRyzen 9 7900X3Dを使う人のためのパフォーマンス改善設定」を行う。&lt;a href=&quot;#5-amd-ryzen-9-7950x3dやryzen-9-7900x3dを使う人のためのパフォーマンス改善設定を行う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これは、CPUが対応している人だけに向けた設定集です。&lt;/p&gt;&lt;p&gt;Ryzen 9 7950X3Dのレビュアーズガイドに書かれていた内容をベースに作成された設定集のようです。&lt;/p&gt;&lt;p&gt;以下の記事を参考にしています。&lt;/p&gt;&lt;a href=&quot;https://ascii.jp/elem/000/004/126/4126513/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ascii.jp/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;ASCII.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;3D V-Cache搭載「Ryzen 9 7950X3D」はゲーミングCPUの最高峰に輝くのか？【前編】 (1/5)&lt;/div&gt;&lt;div&gt;2023年3月3日11時（日本時間）に国内販売が解禁する「Ryzen 9 7950X3D」および「Ryzen 9 7900X3D」を既存の「Ryzen 9 7950X」や、ライバルである「Core i9-13900K」と比べどのようなパフォーマンスを発揮するのか、さまざまな確度から検証を試みた。&lt;/div&gt;&lt;div&gt;ascii.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ascii.jp/img/2023/02/27/3499864/xl/49f5c568ea344fd7.jpg?20200122&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;5-1. コア分離を有効にする。（Windows 11のみ）&lt;a href=&quot;#5-1-コア分離を有効にするwindows-11のみ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の流れで設定していきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;設定アプリを開いて&lt;code&gt;プライバシーとセキュリティ&lt;/code&gt;＞&lt;code&gt;Windows セキュリティ&lt;/code&gt;と進み&lt;code&gt;Windows セキュリティを開く&lt;/code&gt;をクリックします。
2.&lt;code&gt;デバイス セキュリティ&lt;/code&gt;をクリックして&lt;code&gt;コア分離の詳細&lt;/code&gt;をクリックします。
3.&lt;code&gt;メモリ整合性&lt;/code&gt;をオンにします。セキュリティが強化されるみたいです。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;しかし、ゲームのアンチチートツール等と干渉する可能性もあるらしいので、もし自分が遊んでるFPS系ゲームで不具合が出たらオフにしてみるのも手かもしれません。情報は以下を参考にしました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-2. Windowsゲームモードを有効にする。&lt;a href=&quot;#5-2-windowsゲームモードを有効にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定アプリを開いて、&lt;code&gt;ゲーム&lt;/code&gt;＞&lt;code&gt;ゲームモード&lt;/code&gt;と進んで、ゲームモードを有効にします。&lt;/p&gt;&lt;p&gt;この設定を有効にしておかないと、3D V-Cache機能を搭載したAMd Ryzen CPUが最大限のパフォーマンスを発揮できません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-3. Xbox Game Barを最新版にアップデートする。&lt;a href=&quot;#5-3-xbox-game-barを最新版にアップデートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Microsoft Store」で「Xbox」のアプリ詳細を開いて、同アプリを最新版にアップデートします。&lt;/p&gt;&lt;p&gt;「Xbox」のアプリのバージョンが低いと、3D V-Cache機能を搭載したAMd Ryzen CPUが最大限のパフォーマンスを発揮できないかもしれません。特に、Windows 11 22H2導入直後のバージョンでは古いみたいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-4. AMDの一部のチップセットドライバーの有無を確認する。&lt;a href=&quot;#5-4-amdの一部のチップセットドライバーの有無を確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;デバイスマネージャー&lt;/code&gt;アプリを開いて、&lt;code&gt;システムデバイス&lt;/code&gt;をクリックします。&lt;/p&gt;&lt;p&gt;その中で、&lt;code&gt;AMD 3D V-Cache Performance Optimizer&lt;/code&gt;、&lt;code&gt;AMD PPM Provisioning File&lt;/code&gt;のデバイスの有無を確認します。
無い場合は、チップセットドライバー（&lt;code&gt;5.01.03.005&lt;/code&gt;以降）をインストールして再起動すると取得できるようです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-5. システムのメンテナンスタスクを実行させる&lt;a href=&quot;#5-5-システムのメンテナンスタスクを実行させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この「システムのメンテナンスタスク」を実行させると、なんかいいことがあるらしい・・・。（右に倣えの精神でやりました。たぶんセキュリティが向上するんですかね？）&lt;/p&gt;&lt;p&gt;PCをアイドル状態で15分程度放置しても良いらしいですが、管理者権限で起動したコマンドプロンプトもしくはターミナルを開き、以下のコマンドを実行するのも良いみたいです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Cmd.exe /c &lt;/span&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT Rundll32.exe advapi32.dll,ProcessIdleTasks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;実行したら、10～15分程度待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;1110&quot; height=&quot;534&quot; src=&quot;/_astro/75_01.CzpfIUgk_2eeKvj.webp&quot; srcset=&quot;/_astro/75_01.CzpfIUgk_Z267WsR.webp 640w, /_astro/75_01.CzpfIUgk_Z2cEv2s.webp 750w, /_astro/75_01.CzpfIUgk_1b2BrD.webp 828w, /_astro/75_01.CzpfIUgk_2fmCT5.webp 1080w, /_astro/75_01.CzpfIUgk_2eeKvj.webp 1110w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Windowsキー + Gキー&lt;/code&gt;でXbox Game Barを起動して、歯車アイコン＞&lt;code&gt;フィードバック&lt;/code&gt;＞&lt;code&gt;その他の診断情報を表示&lt;/code&gt;で&lt;code&gt;KGL Version Loaded&lt;/code&gt;と&lt;code&gt;KGL Service Version&lt;/code&gt;の数値が揃っていることを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;690&quot; src=&quot;/_astro/75_02.Rgx5vH2x_21P1L6.webp&quot; srcset=&quot;/_astro/75_02.Rgx5vH2x_1euPHD.webp 640w, /_astro/75_02.Rgx5vH2x_21P1L6.webp 650w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. NVIDIA Control Panelを設定する。&lt;a href=&quot;#6-nvidia-control-panelを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次は、NVIDIA製のGPU向けの設定です。「NVIDIA Control Panel」でGPUを使ったアプリ内の描画における3D性能や解像度を設定できます。&lt;/p&gt;&lt;p&gt;2024-11-22時点では、「NVIDIA App」がリリースされていますが、まだそのアプリではNVIDIA Control Panelほど多くの項目を設定できないみたいなので、NVIDIA Control Panelから設定していきます。&lt;/p&gt;&lt;p&gt;設定値は以下の記事を参考にしました。&lt;/p&gt;&lt;a href=&quot;https://dosparaplus.com/library/details/001642.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://dosparaplus.com/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;法人様向けパソコンならドスパラプラス&lt;/span&gt;&lt;/div&gt;&lt;div&gt;NVIDIAコントロールパネルのおすすめ設定やトラブル対処法を解説 - 法人様向けパソコンならドスパラプラス&lt;/div&gt;&lt;div&gt;この記事では、NVIDIAコントロールパネルのインストール手順や設定方法、おすすめ設定、よくあるトラブルへの対処法についてご紹介します。ディスプレイのグラフィックスを最適化したい方は、ぜひご覧ください。&lt;/div&gt;&lt;div&gt;dosparaplus.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://dosparaplus.com/library/upload/images/6c964948485ca6cbe6d32f90a55f38f2562e33cf.jpeg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;こちらが3D設定値の一覧です。&lt;/p&gt;&lt;p&gt;NVIDIA Control Panelを開いて、ナビゲーション ツリー ペインの&lt;code&gt;3D設定&lt;/code&gt;で&lt;code&gt;プレビューによるイメージ設定の調整&lt;/code&gt;をクリックして、&lt;code&gt;詳細3Dイメージ設定を使用する&lt;/code&gt;をクリックして、「詳細設定」をクリックすると設定できます。
基本的に殆どの項目は以下の表を参考に設定すれば、ゲームパフォーマンスが改善すると思います。&lt;/p&gt;&lt;p&gt;しかし、個人的に&lt;code&gt;シェーダー キャッシュ サイズ&lt;/code&gt;は、それ以外の設定値をいじって、ゲームを遊んでみて満足いかなかった場合に設定すれば良いかと思います。ストレージの空き容量を鑑みて設定すると思いますが、&lt;code&gt;100GB&lt;/code&gt;に設定することも出来るので、ちょっと怖いかも・・・。&lt;code&gt;異方性フィルタリング&lt;/code&gt;も後回しで良いのではないでしょうか。&lt;/p&gt;


























































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;機能&lt;/th&gt;&lt;th&gt;機能の説明&lt;/th&gt;&lt;th&gt;おすすめ設定&lt;/th&gt;&lt;th&gt;優先度&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;イメージのシャープ化&lt;/td&gt;&lt;td&gt;ゲームやアプリケーションにおけるイメージの鮮鋭度、ディテール、鮮明度などの向上&lt;/td&gt;&lt;td&gt;鮮鋭化オフ、GPUアップスケーリング無効&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CUDA - GPU&lt;/td&gt;&lt;td&gt;CUDAアプリケーション用に使用する1つまたは複数の GPUを指定する&lt;/td&gt;&lt;td&gt;すべて&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OpenGL レンダリング GPU&lt;/td&gt;&lt;td&gt;OpenGLで使用するGPUの選択&lt;/td&gt;&lt;td&gt;自動選択&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンチエイリアシング - FXAA&lt;/td&gt;&lt;td&gt;ほかのアンチエイリアシング設定よりもパフォーマンスに対する影響を低く抑えながら、プログラムの画質を向上させる&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンチエイリアシング - ガンマ修正&lt;/td&gt;&lt;td&gt;画面の色味の向上&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンチエイリアシング - トランスペアレント&lt;/td&gt;&lt;td&gt;トランスペアレントなテクスチャを持ったイメージのエッジに見られるエイリアシングを最小にする&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンチエイリアシング - モード&lt;/td&gt;&lt;td&gt;アンチエイリアシングを3Dアプリケーションでどのように適用するかを制御できる&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンチエイリアシング - 設定&lt;/td&gt;&lt;td&gt;3Dアプリケーションで使用するアンチエイリアシングレベルを設定できる&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アンビエント オクルージョン&lt;/td&gt;&lt;td&gt;オブジェクトの奥行き感を高め、現実感あふれる3Dシーンを生成する&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シェーダー キャッシュ サイズ&lt;/td&gt;&lt;td&gt;シェーダー コンパイルを保存する際にドライバが使用する可能性のあるディスクの最大容量を制御する&lt;/td&gt;&lt;td&gt;ゲームのプレイに支障がない程度のサイズかつ利用中のハードディスクのスペースを超えない程度のサイズ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スレッドした最適化&lt;/td&gt;&lt;td&gt;アプリケーションが複数のCPUを活用できる&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;テクスチャ フィルタリング - クオリティ&lt;/td&gt;&lt;td&gt;パフォーマンスとクオリティのどちらを優先するか、または2つのバランスをとって使用するか決定できる&lt;/td&gt;&lt;td&gt;高パフォーマンス&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;テクスチャ フィルタリング - トリリニア最適化&lt;/td&gt;&lt;td&gt;トリリニア フィルタリングが不要なシーンのテクスチャに対するバイリニア フィルタリングを可能にすることによって、テクスチャ フィルタリングのパフォーマンスを向上する&lt;/td&gt;&lt;td&gt;オン&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;テクスチャ フィルタリング - ネガティブ LOD バイアス&lt;/td&gt;&lt;td&gt;テクスチャ フィルタリングを鮮鋭化するために、ネガティブのLOD（詳細度）バイアスを使用するか決定する&lt;/td&gt;&lt;td&gt;許可&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;テクスチャ フィルタリング - 異方性サンプル最適化&lt;/td&gt;&lt;td&gt;テクセル サイズに基づいて使用される異方性サンプルの数が制限される&lt;/td&gt;&lt;td&gt;オン&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;トリプル バッファリング&lt;/td&gt;&lt;td&gt;「垂直同期」がオンのときにこの設定もオンにすると、パフォーマンスが向上する&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バックグラウンドアプリケーション最大フレームレート&lt;/td&gt;&lt;td&gt;バックグラウンドで実行されているゲームや3DアプリケーションをGPUがレンダリングする最大フレームレートを設定する&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バーチャルリアリティ - 可変レート スーパーサンプリング&lt;/td&gt;&lt;td&gt;バーチャルリアリティ ヘッドセットに最も影響を及ぼすフレーム中央領域に対して重点的にスーパーサンプリングを適用することで、画質を向上させる&lt;/td&gt;&lt;td&gt;オフ（デフォルト）&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;低遅延モード&lt;/td&gt;&lt;td&gt;CPUで作成されるフレーム数の制限による低遅延化&lt;/td&gt;&lt;td&gt;ウルトラ&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;優先的に使用するリフレッシュレート（&amp;lt;モニター名&amp;gt;）&lt;/td&gt;&lt;td&gt;3Dアプリケーションによって該当モニターに対して設定されているリフレッシュレートの制限値をオーバーライドできる&lt;/td&gt;&lt;td&gt;利用可能な最高値&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;垂直同期&lt;/td&gt;&lt;td&gt;アプリケーションのフレームレートをリフレッシュレートに同期することによってティアリングを防ぎ、垂直同期モードを制御できる&lt;/td&gt;&lt;td&gt;オフ&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最大フレームレート&lt;/td&gt;&lt;td&gt;GPUが出力できる最大フレームレート&lt;/td&gt;&lt;td&gt;オフ（デフォルト）&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;異方性フィルタリング&lt;/td&gt;&lt;td&gt;鋭角で描かれた3Dオブジェクトのサーフェイスに適用するテクスチャの質を向上するために使用するテクニック&lt;/td&gt;&lt;td&gt;有効にすると、画質は向上するものの、パフォーマンスが多少低下する&lt;/td&gt;&lt;td&gt;高&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;電源管理モード&lt;/td&gt;&lt;td&gt;電力を節約するか最大限に利用するかどうかを設定できる&lt;/td&gt;&lt;td&gt;パフォーマンス最大化を優先&lt;/td&gt;&lt;td&gt;必須&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. エクスプローラを使いやすくする。&lt;a href=&quot;#7-エクスプローラを使いやすくする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これはちょっとゲームとは関係ないですが、日々の作業を自作したPCで取り組んでいる時に、どうしてもエクスプローラの動きが遅いのが我慢ならなくて、このエクスプローラーを設定する方法も紹介します。おそらく効果が出るはず。でも、Windows Updateでまた使いにくくなっちゃうかもしれない。&lt;/p&gt;&lt;p&gt;Windowsで標準で付いてくる、ファイル管理ソフト「エクスプローラー」ですが、物凄く遅くなっていませんか？&lt;/p&gt;&lt;p&gt;OneDriveの同期とかもしていないのに、1つのフォルダにファイルが30個ぐらいあるだけでファイルやフォルダの読み込みが異常に遅い・・・。（30個だと5秒ぐらい待たされますかねえ。50個だと8秒ぐらい？）
そんな使い物にならないエクスプローラーを使える状態にしようと思い調べていると、こんなページを発見しました。Microsoft公式コミュニティのスレッドですね。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/answers/questions/4294725/windows11&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Windows11で、エクスプローラーにてファイルの表示に数秒かかり、異常に遅すぎる。 - Microsoft Q&amp;amp;A&lt;/div&gt;&lt;div&gt;Windows10が古くなったので、 別のPC（Windows11）に買い替えました。アップグレードではなく別のPCです。 このWindows11は昨日から使い始めたばかりです。 このWindows11で、 「音声ファイルが多くしまってあるフォルダ」を初めてエクスプローラーで開くとき、 1：まず、上から一個ずつ読み込むような消え方をする 2：そのあと、ようやく一覧で表示される というような挙動をします。 そして、2回目以降それを開く場合でも、フォルダ内容を読み込むのに時間が数秒～数十秒かかります。 これま…&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このページでも同じように、OneDriveの同期とかしていないのに、ファイルの読み込みが異常に遅い症状が報告されてディスカッションされていました。その流れを読んでいたら、その対策法が見つかったので本記事で共有したいと思います。&lt;/p&gt;&lt;a href=&quot;https://edit-anything.com/blog/windows-folder-display-changes-arbitrarily.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;edit-anything.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;edit-anything.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;edit-anything.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;レジストリを編集して、エクスプローラを速くする。&lt;a href=&quot;#レジストリを編集してエクスプローラを速くする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;はい、ちょっとレジストリを編集するのは怖いですが、そうも言ってられません。&lt;/p&gt;&lt;p&gt;OneDriveも同期していない僕が辿り着いた答えはこれしかありませんでした。画像をそのまま全部貼り付けるのは慮られるので、一部だけ貼りながらで紹介します。&lt;/p&gt;&lt;p&gt;（レジストリの編集は自己責任でお願いします。）&lt;/p&gt;&lt;p&gt;まずは、レジストリエディターを&lt;code&gt;Windowsボタン + R&lt;/code&gt;＞&lt;code&gt;regedit&lt;/code&gt;と入力し、起動します。管理者権限を求められたら&lt;code&gt;管理者として実行&lt;/code&gt;で起動します。&lt;/p&gt;&lt;p&gt;レジストリエディターを開けたら、検索窓というかアドレスバーに&lt;code&gt;コンピューター\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags\AllFolders&lt;/code&gt;と打ち込んでEnterでレジストリを開きます。
&lt;img loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;200&quot; src=&quot;/_astro/81_01.z9fba90E_ZbLiW8.webp&quot; srcset=&quot;/_astro/81_01.z9fba90E_xOpVB.webp 640w, /_astro/81_01.z9fba90E_ZbLiW8.webp 690w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;AllFolders&lt;/code&gt;以下に&lt;code&gt;Shell&lt;/code&gt;があればそれをクリックし、無ければ右クリックから&lt;code&gt;新規&lt;/code&gt;＞&lt;code&gt;キー&lt;/code&gt;で&lt;code&gt;Shell&lt;/code&gt;を作る。
そして、&lt;code&gt;Shell&lt;/code&gt;を選択した状態で、右ペインに&lt;code&gt;FolderType&lt;/code&gt;というものがあればダブルクリックで開く。無ければ右クリックで&lt;code&gt;新規&lt;/code&gt;＞&lt;code&gt;文字列値&lt;/code&gt;で&lt;code&gt;FolderType&lt;/code&gt;を作る。
&lt;img loading=&quot;lazy&quot; width=&quot;690&quot; height=&quot;200&quot; src=&quot;/_astro/81_02.BW1k-cKc_Z2us5Gr.webp&quot; srcset=&quot;/_astro/81_02.BW1k-cKc_Z1JQlMH.webp 640w, /_astro/81_02.BW1k-cKc_Z2us5Gr.webp 690w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;FolderType&lt;/code&gt;を開いたら、値のデータに&lt;code&gt;NotSpecified&lt;/code&gt;を入力して [OK] で終了です。
&lt;img loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;212&quot; src=&quot;/_astro/81_03.DdqXDOIE_Z1jO2N7.webp&quot; srcset=&quot;/_astro/81_03.DdqXDOIE_Z1jO2N7.webp 466w&quot; /&gt;&lt;/p&gt;&lt;p&gt;後は Windows を再起動すると、エクスプローラの自動最適化がされなくなります。この状態で速くなったでしょうか？
速くなっていなかったら、レジストリでフォルダ&lt;code&gt;コンピューター\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell&lt;/code&gt;に移動します。
&lt;code&gt;Bags&lt;/code&gt;と&lt;code&gt;BagMRU&lt;/code&gt;を削除します。
&lt;img loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;316&quot; src=&quot;/_astro/81_04_01.COf_X_0I_1x9T1b.webp&quot; srcset=&quot;/_astro/81_04_01.COf_X_0I_1x9T1b.webp 416w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Bags&lt;/code&gt;キーを新規作成して、図のような階層になるように&lt;code&gt;AllFolders&lt;/code&gt;＞&lt;code&gt;Shell&lt;/code&gt;キーも作成します。
そしたら先程と同じように、&lt;code&gt;Shell&lt;/code&gt;を選択した状態で、右クリックで&lt;code&gt;新規&lt;/code&gt;＞&lt;code&gt;文字列値&lt;/code&gt;で&lt;code&gt;FolderType&lt;/code&gt;を作って、&lt;code&gt;FolderType&lt;/code&gt;を開いたら、値のデータに&lt;code&gt;NotSpecified&lt;/code&gt;を入力して [OK] で終了です。
&lt;img loading=&quot;lazy&quot; width=&quot;230&quot; height=&quot;166&quot; src=&quot;/_astro/81_04_02.cQNkMN5l_Z1DvtC3.webp&quot; srcset=&quot;/_astro/81_04_02.cQNkMN5l_Z1DvtC3.webp 230w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;レジストリを編集して、エクスプローラのグループ化を無効にする。&lt;a href=&quot;#レジストリを編集してエクスプローラのグループ化を無効にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;また、この状態でエクスプローラの表示形式を詳細や一覧などにして、フォルダのオプションをクリックして、&lt;code&gt;表示&lt;/code&gt;タブの&lt;code&gt;フォルダーに適用&lt;/code&gt;を実行します。表示方法をすべてのフォルダに適用させることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;487&quot; src=&quot;/_astro/81_04.BV3GMNg-_2mYrHy.webp&quot; srcset=&quot;/_astro/81_04.BV3GMNg-_2mYrHy.webp 400w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、例えばダウンロードフォルダ内ではデフォルトで「日時でフォルダおよびファイルをグループ化する」クソお節介機能が付いていますが、そのグループ化機能が発動しなくなります。これもエクスプローラがすこぶる使いにくくなっていた原因でした。
&lt;img loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;577&quot; src=&quot;/_astro/81_05._JXG5jUb_Ntpi7.webp&quot; srcset=&quot;/_astro/81_05._JXG5jUb_ZDnjma.webp 640w, /_astro/81_05._JXG5jUb_HU949.webp 750w, /_astro/81_05._JXG5jUb_Ntpi7.webp 800w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ゲーミングPCを自作で組み立てた後に、OSで行える設定を一通り紹介しました。&lt;/p&gt;&lt;p&gt;これで快適なゲームライフが楽しめると良いですね。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-vs-pc/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;40万円で手に入れた2つのPCの性能のベンチマークを比較する（第1回：3DMarkとCinebench）&lt;/div&gt;&lt;div&gt;Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのベンチマークを比較した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241113_Eyecatch_01.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-vs-pc-02/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;40万円で手に入れた2つのPCの性能のベンチマークを比較する（第2回：SatisfactoryやGhost of Tsushimaなど）&lt;/div&gt;&lt;div&gt;Core-i9 12900HとGeForce RTX 3080 Ti Laptop GPUによるノートPCと、Ryzen 9 7950X3DとGeForce RTX 4080 SUPERによるゲーミングデスクトップのゲーム画質やFPSを比較した記事です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/12/20241206_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一旦設定は終わりましたな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれっ、でもまだやってないことがあるような・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）</title><link>https://endorphinbath.com/posts/making-gaming-pc-first-assembly/</link><guid isPermaLink="true">https://endorphinbath.com/posts/making-gaming-pc-first-assembly/</guid><description>初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。</description><pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はPCを組んでいきますよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;キンキンに冷えてくれねえかなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの組み立て方をまとめておきたい。&lt;a href=&quot;#pcの組み立て方をまとめておきたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分の備忘録として、今回PCを組み立てる過程を録画しておいたので、そのスクショをペタペタ貼っていきます。&lt;/p&gt;&lt;p&gt;昔のPC向け専門雑誌の付録などにあったような、自作PC組み立ての手順を本記事で掲載します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの構成&lt;a href=&quot;#pcの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回組み立てるPCの構成はこれで行きます。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;NVIDIA GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;192,891&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/4g4kPW0&quot; target=&quot;_blank&quot;&gt;AMD Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;104,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;ADATA_XPG_LANCER_RGB_AX5U6400C3216G-DCLARWH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;23,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N&lt;/a&gt;&lt;/td&gt;&lt;td&gt;17,780&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Supply Unit&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Cooler&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238/&quot; target=&quot;_blank&quot;&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Fan&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;DEEP COOL FK120 R-FK120-BKNPF1-G-1&lt;/a&gt; x2&lt;/td&gt;&lt;td&gt;2,752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PC Case&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332/&quot; target=&quot;_blank&quot;&gt;Antec FLUX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;td&gt;15,182&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;各PCパーツを選ぶ過程は、別の記事に載せておきました。よければご参考いただければと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-for-the-first-time/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241018_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;それでは組み立てましょう&lt;a href=&quot;#それでは組み立てましょう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PCを組み立てる順番は以下の流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;PCパーツの写真を撮る。&lt;/li&gt;
&lt;li&gt;マザボの上にCPUを載せる。&lt;/li&gt;
&lt;li&gt;CPUの上にCPUクーラーを載せる。&lt;/li&gt;
&lt;li&gt;RAMをマザボに挿す。&lt;/li&gt;
&lt;li&gt;CPUクーラーのプラグをマザボに挿す。&lt;/li&gt;
&lt;li&gt;SSDをマザボに挿す。&lt;/li&gt;
&lt;li&gt;PCケースにマザボを付ける。&lt;/li&gt;
&lt;li&gt;CPUクーラーのLED用のプラグをマザボに挿す。&lt;/li&gt;
&lt;li&gt;PCケースとマザボを接続する。&lt;/li&gt;
&lt;li&gt;PCケースにケースファンを付ける。&lt;/li&gt;
&lt;li&gt;電源ユニットにケーブルを接続する。&lt;/li&gt;
&lt;li&gt;電源ユニットをPCケースと接続する。&lt;/li&gt;
&lt;li&gt;グラボをPCケース内に設置する。&lt;/li&gt;
&lt;li&gt;PCの電源を入れてBIOSを起動する。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. PCパーツの写真を撮る。&lt;a href=&quot;#1-pcパーツの写真を撮る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この工程を忘れたくないですね。忘れると取り返すのが面倒です。&lt;/p&gt;&lt;p&gt;なので、集合写真をちゃんと撮っておきましょう。はい、チーズケーキ。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;768&quot; src=&quot;/_astro/01.rvRhFYqm_Z2qJjml.webp&quot; srcset=&quot;/_astro/01.rvRhFYqm_eE7Db.webp 640w, /_astro/01.rvRhFYqm_26UFc0.webp 750w, /_astro/01.rvRhFYqm_1DvGDa.webp 828w, /_astro/01.rvRhFYqm_Z2qJjml.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あと、今回使った道具も紹介しておきます。&lt;/p&gt;&lt;p&gt;左から、短いドライバー、精密ドライバー、細長いドライバー、ニッパーです。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;768&quot; src=&quot;/_astro/02.DRSuKKm3_Z28fiq6.webp&quot; srcset=&quot;/_astro/02.DRSuKKm3_Z4Kgv4.webp 640w, /_astro/02.DRSuKKm3_1Mvh2K.webp 750w, /_astro/02.DRSuKKm3_1k6itU.webp 828w, /_astro/02.DRSuKKm3_Z28fiq6.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. マザボの上にCPUを載せる。&lt;a href=&quot;#2-マザボの上にcpuを載せる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではまずは、マザーボードを触っていきます。これが今回のASRock B650 Steel Legendです。
&lt;img loading=&quot;lazy&quot; width=&quot;1158&quot; height=&quot;737&quot; src=&quot;/_astro/04.Bqdxo7UO_sEPJu.webp&quot; srcset=&quot;/_astro/04.Bqdxo7UO_2lu9Kh.webp 640w, /_astro/04.Bqdxo7UO_S5X0O.webp 750w, /_astro/04.Bqdxo7UO_1NN6av.webp 828w, /_astro/04.Bqdxo7UO_nCwsz.webp 1080w, /_astro/04.Bqdxo7UO_sEPJu.webp 1158w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ふ、ふつくしい。&lt;/p&gt;&lt;p&gt;そして、そのふつくしいマザボの上に、AMDのCPU「Ryzen 9 7950X3D」を載せていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05.KCiFP9lk_Z1OISKK.webp&quot; srcset=&quot;/_astro/05.KCiFP9lk_Z2keFyw.webp 640w, /_astro/05.KCiFP9lk_nrkeg.webp 750w, /_astro/05.KCiFP9lk_1coizG.webp 828w, /_astro/05.KCiFP9lk_Z2973U2.webp 1080w, /_astro/05.KCiFP9lk_Z19VyXs.webp 1280w, /_astro/05.KCiFP9lk_wnRDG.webp 1668w, /_astro/05.KCiFP9lk_Z1OISKK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ふ、ふつくしい。&lt;/p&gt;&lt;p&gt;そしたらマザボのCPUスロットにあるカバーを外します。留め具を外します。&lt;/p&gt;&lt;p&gt;あっ、これから外した部品は全て保管しておくことに気を付けましょう。ペリペリフィルム以外はちゃんと保管しておきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06.CPFmTIU__ZbwuAP.webp&quot; srcset=&quot;/_astro/06.CPFmTIU__Z2r0SPy.webp 640w, /_astro/06.CPFmTIU__gF6We.webp 750w, /_astro/06.CPFmTIU__15C5iE.webp 828w, /_astro/06.CPFmTIU__ZuTEK7.webp 1080w, /_astro/06.CPFmTIU__tfObs.webp 1280w, /_astro/06.CPFmTIU__2aAgNB.webp 1668w, /_astro/06.CPFmTIU__ZbwuAP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUスロットのカバーを上げます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07.dII5nx9o_ZC4Yun.webp&quot; srcset=&quot;/_astro/07.dII5nx9o_Z18O0oG.webp 640w, /_astro/07.dII5nx9o_1yR0o6.webp 750w, /_astro/07.dII5nx9o_2nNXJw.webp 828w, /_astro/07.dII5nx9o_ZVs9DE.webp 1080w, /_astro/07.dII5nx9o_2HkhU.webp 1280w, /_astro/07.dII5nx9o_1J2LU4.webp 1668w, /_astro/07.dII5nx9o_ZC4Yun.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUをスロットの中に入れます。CPUの左上に三角形が書いてあるので、スロットの左上に書いてある三角形と合わせて向きを合わせます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/08.bcpDG51B_Z1iJhdv.webp&quot; srcset=&quot;/_astro/08.bcpDG51B_CTjQB.webp 640w, /_astro/08.bcpDG51B_Z1IAN9x.webp 750w, /_astro/08.bcpDG51B_ZTDON7.webp 828w, /_astro/08.bcpDG51B_Z1C7rmM.webp 1080w, /_astro/08.bcpDG51B_ZCVWqd.webp 1280w, /_astro/08.bcpDG51B_13nubV.webp 1668w, /_astro/08.bcpDG51B_Z1iJhdv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スロットのカバーを閉じて、先程の留め具を戻します。ここが結構力が必要なので、ビギナーはビビります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/09.DwJiZrEJ_26qKYt.webp&quot; srcset=&quot;/_astro/09.DwJiZrEJ_JBXjz.webp 640w, /_astro/09.DwJiZrEJ_Z1BS9Gz.webp 750w, /_astro/09.DwJiZrEJ_ZMVbl9.webp 828w, /_astro/09.DwJiZrEJ_1M3APc.webp 1080w, /_astro/09.DwJiZrEJ_Z2iX32a.webp 1280w, /_astro/09.DwJiZrEJ_ZBCAp1.webp 1668w, /_astro/09.DwJiZrEJ_26qKYt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;留め具をちゃんと戻すと、スロットのカバーが外れるので、別の場所に置いておきます。これ以降カバーは使いませんが、保証を効かせたり、マザボを売る時に必要なので保管しておきます。&lt;/p&gt;&lt;p&gt;CPUの設置は完了です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10.BSBW0ApJ_2mT4QG.webp&quot; srcset=&quot;/_astro/10.BSBW0ApJ_ZnSmJ5.webp 640w, /_astro/10.BSBW0ApJ_2jMD3H.webp 750w, /_astro/10.BSBW0ApJ_Z1VrwoN.webp 828w, /_astro/10.BSBW0ApJ_23vTHp.webp 1080w, /_astro/10.BSBW0ApJ_Z22uJ9W.webp 1280w, /_astro/10.BSBW0ApJ_ZlahwN.webp 1668w, /_astro/10.BSBW0ApJ_2mT4QG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. CPUの上にCPUクーラーを載せる。&lt;a href=&quot;#3-cpuの上にcpuクーラーを載せる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、先程設置したCPUの上にCPUクーラーを設置していきます。&lt;/p&gt;&lt;p&gt;これが今回のCPUクーラー。空冷式です。デカいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_01.C06PMFG9_2g0oVz.webp&quot; srcset=&quot;/_astro/21_01.C06PMFG9_28DKsD.webp 640w, /_astro/21_01.C06PMFG9_Z2bxjTN.webp 750w, /_astro/21_01.C06PMFG9_2g5Ovj.webp 828w, /_astro/21_01.C06PMFG9_Z2lB63p.webp 1080w, /_astro/21_01.C06PMFG9_ZI43Hb.webp 1280w, /_astro/21_01.C06PMFG9_Zq20R9.webp 1668w, /_astro/21_01.C06PMFG9_2g0oVz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUクーラーを取り付けるためのパーツ達。今回のCPUはAMD製なので使わないパーツもあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_02.BILI2jtl_Z29zLMI.webp&quot; srcset=&quot;/_astro/21_02.BILI2jtl_1YWgz3.webp 640w, /_astro/21_02.BILI2jtl_Z2keNNo.webp 750w, /_astro/21_02.BILI2jtl_27okBI.webp 828w, /_astro/21_02.BILI2jtl_Z1G08XL.webp 1080w, /_astro/21_02.BILI2jtl_Z3s6Cx.webp 1280w, /_astro/21_02.BILI2jtl_eyVcu.webp 1668w, /_astro/21_02.BILI2jtl_Z29zLMI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;2-1. CPUクーラー用の治具を設置する。&lt;a href=&quot;#2-1-cpuクーラー用の治具を設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではまずは、CPUクーラーを載せるために、マザボ上で作業します。&lt;/p&gt;&lt;p&gt;マザボ上にあるCPUの周りにあるカバーを外していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_03.C134CJSH_2lJwfu.webp&quot; srcset=&quot;/_astro/21_03.C134CJSH_ELwkE.webp 640w, /_astro/21_03.C134CJSH_1pLzL9.webp 750w, /_astro/21_03.C134CJSH_MdAnk.webp 828w, /_astro/21_03.C134CJSH_Z2fQXJu.webp 1080w, /_astro/21_03.C134CJSH_ZCjVog.webp 1280w, /_astro/21_03.C134CJSH_ZkhSye.webp 1668w, /_astro/21_03.C134CJSH_2lJwfu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUの周りにあるカバーが外れました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_04.pQg3A_MJ_121H8K.webp&quot; srcset=&quot;/_astro/21_04.pQg3A_MJ_Z1OUaUQ.webp 640w, /_astro/21_04.pQg3A_MJ_Z14U7um.webp 750w, /_astro/21_04.pQg3A_MJ_Z1Ht6Sb.webp 828w, /_astro/21_04.pQg3A_MJ_1uBkWH.webp 1080w, /_astro/21_04.pQg3A_MJ_Z1W2Kv0.webp 1280w, /_astro/21_04.pQg3A_MJ_Z1E0HEX.webp 1668w, /_astro/21_04.pQg3A_MJ_121H8K.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUクーラーに同梱されていた治具を留めるためのネジをCPUの周りに設置します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_05.CNu0E1je_Z14FggN.webp&quot; srcset=&quot;/_astro/21_05.CNu0E1je_1R4z11.webp 640w, /_astro/21_05.CNu0E1je_Z2s7vmq.webp 750w, /_astro/21_05.CNu0E1je_1YvD3G.webp 828w, /_astro/21_05.CNu0E1je_ZB5CrQ.webp 1080w, /_astro/21_05.CNu0E1je_11roSn.webp 1280w, /_astro/21_05.CNu0E1je_1jtrIp.webp 1668w, /_astro/21_05.CNu0E1je_Z14FggN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら治具を設置します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_06.Co2GORJd_ZomnLn.webp&quot; srcset=&quot;/_astro/21_06.Co2GORJd_Z13HbEL.webp 640w, /_astro/21_06.Co2GORJd_ZiH8eh.webp 750w, /_astro/21_06.Co2GORJd_ZVg7C6.webp 828w, /_astro/21_06.Co2GORJd_4df2z.webp 1080w, /_astro/21_06.Co2GORJd_1GKhnN.webp 1280w, /_astro/21_06.Co2GORJd_1YMkdP.webp 1668w, /_astro/21_06.Co2GORJd_ZomnLn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに治具の上にネジを設置します。このネジがプラスドライバーで回せるようになっていました。回します。&lt;/p&gt;&lt;p&gt;これでCPUクーラーを載せるためのマザボでの作業は終わりです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/21_07.DJC-UEv__Z16RuXs.webp&quot; srcset=&quot;/_astro/21_07.DJC-UEv__ZA5CAk.webp 640w, /_astro/21_07.DJC-UEv__9TpPa.webp 750w, /_astro/21_07.DJC-UEv__ZsDyxE.webp 828w, /_astro/21_07.DJC-UEv__ZDhR9v.webp 1080w, /_astro/21_07.DJC-UEv__YfabI.webp 1280w, /_astro/21_07.DJC-UEv__1hhd1K.webp 1668w, /_astro/21_07.DJC-UEv__Z16RuXs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-2. CPUにグリスを塗る。&lt;a href=&quot;#2-2-cpuにグリスを塗る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではCPUクーラーを載せていきます。&lt;/p&gt;&lt;p&gt;まずはCPUクーラーに付いているファンを取り外します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_01.1Mf_FH79_fwbau.webp&quot; srcset=&quot;/_astro/22_01.1Mf_FH79_Zno7qy.webp 640w, /_astro/22_01.1Mf_FH79_mAUYV.webp 750w, /_astro/22_01.1Mf_FH79_ZfW3nS.webp 828w, /_astro/22_01.1Mf_FH79_I6NYr.webp 1080w, /_astro/22_01.1Mf_FH79_2lDQkF.webp 1280w, /_astro/22_01.1Mf_FH79_Z2qveDe.webp 1668w, /_astro/22_01.1Mf_FH79_fwbau.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ファンを取り外しました。CPUと密着させる面にはまだシールが貼ってあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_02.DNG6YBFG_2tnnfL.webp&quot; srcset=&quot;/_astro/22_02.DNG6YBFG_1E3Toq.webp 640w, /_astro/22_02.DNG6YBFG_2p3WOU.webp 750w, /_astro/22_02.DNG6YBFG_1LuXr6.webp 828w, /_astro/22_02.DNG6YBFG_Z28e7Jd.webp 1080w, /_astro/22_02.DNG6YBFG_ZuG5nY.webp 1280w, /_astro/22_02.DNG6YBFG_ZcE2xW.webp 1668w, /_astro/22_02.DNG6YBFG_2tnnfL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回使おうと思っていたグリス（左）と、CPUクーラーに付属していたグリス（右）。&lt;/p&gt;&lt;p&gt;やっぱり今回はCPUクーラーに付属していた方を使います。グリスはいずれまた使うことでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_03.BGeIjdms_ZhXQtb.webp&quot; srcset=&quot;/_astro/22_03.BGeIjdms_2nCAER.webp 640w, /_astro/22_03.BGeIjdms_Z1VytHz.webp 750w, /_astro/22_03.BGeIjdms_2v4EHx.webp 828w, /_astro/22_03.BGeIjdms_aALkL.webp 1080w, /_astro/22_03.BGeIjdms_1N8NG0.webp 1280w, /_astro/22_03.BGeIjdms_26aQw2.webp 1668w, /_astro/22_03.BGeIjdms_ZhXQtb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それではCPUの上にグリスを垂らして塗っていきます。&lt;/p&gt;&lt;p&gt;今回の塗り方は、バッテンを描いて、円を描く方式です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_04.BYGQjk-4_1gY2aO.webp&quot; srcset=&quot;/_astro/22_04.BYGQjk-4_1BGt8w.webp 640w, /_astro/22_04.BYGQjk-4_2mGwz1.webp 750w, /_astro/22_04.BYGQjk-4_1J8xbc.webp 828w, /_astro/22_04.BYGQjk-4_1JyEYL.webp 1080w, /_astro/22_04.BYGQjk-4_Z1H5qsV.webp 1280w, /_astro/22_04.BYGQjk-4_Z1p3nCT.webp 1668w, /_astro/22_04.BYGQjk-4_1gY2aO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんだか、塗りすぎた気がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_05.B74IzCwO_Z1PrXFx.webp&quot; srcset=&quot;/_astro/22_05.B74IzCwO_Z1UztYr.webp 640w, /_astro/22_05.B74IzCwO_Z1azqxW.webp 750w, /_astro/22_05.B74IzCwO_Z1N8pVL.webp 828w, /_astro/22_05.B74IzCwO_Z1mRkQA.webp 1080w, /_astro/22_05.B74IzCwO_fEGtD.webp 1280w, /_astro/22_05.B74IzCwO_xGJjF.webp 1668w, /_astro/22_05.B74IzCwO_Z1PrXFx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-3. CPUクーラーを設置する。&lt;a href=&quot;#2-3-cpuクーラーを設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではグリスを塗ったところに、CPUクーラーを載せていきます。&lt;/p&gt;&lt;p&gt;CPUクーラーの接地面のシールを剥がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_06.D8EssE6F_IyEmc.webp&quot; srcset=&quot;/_astro/22_06.D8EssE6F_16AxrF.webp 640w, /_astro/22_06.D8EssE6F_1QAASa.webp 750w, /_astro/22_06.D8EssE6F_1e2Bul.webp 828w, /_astro/22_06.D8EssE6F_1c9ib9.webp 1080w, /_astro/22_06.D8EssE6F_Z2fuNhy.webp 1280w, /_astro/22_06.D8EssE6F_Z1WsKrw.webp 1668w, /_astro/22_06.D8EssE6F_IyEmc.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;I/O側とファン側の向き、CPUクーラーをマザボに固定するネジの位置、などに気を付けてCPUクーラーを設置します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_07.B3Ie2MpB_Z91SOR.webp&quot; srcset=&quot;/_astro/22_07.B3Ie2MpB_1ySfu9.webp 640w, /_astro/22_07.B3Ie2MpB_2jSiUD.webp 750w, /_astro/22_07.B3Ie2MpB_1GkjwO.webp 828w, /_astro/22_07.B3Ie2MpB_jxIY5.webp 1080w, /_astro/22_07.B3Ie2MpB_1W5Lkj.webp 1280w, /_astro/22_07.B3Ie2MpB_2f7Oal.webp 1668w, /_astro/22_07.B3Ie2MpB_Z91SOR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUクーラーをマザボに固定するために、ネジを手で回します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_08.Wq3XgJqb_rpEgR.webp&quot; srcset=&quot;/_astro/22_08.Wq3XgJqb_L21oh.webp 640w, /_astro/22_08.Wq3XgJqb_1w24OL.webp 750w, /_astro/22_08.Wq3XgJqb_St5qW.webp 828w, /_astro/22_08.Wq3XgJqb_U0i5O.webp 1080w, /_astro/22_08.Wq3XgJqb_Z2wDNmS.webp 1280w, /_astro/22_08.Wq3XgJqb_Z2eBKwQ.webp 1668w, /_astro/22_08.Wq3XgJqb_rpEgR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕はグリスに付ける前に、この位置のネジを把握していなくて、位置調整の際にグリスが少し漏れたりしました。今度は気を付けないとなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_09.NZxEeeHy_ZXGAvh.webp&quot; srcset=&quot;/_astro/22_09.NZxEeeHy_Z23S3VM.webp 640w, /_astro/22_09.NZxEeeHy_Z1iS0vi.webp 750w, /_astro/22_09.NZxEeeHy_Z1VqYT7.webp 828w, /_astro/22_09.NZxEeeHy_Zv6WGk.webp 1080w, /_astro/22_09.NZxEeeHy_17q4DT.webp 1280w, /_astro/22_09.NZxEeeHy_1ps7tV.webp 1668w, /_astro/22_09.NZxEeeHy_ZXGAvh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ネジを回せるところまで回し終わって、CPUクーラーとグリスとCPUが密着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_10.B_18sthO_oJX1K.webp&quot; srcset=&quot;/_astro/22_10.B_18sthO_AVnmb.webp 640w, /_astro/22_10.B_18sthO_1lVqMF.webp 750w, /_astro/22_10.B_18sthO_InroQ.webp 828w, /_astro/22_10.B_18sthO_RkAPH.webp 1080w, /_astro/22_10.B_18sthO_2uRDbV.webp 1280w, /_astro/22_10.B_18sthO_Z2hhrLX.webp 1668w, /_astro/22_10.B_18sthO_oJX1K.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、CPUクーラーのカバーを外して、ネジをちゃんと締めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_11.B-WnED5J_1W6Voy.webp&quot; srcset=&quot;/_astro/22_11.B-WnED5J_tXEIU.webp 640w, /_astro/22_11.B-WnED5J_1eXIap.webp 750w, /_astro/22_11.B-WnED5J_BpILA.webp 828w, /_astro/22_11.B-WnED5J_2pGzdv.webp 1080w, /_astro/22_11.B-WnED5J_Z11Wwfc.webp 1280w, /_astro/22_11.B-WnED5J_ZIUtpa.webp 1668w, /_astro/22_11.B-WnED5J_1W6Voy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回のマザボに同梱されていた長いプラスドライバーが役に立ちます。90度に曲がっているのでトルクも出しやすいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_12.LInBiaDQ_Z4lhaV.webp&quot; srcset=&quot;/_astro/22_12.LInBiaDQ_Z1H5mqm.webp 640w, /_astro/22_12.LInBiaDQ_ZW5iYR.webp 750w, /_astro/22_12.LInBiaDQ_Z1zDinG.webp 828w, /_astro/22_12.LInBiaDQ_oelD1.webp 1080w, /_astro/22_12.LInBiaDQ_21LnYf.webp 1280w, /_astro/22_12.LInBiaDQ_2jNqOh.webp 1668w, /_astro/22_12.LInBiaDQ_Z4lhaV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ネジを回し切って、CPUクーラーをマザボに固定できたら、先程取り外したファンをCPUクーラーに戻します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_13.DZPc-vu__ZXjieq.webp&quot; srcset=&quot;/_astro/22_13.DZPc-vu__Z23Rj65.webp 640w, /_astro/22_13.DZPc-vu__Z1iRfEA.webp 750w, /_astro/22_13.DZPc-vu__Z1Vqf3p.webp 828w, /_astro/22_13.DZPc-vu__ZuIEpt.webp 1080w, /_astro/22_13.DZPc-vu__17NmUK.webp 1280w, /_astro/22_13.DZPc-vu__1pPpKM.webp 1668w, /_astro/22_13.DZPc-vu__ZXjieq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カバーも戻します。&lt;/p&gt;&lt;p&gt;これでCPUクーラーの取り付け作業は一旦完了です。もう一つのファンはRAMをマザボに挿した後に戻します。（今回のRyzenのCPU Socketは、AM5でしたけど設置できるんですね。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/22_14.DzRzmR1G_1QKwB8.webp&quot; srcset=&quot;/_astro/22_14.DzRzmR1G_2rRPdu.webp 640w, /_astro/22_14.DzRzmR1G_Z1Rjf9W.webp 750w, /_astro/22_14.DzRzmR1G_Z2uRexL.webp 828w, /_astro/22_14.DzRzmR1G_2klaq5.webp 1080w, /_astro/22_14.DzRzmR1G_Z17iV2C.webp 1280w, /_astro/22_14.DzRzmR1G_ZOgScA.webp 1668w, /_astro/22_14.DzRzmR1G_1QKwB8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. RAMをマザボに挿す。&lt;a href=&quot;#4-ramをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではRAMをマザボに挿します。&lt;/p&gt;&lt;p&gt;今回使うRAMは、「A-DATA XPG Lancer RGB AX5U6400C3216G-DCLARWH」です。ガンツスーツみたいなのを着てる女の子の赤いパッケージが目印のメモリです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31_01.D6HJg_pH_ZFxSHO.webp&quot; srcset=&quot;/_astro/31_01.D6HJg_pH_1HPDo7.webp 640w, /_astro/31_01.D6HJg_pH_2sPGOB.webp 750w, /_astro/31_01.D6HJg_pH_1PhHqM.webp 828w, /_astro/31_01.D6HJg_pH_ZcXfSR.webp 1080w, /_astro/31_01.D6HJg_pH_1pyLrm.webp 1280w, /_astro/31_01.D6HJg_pH_1HAOho.webp 1668w, /_astro/31_01.D6HJg_pH_ZFxSHO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボ上のメモリスロットのラッチを押して、ホルダーを外します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31_02.H9eAZLch_CC5BE.webp&quot; srcset=&quot;/_astro/31_02.H9eAZLch_2prYbx.webp 640w, /_astro/31_02.H9eAZLch_Z1TJ6bT.webp 750w, /_astro/31_02.H9eAZLch_2wT3ed.webp 828w, /_astro/31_02.H9eAZLch_16cIqB.webp 1080w, /_astro/31_02.H9eAZLch_Z2lrn26.webp 1280w, /_astro/31_02.H9eAZLch_Z23pkc4.webp 1668w, /_astro/31_02.H9eAZLch_CC5BE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;メモリを挿すスロットの場所と、メモリの切欠きの位置に気を付けて挿していきます。スロットの場所は説明書を要確認です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31_03.D84glTYO_1zzj6y.webp&quot; srcset=&quot;/_astro/31_03.D84glTYO_Z1DOKPn.webp 640w, /_astro/31_03.D84glTYO_ZSOHoS.webp 750w, /_astro/31_03.D84glTYO_Z1wnGMH.webp 828w, /_astro/31_03.D84glTYO_239VUv.webp 1080w, /_astro/31_03.D84glTYO_Z1ou9xc.webp 1280w, /_astro/31_03.D84glTYO_Z16s6Ha.webp 1668w, /_astro/31_03.D84glTYO_1zzj6y.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;1枚目のメモリが挿せました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31_04.NIJ7m5gq_18hlpy.webp&quot; srcset=&quot;/_astro/31_04.NIJ7m5gq_1Vq8FJ.webp 640w, /_astro/31_04.NIJ7m5gq_Z2nKVGH.webp 750w, /_astro/31_04.NIJ7m5gq_23RcIp.webp 828w, /_astro/31_04.NIJ7m5gq_1AQYev.webp 1080w, /_astro/31_04.NIJ7m5gq_Z1PM7ec.webp 1280w, /_astro/31_04.NIJ7m5gq_Z1xK4oa.webp 1668w, /_astro/31_04.NIJ7m5gq_18hlpy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2枚目のメモリも、1枚目のメモリと同様に挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/31_05.D1ibaKFe_Z1V9jCO.webp&quot; srcset=&quot;/_astro/31_05.D1ibaKFe_Z1KKiz8.webp 640w, /_astro/31_05.D1ibaKFe_Z10Kf8D.webp 750w, /_astro/31_05.D1ibaKFe_Z1Djews.webp 828w, /_astro/31_05.D1ibaKFe_Z1syFNR.webp 1080w, /_astro/31_05.D1ibaKFe_9Xlwm.webp 1280w, /_astro/31_05.D1ibaKFe_s0omo.webp 1668w, /_astro/31_05.D1ibaKFe_Z1V9jCO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. CPUクーラーのプラグをマザボに挿す。&lt;a href=&quot;#5-cpuクーラーのプラグをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;RAMを挿したので、CPUクーラーの取り付けの続きをしていきます。&lt;/p&gt;&lt;p&gt;まずは、CPUクーラーに戻していなかったファンを戻します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32_01.jlQWrlyo_jMqrQ.webp&quot; srcset=&quot;/_astro/32_01.jlQWrlyo_ZHgv7z.webp 640w, /_astro/32_01.jlQWrlyo_2IxiU.webp 750w, /_astro/32_01.jlQWrlyo_ZzOr4T.webp 828w, /_astro/32_01.jlQWrlyo_Mn4gN.webp 1080w, /_astro/32_01.jlQWrlyo_2pU6C2.webp 1280w, /_astro/32_01.jlQWrlyo_Z2meYlR.webp 1668w, /_astro/32_01.jlQWrlyo_jMqrQ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次は、CPUクーラーに付いているプラグをマザボに挿します。切欠きの位置に気を付けて挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32_02.DrunMmfI_1o5GmX.webp&quot; srcset=&quot;/_astro/32_02.DrunMmfI_Z2tejWT.webp 640w, /_astro/32_02.DrunMmfI_Z1Iegwp.webp 750w, /_astro/32_02.DrunMmfI_Z2lMfUe.webp 828w, /_astro/32_02.DrunMmfI_1QFkbU.webp 1080w, /_astro/32_02.DrunMmfI_Z1zXLgM.webp 1280w, /_astro/32_02.DrunMmfI_Z1hVIqK.webp 1668w, /_astro/32_02.DrunMmfI_1o5GmX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回のCPUクーラーのプラグの端子は「4-PIN/CPU_FAN」対応。マザボを要確認です。&lt;/p&gt;&lt;p&gt;今回は2箇所に挿しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/32_03.DZFQ-VcS_ZUMevT.webp&quot; srcset=&quot;/_astro/32_03.DZFQ-VcS_22mrtG.webp 640w, /_astro/32_03.DZFQ-VcS_Z2hOCSK.webp 750w, /_astro/32_03.DZFQ-VcS_29Nvwm.webp 828w, /_astro/32_03.DZFQ-VcS_ZscAGW.webp 1080w, /_astro/32_03.DZFQ-VcS_1akqDh.webp 1280w, /_astro/32_03.DZFQ-VcS_1smttj.webp 1668w, /_astro/32_03.DZFQ-VcS_ZUMevT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. SSDをマザボに挿す。&lt;a href=&quot;#6-ssdをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;主記憶周りが終わったので、次は補助記憶の部分です。&lt;/p&gt;&lt;p&gt;今回使うSSDは、「KIOXIA 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N」です。このSSDのM.2サイズは、2280でした。&lt;/p&gt;&lt;p&gt;この作業の際には、先程使っていた大きいドライバーではなく、精密ドライバーを使いました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_01.ar0XbTSE_Z2vSNfn.webp&quot; srcset=&quot;/_astro/33_01.ar0XbTSE_Z17S4BL.webp 640w, /_astro/33_01.ar0XbTSE_ZmS1bh.webp 750w, /_astro/33_01.ar0XbTSE_Z10r0z6.webp 828w, /_astro/33_01.ar0XbTSE_Z23jaqq.webp 1080w, /_astro/33_01.ar0XbTSE_ZpL85c.webp 1280w, /_astro/33_01.ar0XbTSE_Z7J5fa.webp 1668w, /_astro/33_01.ar0XbTSE_Z2vSNfn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUクーラーの麓、奥の方に見えるマザボのSSD用スロットのカバーを外します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_02.MxEtCMQW_Z248P5I.webp&quot; srcset=&quot;/_astro/33_02.MxEtCMQW_115CmP.webp 640w, /_astro/33_02.MxEtCMQW_1L5FNk.webp 750w, /_astro/33_02.MxEtCMQW_18wGpv.webp 828w, /_astro/33_02.MxEtCMQW_Z1AycgL.webp 1080w, /_astro/33_02.MxEtCMQW_1XP4s.webp 1280w, /_astro/33_02.MxEtCMQW_k0RTu.webp 1668w, /_astro/33_02.MxEtCMQW_Z248P5I.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「M.2」と書いてあるカバーです。カバーを留めているネジを回してネジを外します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_03.CgenAF4b_Z1YuGrN.webp&quot; srcset=&quot;/_astro/33_03.CgenAF4b_Z2pSsjz.webp 640w, /_astro/33_03.CgenAF4b_Z1ESoS5.webp 750w, /_astro/33_03.CgenAF4b_Z2irogT.webp 828w, /_astro/33_03.CgenAF4b_Z1vU3CQ.webp 1080w, /_astro/33_03.CgenAF4b_6BXHn.webp 1280w, /_astro/33_03.CgenAF4b_oE1xp.webp 1668w, /_astro/33_03.CgenAF4b_Z1YuGrN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「M.2」と書いてあるカバーが外れました。ここにSSDを挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_04.BbUSqXKN_ZOYq1d.webp&quot; srcset=&quot;/_astro/33_04.BbUSqXKN_Z1eyXfj.webp 640w, /_astro/33_04.BbUSqXKN_ZtyTNO.webp 750w, /_astro/33_04.BbUSqXKN_Z177TcD.webp 828w, /_astro/33_04.BbUSqXKN_ZmoMcg.webp 1080w, /_astro/33_04.BbUSqXKN_1g8f8X.webp 1280w, /_astro/33_04.BbUSqXKN_1yahY0.webp 1668w, /_astro/33_04.BbUSqXKN_ZOYq1d.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;借り挿しするとこんな感じです。もう少し深く挿し込みます。&lt;/p&gt;&lt;p&gt;しっかり深く挿し込んだら、SSDをカバーの中で留めるためのネジを締める場合とそうでない場合があるのですが、今回は締めません。今回のマザボの説明書によると、今回のSSDのM.2サイズが2280だからです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_05.DfTzw_Ji_2tbh7i.webp&quot; srcset=&quot;/_astro/33_05.DfTzw_Ji_101W00.webp 640w, /_astro/33_05.DfTzw_Ji_1K20qu.webp 750w, /_astro/33_05.DfTzw_Ji_17t12F.webp 828w, /_astro/33_05.DfTzw_Ji_Z28qdRG.webp 1080w, /_astro/33_05.DfTzw_Ji_ZuSbws.webp 1280w, /_astro/33_05.DfTzw_Ji_ZcQ8Gq.webp 1668w, /_astro/33_05.DfTzw_Ji_2tbh7i.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程外したカバーを戻します。&lt;/p&gt;&lt;p&gt;戻す前には、カバーに付いているフィルムをペリペリと剥がしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_06.CKm1U5kg_Z1aC3gk.webp&quot; srcset=&quot;/_astro/33_06.CKm1U5kg_ZKdocV.webp 640w, /_astro/33_06.CKm1U5kg_ZdkLr.webp 750w, /_astro/33_06.CKm1U5kg_ZCLkag.webp 828w, /_astro/33_06.CKm1U5kg_ZH2prn.webp 1080w, /_astro/33_06.CKm1U5kg_UuBSQ.webp 1280w, /_astro/33_06.CKm1U5kg_1dwEIS.webp 1668w, /_astro/33_06.CKm1U5kg_Z1aC3gk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ペリペリと剥がれました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_07.DnUBgWy-_1SVoky.webp&quot; srcset=&quot;/_astro/33_07.DnUBgWy-_Z19bu4L.webp 640w, /_astro/33_07.DnUBgWy-_ZobqDh.webp 750w, /_astro/33_07.DnUBgWy-_Z11Jq26.webp 828w, /_astro/33_07.DnUBgWy-_2mw29v.webp 1080w, /_astro/33_07.DnUBgWy-_Z1584jc.webp 1280w, /_astro/33_07.DnUBgWy-_ZM61ta.webp 1668w, /_astro/33_07.DnUBgWy-_1SVoky.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カバーを戻して、ネジで留めます。このネジで先程挿したM.2 SSDも固定されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_08.BwdiU9Tv_bYeij.webp&quot; srcset=&quot;/_astro/33_08.BwdiU9Tv_1zyBov.webp 640w, /_astro/33_08.BwdiU9Tv_2kyEP0.webp 750w, /_astro/33_08.BwdiU9Tv_1H0Frb.webp 828w, /_astro/33_08.BwdiU9Tv_EyR7g.webp 1080w, /_astro/33_08.BwdiU9Tv_2i6Tsu.webp 1280w, /_astro/33_08.BwdiU9Tv_Z2u3bvp.webp 1668w, /_astro/33_08.BwdiU9Tv_bYeij.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;SSDのカバーをネジで留めました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_09.FEL5PFmu_2gUo72.webp&quot; srcset=&quot;/_astro/33_09.FEL5PFmu_2sGlqi.webp 640w, /_astro/33_09.FEL5PFmu_Z1QuIW9.webp 750w, /_astro/33_09.FEL5PFmu_Z2u3IkX.webp 828w, /_astro/33_09.FEL5PFmu_Z2kG6RW.webp 1080w, /_astro/33_09.FEL5PFmu_ZH94wI.webp 1280w, /_astro/33_09.FEL5PFmu_Zp71GG.webp 1668w, /_astro/33_09.FEL5PFmu_2gUo72.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここまで作業で、CPU、CPUクーラー、RAM、SSDがマザボに搭載されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/33_10.Dvrwpoiz_Sfe0j.webp&quot; srcset=&quot;/_astro/33_10.Dvrwpoiz_Zc8wD3.webp 640w, /_astro/33_10.Dvrwpoiz_xQvMr.webp 750w, /_astro/33_10.Dvrwpoiz_Z4GsAn.webp 828w, /_astro/33_10.Dvrwpoiz_1lOQOg.webp 1080w, /_astro/33_10.Dvrwpoiz_Z25OeDr.webp 1280w, /_astro/33_10.Dvrwpoiz_Z1MMbNp.webp 1668w, /_astro/33_10.Dvrwpoiz_Sfe0j.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. PCケースにマザボを付ける。&lt;a href=&quot;#7-pcケースにマザボを付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではこれから、PCケースに対して作業をしていきます。&lt;/p&gt;&lt;p&gt;今回使うPCケース「Antec FLUX」の外観はこんな感じです。ATXで大きめです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_01.B87JZ9fM_1n273E.webp&quot; srcset=&quot;/_astro/37_01.B87JZ9fM_8OQjn.webp 640w, /_astro/37_01.B87JZ9fM_SOTJR.webp 750w, /_astro/37_01.B87JZ9fM_ggUm3.webp 828w, /_astro/37_01.B87JZ9fM_1PBJRB.webp 1080w, /_astro/37_01.B87JZ9fM_Z1B2lA6.webp 1280w, /_astro/37_01.B87JZ9fM_Z1j0iK4.webp 1668w, /_astro/37_01.B87JZ9fM_1n273E.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースは一旦寝かせておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_02.D0ABus7G_ytA9H.webp&quot; srcset=&quot;/_astro/37_02.D0ABus7G_VgjfO.webp 640w, /_astro/37_02.D0ABus7G_1GgmGj.webp 750w, /_astro/37_02.D0ABus7G_13Hniu.webp 828w, /_astro/37_02.D0ABus7G_124dXE.webp 1080w, /_astro/37_02.D0ABus7G_Z2pzRu3.webp 1280w, /_astro/37_02.D0ABus7G_Z27xOE1.webp 1668w, /_astro/37_02.D0ABus7G_ytA9H.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ガラス面側のカバーを外します。ケースの上端の固めのピンで留まっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_03.DB9WBzgJ_Z1ISCrO.webp&quot; srcset=&quot;/_astro/37_03.DB9WBzgJ_2aMddI.webp 640w, /_astro/37_03.DB9WBzgJ_Z29oR9I.webp 750w, /_astro/37_03.DB9WBzgJ_2iehgo.webp 828w, /_astro/37_03.DB9WBzgJ_Z1giYCR.webp 1080w, /_astro/37_03.DB9WBzgJ_me2Hm.webp 1280w, /_astro/37_03.DB9WBzgJ_Eg5xo.webp 1668w, /_astro/37_03.DB9WBzgJ_Z1ISCrO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースの中身はこんな感じになっています。ネジ穴が至るところに空いています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_04.8Ayr1K_A_nP6Ao.webp&quot; srcset=&quot;/_astro/37_04.8Ayr1K_A_1zVUOF.webp 640w, /_astro/37_04.8Ayr1K_A_2kVYga.webp 750w, /_astro/37_04.8Ayr1K_A_1HnYRl.webp 828w, /_astro/37_04.8Ayr1K_A_QpJpl.webp 1080w, /_astro/37_04.8Ayr1K_A_2tWLKz.webp 1280w, /_astro/37_04.8Ayr1K_A_Z2icjdk.webp 1668w, /_astro/37_04.8Ayr1K_A_nP6Ao.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは、先程組み立てたマザボをPCケースに固定していきます。はんだが痛い。&lt;/p&gt;&lt;p&gt;ちなみに、マザボを緩衝材から外すためにニッパーを使いました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_05.D_jbizgL_Z1cN3IF.webp&quot; srcset=&quot;/_astro/37_05.D_jbizgL_Z1pjfw6.webp 640w, /_astro/37_05.D_jbizgL_ZEjc5B.webp 750w, /_astro/37_05.D_jbizgL_Z1hRbtq.webp 828w, /_astro/37_05.D_jbizgL_ZJdpTI.webp 1080w, /_astro/37_05.D_jbizgL_SjBqv.webp 1280w, /_astro/37_05.D_jbizgL_1blEgx.webp 1668w, /_astro/37_05.D_jbizgL_Z1cN3IF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボのネジ穴と、ケースのネジ穴の位置を合わせておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_06.DBD1Zivj_1adBiD.webp&quot; srcset=&quot;/_astro/37_06.DBD1Zivj_Z1YEr8W.webp 640w, /_astro/37_06.DBD1Zivj_Z1eEnHs.webp 750w, /_astro/37_06.DBD1Zivj_Z1Rdn6h.webp 828w, /_astro/37_06.DBD1Zivj_1CNf7A.webp 1080w, /_astro/37_06.DBD1Zivj_Z1NPQl7.webp 1280w, /_astro/37_06.DBD1Zivj_Z1vNNv5.webp 1668w, /_astro/37_06.DBD1Zivj_1adBiD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボに同梱されていたネジを仕分けます。形状が違うものが4、5種類ぐらい同じ袋に入っていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_07.eox9yByh_1hRvjR.webp&quot; srcset=&quot;/_astro/37_07.eox9yByh_1BIekC.webp 640w, /_astro/37_07.eox9yByh_2mIhL7.webp 750w, /_astro/37_07.eox9yByh_1Jaini.webp 828w, /_astro/37_07.eox9yByh_1Ks98O.webp 1080w, /_astro/37_07.eox9yByh_Z1GbWjS.webp 1280w, /_astro/37_07.eox9yByh_Z1o9TtQ.webp 1668w, /_astro/37_07.eox9yByh_1hRvjR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボとPCケースをネジで留めていきます。留める位置は10箇所あるかないかぐらいあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_08.DaVG7iVR_Z4YWay.webp&quot; srcset=&quot;/_astro/37_08.DaVG7iVR_1f0oE2.webp 640w, /_astro/37_08.DaVG7iVR_200s5w.webp 750w, /_astro/37_08.DaVG7iVR_1mrsGH.webp 828w, /_astro/37_08.DaVG7iVR_nzFDo.webp 1080w, /_astro/37_08.DaVG7iVR_217HYC.webp 1280w, /_astro/37_08.DaVG7iVR_2j9KOE.webp 1668w, /_astro/37_08.DaVG7iVR_Z4YWay.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボとPCケースを留める際のドライバーは、先程のドライバーのように持ち手が90度に曲がっているとスペース的に回せないので、持ち手が短いものが有用です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/37_09.BcxF73dR_Z1rheAz.webp&quot; srcset=&quot;/_astro/37_09.BcxF73dR_12j848.webp 640w, /_astro/37_09.BcxF73dR_1MjbuC.webp 750w, /_astro/37_09.BcxF73dR_19Kc6N.webp 828w, /_astro/37_09.BcxF73dR_ZXGALC.webp 1080w, /_astro/37_09.BcxF73dR_DPqyB.webp 1280w, /_astro/37_09.BcxF73dR_VRtoD.webp 1668w, /_astro/37_09.BcxF73dR_Z1rheAz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8. CPUクーラーのLED用のプラグをマザボに挿す。&lt;a href=&quot;#8-cpuクーラーのled用のプラグをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CPUクーラーのLED用のプラグをマザボに挿します。さっき挿し忘れてた・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38_01.BK0eMU63_13L9QN.webp&quot; srcset=&quot;/_astro/38_01.BK0eMU63_Z1YR8lC.webp 640w, /_astro/38_01.BK0eMU63_Z1eR4U8.webp 750w, /_astro/38_01.BK0eMU63_Z1Rq4iW.webp 828w, /_astro/38_01.BK0eMU63_1wlMFK.webp 1080w, /_astro/38_01.BK0eMU63_Z1UiiLW.webp 1280w, /_astro/38_01.BK0eMU63_Z1CgfVU.webp 1668w, /_astro/38_01.BK0eMU63_13L9QN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボ右下にある「USB2.0ヘッダー」のプラグに挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38_02.CdhhcoAB_ZDRdJn.webp&quot; srcset=&quot;/_astro/38_02.CdhhcoAB_Z23f3cY.webp 640w, /_astro/38_02.CdhhcoAB_Z1ieYLu.webp 750w, /_astro/38_02.CdhhcoAB_Z1UMYaj.webp 828w, /_astro/38_02.CdhhcoAB_ZbhzUq.webp 1080w, /_astro/38_02.CdhhcoAB_1rfrpN.webp 1280w, /_astro/38_02.CdhhcoAB_1JhufP.webp 1668w, /_astro/38_02.CdhhcoAB_ZDRdJn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;挿しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/38_03.DtAxo4vV_Z1OhGoy.webp&quot; srcset=&quot;/_astro/38_03.DtAxo4vV_11yQqa.webp 640w, /_astro/38_03.DtAxo4vV_1LyTQE.webp 750w, /_astro/38_03.DtAxo4vV_190UsP.webp 828w, /_astro/38_03.DtAxo4vV_Z1lH3zB.webp 1080w, /_astro/38_03.DtAxo4vV_gOXKC.webp 1280w, /_astro/38_03.DtAxo4vV_yR1AE.webp 1668w, /_astro/38_03.DtAxo4vV_Z1OhGoy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9. PCケースとマザボを接続する。&lt;a href=&quot;#9-pcケースとマザボを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;9-1. 電源用プラグを接続する。&lt;a href=&quot;#9-1-電源用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、マザボとPCケースを接続します。&lt;/p&gt;&lt;p&gt;PCケースの先程とは逆側で作業をします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_01.CA4RrCww_ZbkSLc.webp&quot; srcset=&quot;/_astro/39_01.CA4RrCww_zLlEh.webp 640w, /_astro/39_01.CA4RrCww_1kLp5L.webp 750w, /_astro/39_01.CA4RrCww_HdpGW.webp 828w, /_astro/39_01.CA4RrCww_heJ2K.webp 1080w, /_astro/39_01.CA4RrCww_1TLLnY.webp 1280w, /_astro/39_01.CA4RrCww_2cNOe1.webp 1668w, /_astro/39_01.CA4RrCww_ZbkSLc.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちら側のカバーも、ケースの上端の固めのピンで留まっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_02.DpmJD0tr_QNUrh.webp&quot; srcset=&quot;/_astro/39_02.DpmJD0tr_Zwc8dQ.webp 640w, /_astro/39_02.DpmJD0tr_dMUcD.webp 750w, /_astro/39_02.DpmJD0tr_ZoK4bb.webp 828w, /_astro/39_02.DpmJD0tr_1koyge.webp 1080w, /_astro/39_02.DpmJD0tr_Z27fxct.webp 1280w, /_astro/39_02.DpmJD0tr_Z1Odumr.webp 1668w, /_astro/39_02.DpmJD0tr_QNUrh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースを外すとマザボの裏側が見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_03.DJFwPWkY_1GHHk4.webp&quot; srcset=&quot;/_astro/39_03.DJFwPWkY_ttmyV.webp 640w, /_astro/39_03.DJFwPWkY_1etq0q.webp 750w, /_astro/39_03.DJFwPWkY_AUqBB.webp 828w, /_astro/39_03.DJFwPWkY_2ail91.webp 1080w, /_astro/39_03.DJFwPWkY_Z1hlKjG.webp 1280w, /_astro/39_03.DJFwPWkY_ZYjHtE.webp 1668w, /_astro/39_03.DJFwPWkY_1GHHk4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースに接続されている色々なプラグを出しておきます。&lt;/p&gt;&lt;p&gt;これからマザボに取り付けるケースのケーブルや、ケースファンとの配線の兼ね合いも把握しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_04.BtMll0hY_bKVYA.webp&quot; srcset=&quot;/_astro/39_04.BtMll0hY_gv357.webp 640w, /_astro/39_04.BtMll0hY_11v6vB.webp 750w, /_astro/39_04.BtMll0hY_nW77M.webp 828w, /_astro/39_04.BtMll0hY_ElzNx.webp 1080w, /_astro/39_04.BtMll0hY_2hSC9L.webp 1280w, /_astro/39_04.BtMll0hY_Z2ugsO8.webp 1668w, /_astro/39_04.BtMll0hY_bKVYA.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボと電源ユニットを接続する場所なども把握しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_05.DROrxrzT_28Fbvr.webp&quot; srcset=&quot;/_astro/39_05.DROrxrzT_Z18Huu0.webp 640w, /_astro/39_05.DROrxrzT_ZnHr3v.webp 750w, /_astro/39_05.DROrxrzT_Z11gqrk.webp 828w, /_astro/39_05.DROrxrzT_Z2sVjtx.webp 1080w, /_astro/39_05.DROrxrzT_ZPoh8j.webp 1280w, /_astro/39_05.DROrxrzT_Zxmeih.webp 1668w, /_astro/39_05.DROrxrzT_28Fbvr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、PCケースとマザボを電源的に接続します。こんな感じの端子で接続します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_06.Cym3Fm4q_1svnov.webp&quot; srcset=&quot;/_astro/39_06.Cym3Fm4q_ZP1Hj8.webp 640w, /_astro/39_06.Cym3Fm4q_Z51DRD.webp 750w, /_astro/39_06.Cym3Fm4q_ZHzDgs.webp 828w, /_astro/39_06.Cym3Fm4q_1V61ds.webp 1080w, /_astro/39_06.Cym3Fm4q_Z1vy5ff.webp 1280w, /_astro/39_06.Cym3Fm4q_Z1dw2pd.webp 1668w, /_astro/39_06.Cym3Fm4q_1svnov.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースのあちら側から接続用のケーブルを通します。&lt;/p&gt;&lt;p&gt;下記の画像の左側に見える、マザボ右下のシステムパネルヘッダー用の端子に挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_07.ClGN-rtk_2crX1U.webp&quot; srcset=&quot;/_astro/39_07.ClGN-rtk_Z2rDby0.webp 640w, /_astro/39_07.ClGN-rtk_Z1GD87v.webp 750w, /_astro/39_07.ClGN-rtk_Z2kc7vk.webp 828w, /_astro/39_07.ClGN-rtk_Z2p9wX4.webp 1080w, /_astro/39_07.ClGN-rtk_ZLBuBP.webp 1280w, /_astro/39_07.ClGN-rtk_ZtzrLN.webp 1668w, /_astro/39_07.ClGN-rtk_2crX1U.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Power SW&lt;/code&gt;と&lt;code&gt;RESET SW&lt;/code&gt;の向きに気を付けて挿します。マザボの端子が9ピンなのでなんとか間違いなく挿せるかと。&lt;/p&gt;&lt;p&gt;おそらくこの挿す向きが逆になると、電源ボタンで再起動したり、その逆も起こり得るんでしょうかねえ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_08.CibClpE7_tX0ub.webp&quot; srcset=&quot;/_astro/39_08.CibClpE7_V7pXL.webp 640w, /_astro/39_08.CibClpE7_1G7tpg.webp 750w, /_astro/39_08.CibClpE7_13yu1r.webp 828w, /_astro/39_08.CibClpE7_WxDj8.webp 1080w, /_astro/39_08.CibClpE7_Z2u6s9z.webp 1280w, /_astro/39_08.CibClpE7_Z2c4pjx.webp 1668w, /_astro/39_08.CibClpE7_tX0ub.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9-2. オーディオ用プラグを接続する。&lt;a href=&quot;#9-2-オーディオ用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次は、PCケースに付いているオーディオ用のケーブルを、マザボに挿していきます。&lt;/p&gt;&lt;p&gt;マザボの左下にあるフロントパネルオーディオヘッダーに挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_09.CDV86-Lk_Z1EFY5N.webp&quot; srcset=&quot;/_astro/39_09.CDV86-Lk_ZLbxTS.webp 640w, /_astro/39_09.CDV86-Lk_Z1buto.webp 750w, /_astro/39_09.CDV86-Lk_ZDJtRd.webp 828w, /_astro/39_09.CDV86-Lk_Z1c6lgQ.webp 1080w, /_astro/39_09.CDV86-Lk_qqG4n.webp 1280w, /_astro/39_09.CDV86-Lk_IsITp.webp 1668w, /_astro/39_09.CDV86-Lk_Z1EFY5N.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;挿し込むとこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_10.CgV2vQ7X_2e75lQ.webp&quot; srcset=&quot;/_astro/39_10.CgV2vQ7X_Z9ur0X.webp 640w, /_astro/39_10.CgV2vQ7X_AuBpw.webp 750w, /_astro/39_10.CgV2vQ7X_Z23mXi.webp 828w, /_astro/39_10.CgV2vQ7X_Z2nupD8.webp 1080w, /_astro/39_10.CgV2vQ7X_ZJWnhT.webp 1280w, /_astro/39_10.CgV2vQ7X_ZrUkrR.webp 1668w, /_astro/39_10.CgV2vQ7X_2e75lQ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9-3. USB-C用プラグを接続する。&lt;a href=&quot;#9-3-usb-c用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、PCケースに付いているUSB Type-Cプラグを使うために、マザボ上の「フロントパネルタイプ C USB 3.2 Gen1 ヘッダー」プラグに、PCケースのプラグを挿し込みます。&lt;/p&gt;&lt;p&gt;マザボのこの周辺で挿し込んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_11.DSb__7J9_Z1YWeuK.webp&quot; srcset=&quot;/_astro/39_11.DSb__7J9_Z2pTlvt.webp 640w, /_astro/39_11.DSb__7J9_Z1ETi4Y.webp 750w, /_astro/39_11.DSb__7J9_Z2ishsN.webp 828w, /_astro/39_11.DSb__7J9_Z1wmAFN.webp 1080w, /_astro/39_11.DSb__7J9_6aqEq.webp 1280w, /_astro/39_11.DSb__7J9_octus.webp 1668w, /_astro/39_11.DSb__7J9_Z1YWeuK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCケース側のプラグはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_12.B079xLSh_Z16q3ei.webp&quot; srcset=&quot;/_astro/39_12.B079xLSh_Zq4lF8.webp 640w, /_astro/39_12.B079xLSh_jUGKm.webp 750w, /_astro/39_12.B079xLSh_ZiChCs.webp 828w, /_astro/39_12.B079xLSh_ZCPppl.webp 1080w, /_astro/39_12.B079xLSh_YGBUS.webp 1280w, /_astro/39_12.B079xLSh_1hIEKU.webp 1668w, /_astro/39_12.B079xLSh_Z16q3ei.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボに挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_13.xqpPadwW_wH8Yv.webp&quot; srcset=&quot;/_astro/39_13.xqpPadwW_Z11QRT0.webp 640w, /_astro/39_13.xqpPadwW_ZgQOsv.webp 750w, /_astro/39_13.xqpPadwW_ZTpNQk.webp 828w, /_astro/39_13.xqpPadwW_10hLNs.webp 1080w, /_astro/39_13.xqpPadwW_Z2rmjEf.webp 1280w, /_astro/39_13.xqpPadwW_Z29kgOd.webp 1668w, /_astro/39_13.xqpPadwW_wH8Yv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9-4. USB-A用プラグを接続する。&lt;a href=&quot;#9-4-usb-a用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、PCケースに付いているUSB Type-Aプラグを使うために、マザボ上の「USB 3.2 Gen1 ヘッダー」プラグに、PCケースのプラグを挿し込みます。&lt;/p&gt;&lt;p&gt;PCケース側のプラグはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_14.DockM9az_jXbk.webp&quot; srcset=&quot;/_astro/39_14.DockM9az_ZxSpPK.webp 640w, /_astro/39_14.DockM9az_c6CzJ.webp 750w, /_astro/39_14.DockM9az_ZqrlN5.webp 828w, /_astro/39_14.DockM9az_sTB0h.webp 1080w, /_astro/39_14.DockM9az_26rDlv.webp 1280w, /_astro/39_14.DockM9az_2otGbx.webp 1668w, /_astro/39_14.DockM9az_jXbk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボに挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_15.CAtdJboj_2lPQIv.webp&quot; srcset=&quot;/_astro/39_15.CAtdJboj_Z1ihWWJ.webp 640w, /_astro/39_15.CAtdJboj_ZxhTwf.webp 750w, /_astro/39_15.CAtdJboj_Z1aPSU4.webp 828w, /_astro/39_15.CAtdJboj_Z2fKDgt.webp 1080w, /_astro/39_15.CAtdJboj_ZCdAUf.webp 1280w, /_astro/39_15.CAtdJboj_Zkby5d.webp 1668w, /_astro/39_15.CAtdJboj_2lPQIv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9-5. アドレサブルLED用プラグを接続する。&lt;a href=&quot;#9-5-アドレサブルled用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここからは実用途には使わないプラグを一応挿していきます。&lt;/p&gt;&lt;p&gt;マザボ上の下の方にある「アドレサブルLEDヘッダー」プラグに、PCケースのプラグを挿し込みます。&lt;/p&gt;&lt;p&gt;PCケース側のプラグはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_16.BsY3XwKD_ZhKeqX.webp&quot; srcset=&quot;/_astro/39_16.BsY3XwKD_Tzvot.webp 640w, /_astro/39_16.BsY3XwKD_1EzyOX.webp 750w, /_astro/39_16.BsY3XwKD_121zr9.webp 828w, /_astro/39_16.BsY3XwKD_aOomY.webp 1080w, /_astro/39_16.BsY3XwKD_1NmqId.webp 1280w, /_astro/39_16.BsY3XwKD_26otyf.webp 1668w, /_astro/39_16.BsY3XwKD_ZhKeqX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボの下の方に挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_17.CE0neoGV_Z2sxLEj.webp&quot; srcset=&quot;/_astro/39_17.CE0neoGV_29lkMJ.webp 640w, /_astro/39_17.CE0neoGV_Z2aPJzH.webp 750w, /_astro/39_17.CE0neoGV_2gMoPp.webp 828w, /_astro/39_17.CE0neoGV_Z1YX8Pm.webp 1080w, /_astro/39_17.CE0neoGV_Zmq6u8.webp 1280w, /_astro/39_17.CE0neoGV_Z4o3E6.webp 1668w, /_astro/39_17.CE0neoGV_Z2sxLEj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9-6. アドレサブルLED用プラグを接続する。&lt;a href=&quot;#9-6-アドレサブルled用プラグを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、PCケースのファンコントローラー用のプラグを、マザボ上の下の方にある「シャーシ / ウォーターポンプファンコネクタ」プラグに挿し込みます。&lt;/p&gt;&lt;p&gt;PCケース側のプラグはこんな感じです。先程の画像に映っていましたね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_16.BsY3XwKD_ZhKeqX.webp&quot; srcset=&quot;/_astro/39_16.BsY3XwKD_Tzvot.webp 640w, /_astro/39_16.BsY3XwKD_1EzyOX.webp 750w, /_astro/39_16.BsY3XwKD_121zr9.webp 828w, /_astro/39_16.BsY3XwKD_aOomY.webp 1080w, /_astro/39_16.BsY3XwKD_1NmqId.webp 1280w, /_astro/39_16.BsY3XwKD_26otyf.webp 1668w, /_astro/39_16.BsY3XwKD_ZhKeqX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボに挿し込みます。先程挿し込んだ「アドレサブルLEDヘッダー」プラグの右隣でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/39_19.DFoiOFWU_ZKTzO1.webp&quot; srcset=&quot;/_astro/39_19.DFoiOFWU_Z23sT5g.webp 640w, /_astro/39_19.DFoiOFWU_Z1isPDL.webp 750w, /_astro/39_19.DFoiOFWU_Z1V1P2A.webp 828w, /_astro/39_19.DFoiOFWU_ZijW04.webp 1080w, /_astro/39_19.DFoiOFWU_1kd5la.webp 1280w, /_astro/39_19.DFoiOFWU_1Cf8bc.webp 1668w, /_astro/39_19.DFoiOFWU_ZKTzO1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10. PCケースにケースファンを付ける。&lt;a href=&quot;#10-pcケースにケースファンを付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、マザボからは離れて、もう少しPCケースに対して作業をしていきます。次はケースファンを取り付けていきます。この作業が体力的に一番疲れました・・・。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;10-1. ケースファンをネジで付ける。&lt;a href=&quot;#10-1-ケースファンをネジで付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回取り付けるケースファンは「DEEP COOL FK120 R-FK120-BKNPF1-G-1」です。排気用に2基付けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_01.6KDfq9Fk_M9L19.webp&quot; srcset=&quot;/_astro/41_01.6KDfq9Fk_1qIooj.webp 640w, /_astro/41_01.6KDfq9Fk_2bIrON.webp 750w, /_astro/41_01.6KDfq9Fk_1yasqY.webp 828w, /_astro/41_01.6KDfq9Fk_1fJoP6.webp 1080w, /_astro/41_01.6KDfq9Fk_Z2bTGCB.webp 1280w, /_astro/41_01.6KDfq9Fk_Z1SRDMz.webp 1668w, /_astro/41_01.6KDfq9Fk_M9L19.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCケースの上面のカバーを外します。これも固めのピンで留まっていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_01_02.C1eyqZMm_1upilB.webp&quot; srcset=&quot;/_astro/41_01_02.C1eyqZMm_RmF6W.webp 640w, /_astro/41_01_02.C1eyqZMm_Z1v0XT3.webp 750w, /_astro/41_01_02.C1eyqZMm_2khRx2.webp 828w, /_astro/41_01_02.C1eyqZMm_Z1bgLL4.webp 1080w, /_astro/41_01_02.C1eyqZMm_petKb.webp 1280w, /_astro/41_01_02.C1eyqZMm_Zu1qAB.webp 1668w, /_astro/41_01_02.C1eyqZMm_1upilB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;排気用なので、この向きで上側に取り付けます。ネジ孔を合わせます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_02.Bp1ycsdj_Z15YLzz.webp&quot; srcset=&quot;/_astro/41_02.Bp1ycsdj_130168.webp 640w, /_astro/41_02.Bp1ycsdj_1N04wC.webp 750w, /_astro/41_02.Bp1ycsdj_1ar58N.webp 828w, /_astro/41_02.Bp1ycsdj_ZCp8KC.webp 1080w, /_astro/41_02.Bp1ycsdj_107SzB.webp 1280w, /_astro/41_02.Bp1ycsdj_1i9VpD.webp 1668w, /_astro/41_02.Bp1ycsdj_Z15YLzz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このネジが、ケースファンのネジ孔に対してデカい・・・。この締める作業を4ヶ所 × 2回＝8回・・・。スンゴイ腕が疲れました・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_03.BbHpuGk9_1lPaIB.webp&quot; srcset=&quot;/_astro/41_03.BbHpuGk9_Z1afCnF.webp 640w, /_astro/41_03.BbHpuGk9_ZpfyWb.webp 750w, /_astro/41_03.BbHpuGk9_Z12Nyl0.webp 828w, /_astro/41_03.BbHpuGk9_1OpNxy.webp 1080w, /_astro/41_03.BbHpuGk9_Z1CehU9.webp 1280w, /_astro/41_03.BbHpuGk9_Z1kcf57.webp 1668w, /_astro/41_03.BbHpuGk9_1lPaIB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_04.DdCkxwJB_Z18le9t.webp&quot; srcset=&quot;/_astro/41_04.DdCkxwJB_Z1zaRwz.webp 640w, /_astro/41_04.DdCkxwJB_ZOaO65.webp 750w, /_astro/41_04.DdCkxwJB_Z1rINtT.webp 828w, /_astro/41_04.DdCkxwJB_ZEKAkw.webp 1080w, /_astro/41_04.DdCkxwJB_WLr0H.webp 1280w, /_astro/41_04.DdCkxwJB_1fNtPJ.webp 1668w, /_astro/41_04.DdCkxwJB_Z18le9t.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;付きました・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_05.DK1zKH_O_Z21anqz.webp&quot; srcset=&quot;/_astro/41_05.DK1zKH_O_ZhQDJO.webp 640w, /_astro/41_05.DK1zKH_O_s8oFF.webp 750w, /_astro/41_05.DK1zKH_O_ZapzH9.webp 828w, /_astro/41_05.DK1zKH_O_Z1xzJBC.webp 1080w, /_astro/41_05.DK1zKH_O_4WhIB.webp 1280w, /_astro/41_05.DK1zKH_O_mYkyD.webp 1668w, /_astro/41_05.DK1zKH_O_Z21anqz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10-2. ケースファンのプラグを付ける。&lt;a href=&quot;#10-2-ケースファンのプラグを付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、ケースファンに付いているプラグを挿し込んでいきます。&lt;/p&gt;&lt;p&gt;まずはファンコントローラーに挿し込みます。3ピン端子でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_06.CDHx_fRh_1Oavde.webp&quot; srcset=&quot;/_astro/41_06.CDHx_fRh_18JB5J.webp 640w, /_astro/41_06.CDHx_fRh_1SJEwe.webp 750w, /_astro/41_06.CDHx_fRh_1gbF8p.webp 828w, /_astro/41_06.CDHx_fRh_2hK92b.webp 1080w, /_astro/41_06.CDHx_fRh_Z19SWqw.webp 1280w, /_astro/41_06.CDHx_fRh_ZQQTAu.webp 1668w, /_astro/41_06.CDHx_fRh_1Oavde.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケースファンに付いているプラグは2又だったので、もう片方のプラグをマザボに挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_07.DkcwPGY4_2nDxQs.webp&quot; srcset=&quot;/_astro/41_07.DkcwPGY4_ZDcQwm.webp 640w, /_astro/41_07.DkcwPGY4_6MbT8.webp 750w, /_astro/41_07.DkcwPGY4_ZvKMtG.webp 828w, /_astro/41_07.DkcwPGY4_Z2dWW8w.webp 1080w, /_astro/41_07.DkcwPGY4_ZApTMi.webp 1280w, /_astro/41_07.DkcwPGY4_ZinQWg.webp 1668w, /_astro/41_07.DkcwPGY4_2nDxQs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボで対応しているプラグの位置が下の方にありケーブルの長さを伸ばす必要があり、CPUクーラーに入っていた合流ケーブルを使いました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_08.COgqKDEB_1hqL79.webp&quot; srcset=&quot;/_astro/41_08.COgqKDEB_2qJkcw.webp 640w, /_astro/41_08.COgqKDEB_Z1SrKaU.webp 750w, /_astro/41_08.COgqKDEB_Z2w0JyJ.webp 828w, /_astro/41_08.COgqKDEB_1K1oV6.webp 1080w, /_astro/41_08.COgqKDEB_Z1GCGwB.webp 1280w, /_astro/41_08.COgqKDEB_Z1oADGz.webp 1668w, /_astro/41_08.COgqKDEB_1hqL79.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;合流させたケースファンのケーブルを、マザボの裏側を通して、下側からケースの孔を通して持ってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_09.DW66y4L6_1OTHNQ.webp&quot; srcset=&quot;/_astro/41_09.DW66y4L6_18L42Y.webp 640w, /_astro/41_09.DW66y4L6_1SL7tt.webp 750w, /_astro/41_09.DW66y4L6_1gd85E.webp 828w, /_astro/41_09.DW66y4L6_2iulCN.webp 1080w, /_astro/41_09.DW66y4L6_Z199JOT.webp 1280w, /_astro/41_09.DW66y4L6_ZQ7GYR.webp 1668w, /_astro/41_09.DW66y4L6_1OTHNQ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボの下の方にある「シャーシ / ウォーターポンプファンコネクタ」プラグに挿し込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_10.ngaOMPaC_ZCipQD.webp&quot; srcset=&quot;/_astro/41_10.ngaOMPaC_Z149Bji.webp 640w, /_astro/41_10.ngaOMPaC_Zj9xRN.webp 750w, /_astro/41_10.ngaOMPaC_ZVHxgC.webp 828w, /_astro/41_10.ngaOMPaC_Z9HM2G.webp 1080w, /_astro/41_10.ngaOMPaC_1sOfix.webp 1280w, /_astro/41_10.ngaOMPaC_1KQi8z.webp 1668w, /_astro/41_10.ngaOMPaC_ZCipQD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;挿し込みました。ケースファンのプラグ端子は「4-PIN/CPU_FAN/CPU_OPT」対応でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/41_11.CHHR7Cck_R0Mds.webp&quot; srcset=&quot;/_astro/41_11.CHHR7Cck_Z20fgWj.webp 640w, /_astro/41_11.CHHR7Cck_Z1ffdvO.webp 750w, /_astro/41_11.CHHR7Cck_Z1RNcTD.webp 828w, /_astro/41_11.CHHR7Cck_1kAq2p.webp 1080w, /_astro/41_11.CHHR7Cck_Z273Fqi.webp 1280w, /_astro/41_11.CHHR7Cck_Z1O1CAg.webp 1668w, /_astro/41_11.CHHR7Cck_R0Mds.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;11. 電源ユニットにケーブルを接続する。&lt;a href=&quot;#11-電源ユニットにケーブルを接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;11-1. 必要なケーブルを把握する。&lt;a href=&quot;#11-1-必要なケーブルを把握する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは次は電源ユニットを取り付けていきます。重いやつです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_01.BlvevYJl_ZTmkDC.webp&quot; srcset=&quot;/_astro/43_01.BlvevYJl_ZfFe4U.webp 640w, /_astro/43_01.BlvevYJl_ujOlz.webp 750w, /_astro/43_01.BlvevYJl_Z8ea2f.webp 828w, /_astro/43_01.BlvevYJl_ZqLGOF.webp 1080w, /_astro/43_01.BlvevYJl_1bKkvy.webp 1280w, /_astro/43_01.BlvevYJl_1tMnlA.webp 1668w, /_astro/43_01.BlvevYJl_ZTmkDC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ケーブルが色々と詰め込まれています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_02.DdN309j2_P9Sm9.webp&quot; srcset=&quot;/_astro/43_02.DdN309j2_BMleX.webp 640w, /_astro/43_02.DdN309j2_1mMoFs.webp 750w, /_astro/43_02.DdN309j2_JephD.webp 828w, /_astro/43_02.DdN309j2_1iJwb6.webp 1080w, /_astro/43_02.DdN309j2_Z28TzhB.webp 1280w, /_astro/43_02.DdN309j2_Z1PRwrz.webp 1668w, /_astro/43_02.DdN309j2_P9Sm9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源ユニット本体です。テカってんなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_03.CEdKlNEq_jh99L.webp&quot; srcset=&quot;/_astro/43_03.CEdKlNEq_Zxh7LR.webp 640w, /_astro/43_03.CEdKlNEq_cHUDC.webp 750w, /_astro/43_03.CEdKlNEq_ZpP3Jc.webp 828w, /_astro/43_03.CEdKlNEq_LQLXI.webp 1080w, /_astro/43_03.CEdKlNEq_2poOjW.webp 1280w, /_astro/43_03.CEdKlNEq_Z2mKgDW.webp 1668w, /_astro/43_03.CEdKlNEq_jh99L.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まずは、電源ユニットに挿していくプラグを仕分けていきます。&lt;/p&gt;&lt;p&gt;使わないSATAケーブルが数本あったりするので。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_04.DeqxTaJ3_2hYd92.webp&quot; srcset=&quot;/_astro/43_04.DeqxTaJ3_Z1Wr8fa.webp 640w, /_astro/43_04.DeqxTaJ3_Z1cr4NF.webp 750w, /_astro/43_04.DeqxTaJ3_Z1P04cu.webp 828w, /_astro/43_04.DeqxTaJ3_Z2jChPW.webp 1080w, /_astro/43_04.DeqxTaJ3_ZG5fuI.webp 1280w, /_astro/43_04.DeqxTaJ3_Zo3cEG.webp 1668w, /_astro/43_04.DeqxTaJ3_2hYd92.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グラボに必要なプラグも確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_05.DFBA7Tu3_Z1hK9MH.webp&quot; srcset=&quot;/_astro/43_05.DFBA7Tu3_ZUrOhy.webp 640w, /_astro/43_05.DFBA7Tu3_ZarKQ4.webp 750w, /_astro/43_05.DFBA7Tu3_ZN0KeS.webp 828w, /_astro/43_05.DFBA7Tu3_ZOavXK.webp 1080w, /_astro/43_05.DFBA7Tu3_Nmvmt.webp 1280w, /_astro/43_05.DFBA7Tu3_16oycv.webp 1668w, /_astro/43_05.DFBA7Tu3_Z1hK9MH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グラボの説明書から、グラボに必要な電源プラグを把握します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_06.mm2JrplG_rqTbV.webp&quot; srcset=&quot;/_astro/43_06.mm2JrplG_162PD9.webp 640w, /_astro/43_06.mm2JrplG_1Q2T4D.webp 750w, /_astro/43_06.mm2JrplG_1dtTFO.webp 828w, /_astro/43_06.mm2JrplG_U1x0S.webp 1080w, /_astro/43_06.mm2JrplG_Z2wCyrO.webp 1280w, /_astro/43_06.mm2JrplG_Z2eAvBM.webp 1668w, /_astro/43_06.mm2JrplG_rqTbV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グラボ用に挿すプラグは8ピンコネクタです。この8ピンコネクタをGPUに同梱されている16ピンコネクタ変換ケーブルと挿してグラボに接続していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_07.BcELnD-9_Z24W2UG.webp&quot; srcset=&quot;/_astro/43_07.BcELnD-9_Z7XGJb.webp 640w, /_astro/43_07.BcELnD-9_C1lGj.webp 750w, /_astro/43_07.BcELnD-9_ZwCGv.webp 828w, /_astro/43_07.BcELnD-9_Z1Bmp6J.webp 1080w, /_astro/43_07.BcELnD-9_1aCeu.webp 1280w, /_astro/43_07.BcELnD-9_jcF4w.webp 1668w, /_astro/43_07.BcELnD-9_Z24W2UG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここで、8ピンコネクタが2又になっていたので、ケーブルの挿し方を調べました。&lt;/p&gt;&lt;p&gt;そしたら、どうやらGeForce 4000シリーズにおける電源ユニットとの接続の仕方は、以下の繋ぎ方でないと上手く動かせないみたいです。つまり、PCIeケーブルは3本共、電源ユニットに繋ぐ必要があるということです。
&lt;img loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;621&quot; src=&quot;/_astro/43_08.B7LdPk6b_Z2oaVTd.webp&quot; srcset=&quot;/_astro/43_08.B7LdPk6b_Z1XIXv4.webp 640w, /_astro/43_08.B7LdPk6b_Z1lsXvN.webp 750w, /_astro/43_08.B7LdPk6b_2cHp1z.webp 828w, /_astro/43_08.B7LdPk6b_Z2oaVTd.webp 1060w&quot; /&gt;&lt;/p&gt;&lt;p&gt;（画像引用元は&lt;a href=&quot;https://www.cfd.co.jp/biz/support/detail/124157923_1676.html&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11-2. グラボ用のPCIeケーブルを挿す。&lt;a href=&quot;#11-2-グラボ用のpcieケーブルを挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ケーブルの繋ぎ方を把握したので、電源ユニットにケーブルを挿していきます。下から挿していけば視界を確保し続けられそうです。&lt;/p&gt;&lt;p&gt;まずは、グラボに挿すためのPCIe用のケーブルを3箇所に挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_11.BfElPUFN_Z1wkovj.webp&quot; srcset=&quot;/_astro/43_11.BfElPUFN_2lcjQB.webp 640w, /_astro/43_11.BfElPUFN_Z1XYKvP.webp 750w, /_astro/43_11.BfElPUFN_2sDnTh.webp 828w, /_astro/43_11.BfElPUFN_Z13JKGm.webp 1080w, /_astro/43_11.BfElPUFN_yMgDR.webp 1280w, /_astro/43_11.BfElPUFN_QOjtT.webp 1668w, /_astro/43_11.BfElPUFN_Z1wkovj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_12.MrECVYHA_Z11DqqY.webp&quot; srcset=&quot;/_astro/43_12.MrECVYHA_ZfTxVD.webp 640w, /_astro/43_12.MrECVYHA_u5utQ.webp 750w, /_astro/43_12.MrECVYHA_Z8stSX.webp 828w, /_astro/43_12.MrECVYHA_Zy3MC2.webp 1080w, /_astro/43_12.MrECVYHA_14teIc.webp 1280w, /_astro/43_12.MrECVYHA_1mvhye.webp 1668w, /_astro/43_12.MrECVYHA_Z11DqqY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;3本共挿せました。電源ケーブルの角が痛いな・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_13.9vpl3Rew_23wERX.webp&quot; srcset=&quot;/_astro/43_13.9vpl3Rew_Z1CSM6y.webp 640w, /_astro/43_13.9vpl3Rew_ZRSIF4.webp 750w, /_astro/43_13.9vpl3Rew_Z1vrI3S.webp 828w, /_astro/43_13.9vpl3Rew_2w7iGU.webp 1080w, /_astro/43_13.9vpl3Rew_ZUwMKM.webp 1280w, /_astro/43_13.9vpl3Rew_ZCuJUK.webp 1668w, /_astro/43_13.9vpl3Rew_23wERX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11-3. ATX PWRケーブルを挿す。&lt;a href=&quot;#11-3-atx-pwrケーブルを挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ATX PWRケーブルを挿します。2ヶ所あります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_21.DvwATOR-_Z1SezVH.webp&quot; srcset=&quot;/_astro/43_21.DvwATOR-_2oJ1E.webp 640w, /_astro/43_21.DvwATOR-_MoMs9.webp 750w, /_astro/43_21.DvwATOR-_9PN4k.webp 828w, /_astro/43_21.DvwATOR-_Z1pDW7K.webp 1080w, /_astro/43_21.DvwATOR-_cS5dt.webp 1280w, /_astro/43_21.DvwATOR-_uU83v.webp 1668w, /_astro/43_21.DvwATOR-_Z1SezVH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源ケーブルの角で指先が痛くなってきたので、手袋を装着して挿入作業を続けていきます。&lt;/p&gt;&lt;p&gt;グラボやマザボを触るわけではないので毛糸の手袋でやってしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_22.CrhL-2RT_Z1de3pt.webp&quot; srcset=&quot;/_astro/43_22.CrhL-2RT_ZUiTY6.webp 640w, /_astro/43_22.CrhL-2RT_ZaiQxB.webp 750w, /_astro/43_22.CrhL-2RT_ZMQPVq.webp 828w, /_astro/43_22.CrhL-2RT_ZJDpAw.webp 1080w, /_astro/43_22.CrhL-2RT_RSBJH.webp 1280w, /_astro/43_22.CrhL-2RT_1aUEzJ.webp 1668w, /_astro/43_22.CrhL-2RT_Z1de3pt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2本共挿せました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_23.DG_RGjXr_18H85m.webp&quot; srcset=&quot;/_astro/43_23.DG_RGjXr_1VqXpl.webp 640w, /_astro/43_23.DG_RGjXr_Z2nK6X6.webp 750w, /_astro/43_23.DG_RGjXr_23S2s1.webp 828w, /_astro/43_23.DG_RGjXr_1BhKTj.webp 1080w, /_astro/43_23.DG_RGjXr_Z1Pmkyo.webp 1280w, /_astro/43_23.DG_RGjXr_Z1xkhIm.webp 1668w, /_astro/43_23.DG_RGjXr_18H85m.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11-4. ATX 12Vケーブルを挿す。&lt;a href=&quot;#11-4-atx-12vケーブルを挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ATX 12Vケーブルを挿します。これも2ヶ所あります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_31.BhxUcIcG_1vOTVu.webp&quot; srcset=&quot;/_astro/43_31.BhxUcIcG_2rcEad.webp 640w, /_astro/43_31.BhxUcIcG_Z1RYqde.webp 750w, /_astro/43_31.BhxUcIcG_Z2vxpB3.webp 828w, /_astro/43_31.BhxUcIcG_1YpxKr.webp 1080w, /_astro/43_31.BhxUcIcG_Z1sexHg.webp 1280w, /_astro/43_31.BhxUcIcG_Z1acuRe.webp 1668w, /_astro/43_31.BhxUcIcG_1vOTVu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2本共挿せました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_32.D6JvneD5_qo5jG.webp&quot; srcset=&quot;/_astro/43_32.D6JvneD5_Z124iAD.webp 640w, /_astro/43_32.D6JvneD5_Zh4fa9.webp 750w, /_astro/43_32.D6JvneD5_ZTCexX.webp 828w, /_astro/43_32.D6JvneD5_SXI8D.webp 1080w, /_astro/43_32.D6JvneD5_2wvKtR.webp 1280w, /_astro/43_32.D6JvneD5_Z2fDku2.webp 1668w, /_astro/43_32.D6JvneD5_qo5jG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11-5. SATAケーブルを挿す。&lt;a href=&quot;#11-5-sataケーブルを挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SATAケーブルを挿します。これは1ヶ所だけ挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_41.DTk5Ae65_8zqGC.webp&quot; srcset=&quot;/_astro/43_41.DTk5Ae65_ZRCWVT.webp 640w, /_astro/43_41.DTk5Ae65_Z7CTvp.webp 750w, /_astro/43_41.DTk5Ae65_ZKbSTe.webp 828w, /_astro/43_41.DTk5Ae65_Ba4vz.webp 1080w, /_astro/43_41.DTk5Ae65_2eH6QN.webp 1280w, /_astro/43_41.DTk5Ae65_2wJ9GP.webp 1668w, /_astro/43_41.DTk5Ae65_8zqGC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;挿せました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/43_42.6HB9ehgt_Z10zLOL.webp&quot; srcset=&quot;/_astro/43_42.6HB9ehgt_Z23VLAL.webp 640w, /_astro/43_42.6HB9ehgt_Z1iVIah.webp 750w, /_astro/43_42.6HB9ehgt_Z1VuHy6.webp 828w, /_astro/43_42.6HB9ehgt_Zx090O.webp 1080w, /_astro/43_42.6HB9ehgt_15wSkp.webp 1280w, /_astro/43_42.6HB9ehgt_1nyVar.webp 1668w, /_astro/43_42.6HB9ehgt_Z10zLOL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;12. 電源ユニットをPCケースと接続する。&lt;a href=&quot;#12-電源ユニットをpcケースと接続する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;12-1. 電源ユニット本体をPCケース内に置く。&lt;a href=&quot;#12-1-電源ユニット本体をpcケース内に置く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは色々なものを挿した電源ユニット本体をPCケースの中に設置していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_01.DjIVv-NX_Z8zboh.webp&quot; srcset=&quot;/_astro/44_01.DjIVv-NX_Z22esHM.webp 640w, /_astro/44_01.DjIVv-NX_Z1hephi.webp 750w, /_astro/44_01.DjIVv-NX_Z1TMoF7.webp 828w, /_astro/44_01.DjIVv-NX_k0rpF.webp 1080w, /_astro/44_01.DjIVv-NX_1WxtKT.webp 1280w, /_astro/44_01.DjIVv-NX_2fzwAV.webp 1668w, /_astro/44_01.DjIVv-NX_Z8zboh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCケースの中に同梱されていたネジを使います。このネジでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_02.n81cVWuu_Z2j1HL3.webp&quot; srcset=&quot;/_astro/44_02.n81cVWuu_1YDGho.webp 640w, /_astro/44_02.n81cVWuu_Z2kxo63.webp 750w, /_astro/44_02.n81cVWuu_275Kk4.webp 828w, /_astro/44_02.n81cVWuu_Z1Pr4W6.webp 1080w, /_astro/44_02.n81cVWuu_ZcT2AR.webp 1280w, /_astro/44_02.n81cVWuu_580ea.webp 1668w, /_astro/44_02.n81cVWuu_Z2j1HL3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源ユニットを抑えながらネジを回していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_03.mbdE15eV_2pIK6D.webp&quot; srcset=&quot;/_astro/44_03.mbdE15eV_Z27chiO.webp 640w, /_astro/44_03.mbdE15eV_Z1mcdRk.webp 750w, /_astro/44_03.mbdE15eV_Z1YKdg9.webp 828w, /_astro/44_03.mbdE15eV_Z2bRJSl.webp 1080w, /_astro/44_03.mbdE15eV_ZykHx7.webp 1280w, /_astro/44_03.mbdE15eV_ZgiEH5.webp 1668w, /_astro/44_03.mbdE15eV_2pIK6D.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;机の少し端の方に寄せてトルクを出します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_04.CR9AvsGU_ZivY2R.webp&quot; srcset=&quot;/_astro/44_04.CR9AvsGU_ZSvirS.webp 640w, /_astro/44_04.CR9AvsGU_Z8vf1o.webp 750w, /_astro/44_04.CR9AvsGU_ZL4epd.webp 828w, /_astro/44_04.CR9AvsGU_a3DL5.webp 1080w, /_astro/44_04.CR9AvsGU_1MAG7j.webp 1280w, /_astro/44_04.CR9AvsGU_25CIWl.webp 1668w, /_astro/44_04.CR9AvsGU_ZivY2R.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源ユニットをネジで留め終わりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_05.BJ8heze4_ZqwU5Y.webp&quot; srcset=&quot;/_astro/44_05.BJ8heze4_Z1RNpVk.webp 640w, /_astro/44_05.BJ8heze4_Z17NmuP.webp 750w, /_astro/44_05.BJ8heze4_Z1KmlSE.webp 828w, /_astro/44_05.BJ8heze4_22HHX.webp 1080w, /_astro/44_05.BJ8heze4_1EzK4c.webp 1280w, /_astro/44_05.BJ8heze4_1WBMTe.webp 1668w, /_astro/44_05.BJ8heze4_ZqwU5Y.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12-2. ATX 12Vケーブルをマザボに挿す。&lt;a href=&quot;#12-2-atx-12vケーブルをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程電源ユニットに挿したケーブルを各自の収まるべき場所に挿していきます。&lt;/p&gt;&lt;p&gt;まずは、ATX 12Vケーブルをマザボに挿していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_11.URUWJcF4_2qDHvj.webp&quot; srcset=&quot;/_astro/44_11.URUWJcF4_28YH87.webp 640w, /_astro/44_11.URUWJcF4_Z2bcnfk.webp 750w, /_astro/44_11.URUWJcF4_2gqLaM.webp 828w, /_astro/44_11.URUWJcF4_Z2aWMtF.webp 1080w, /_astro/44_11.URUWJcF4_ZxpK8r.webp 1280w, /_astro/44_11.URUWJcF4_ZfnHip.webp 1668w, /_astro/44_11.URUWJcF4_2qDHvj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCケースの孔を通じて、マザボの表側へと渡します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_12.Dq-LvYvT_29kWV0.webp&quot; srcset=&quot;/_astro/44_12.Dq-LvYvT_Z1MHJPm.webp 640w, /_astro/44_12.Dq-LvYvT_Z12HGoR.webp 750w, /_astro/44_12.Dq-LvYvT_Z1FgFMG.webp 828w, /_astro/44_12.Dq-LvYvT_Z2sgx3Y.webp 1080w, /_astro/44_12.Dq-LvYvT_ZOIuHK.webp 1280w, /_astro/44_12.Dq-LvYvT_ZwGrRI.webp 1668w, /_astro/44_12.Dq-LvYvT_29kWV0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボの表側にやって来ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_13.RqCFVY92_ZIbjyO.webp&quot; srcset=&quot;/_astro/44_13.RqCFVY92_oHkxa.webp 640w, /_astro/44_13.RqCFVY92_19HnXE.webp 750w, /_astro/44_13.RqCFVY92_w9ozP.webp 828w, /_astro/44_13.RqCFVY92_ZfAFJR.webp 1080w, /_astro/44_13.RqCFVY92_1mVlAm.webp 1280w, /_astro/44_13.RqCFVY92_1EXoqo.webp 1668w, /_astro/44_13.RqCFVY92_ZIbjyO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボの左上にある「8ピン12V電源コネクタ」に、ATX 12Vケーブルを挿します。2ヶ所あります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_14.B89yCtba_Z1qVEVi.webp&quot; srcset=&quot;/_astro/44_14.B89yCtba_Z2oNqiy.webp 640w, /_astro/44_14.B89yCtba_Z1DNmR4.webp 750w, /_astro/44_14.B89yCtba_Z2hmmfS.webp 828w, /_astro/44_14.B89yCtba_ZXm27l.webp 1080w, /_astro/44_14.B89yCtba_Eb0dS.webp 1280w, /_astro/44_14.B89yCtba_Wd33U.webp 1668w, /_astro/44_14.B89yCtba_Z1qVEVi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ATX 12Vケーブルが1本目。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_15.BBPV3DwU_Z2eNi5R.webp&quot; srcset=&quot;/_astro/44_15.BBPV3DwU_1Hi3k.webp 640w, /_astro/44_15.BBPV3DwU_LHltO.webp 750w, /_astro/44_15.BBPV3DwU_99m60.webp 828w, /_astro/44_15.BBPV3DwU_Z1LdEgU.webp 1080w, /_astro/44_15.BBPV3DwU_Z8FBUG.webp 1280w, /_astro/44_15.BBPV3DwU_9lpTl.webp 1668w, /_astro/44_15.BBPV3DwU_Z2eNi5R.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ATX 12Vケーブルが2本目。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_16.W7yoYBcD_p5Kef.webp&quot; srcset=&quot;/_astro/44_16.W7yoYBcD_1fXBQD.webp 640w, /_astro/44_16.W7yoYBcD_20XFi8.webp 750w, /_astro/44_16.W7yoYBcD_1npFTj.webp 828w, /_astro/44_16.W7yoYBcD_RFo3c.webp 1080w, /_astro/44_16.W7yoYBcD_2vdqoq.webp 1280w, /_astro/44_16.W7yoYBcD_Z2gVEzt.webp 1668w, /_astro/44_16.W7yoYBcD_p5Kef.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12-3. ATX PWRケーブルをマザボに挿す。&lt;a href=&quot;#12-3-atx-pwrケーブルをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、ATX PWRケーブルをマザボに挿していきます。&lt;/p&gt;&lt;p&gt;このケーブルは1本です。電源ユニット側では2ヶ所挿しましたが、ケーブルが合流しているので1本です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_21.a-gU0LOu_1UYo37.webp&quot; srcset=&quot;/_astro/44_21.a-gU0LOu_Z1X9pB0.webp 640w, /_astro/44_21.a-gU0LOu_Z1d9mav.webp 750w, /_astro/44_21.a-gU0LOu_Z1PHlyk.webp 828w, /_astro/44_21.a-gU0LOu_2oz1R4.webp 1080w, /_astro/44_21.a-gU0LOu_Z1354AD.webp 1280w, /_astro/44_21.a-gU0LOu_ZK31KB.webp 1668w, /_astro/44_21.a-gU0LOu_1UYo37.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ATX PWRケーブルをマザボの表側に持って来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_22.Dg1wlrXY_J4mPs.webp&quot; srcset=&quot;/_astro/44_22.Dg1wlrXY_16BwSc.webp 640w, /_astro/44_22.Dg1wlrXY_1QBAjG.webp 750w, /_astro/44_22.Dg1wlrXY_1e3AUR.webp 828w, /_astro/44_22.Dg1wlrXY_1cE0Ep.webp 1080w, /_astro/44_22.Dg1wlrXY_Z2f05Ni.webp 1280w, /_astro/44_22.Dg1wlrXY_Z1VX2Xg.webp 1668w, /_astro/44_22.Dg1wlrXY_J4mPs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボの右側にある「USB 3.2 Gen1 ヘッダー」に、ATX PWRケーブルを挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_23.BZ9vsp1S_Z126HoX.webp&quot; srcset=&quot;/_astro/44_23.BZ9vsp1S_1R9C4G.webp 640w, /_astro/44_23.BZ9vsp1S_Z2s2siK.webp 750w, /_astro/44_23.BZ9vsp1S_1YAG7m.webp 828w, /_astro/44_23.BZ9vsp1S_Zyw4A1.webp 1080w, /_astro/44_23.BZ9vsp1S_140WKd.webp 1280w, /_astro/44_23.BZ9vsp1S_1m30Af.webp 1668w, /_astro/44_23.BZ9vsp1S_Z126HoX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボ側は24ピン端子です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_24.CGyvVdbs_1i4krO.webp&quot; srcset=&quot;/_astro/44_24.CGyvVdbs_sFRjr.webp 640w, /_astro/44_24.CGyvVdbs_1dFUJV.webp 750w, /_astro/44_24.CGyvVdbs_A7Vm7.webp 828w, /_astro/44_24.CGyvVdbs_1KDXgL.webp 1080w, /_astro/44_24.CGyvVdbs_Z1G08bV.webp 1280w, /_astro/44_24.CGyvVdbs_Z1nX5lT.webp 1668w, /_astro/44_24.CGyvVdbs_1i4krO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;挿し終わりました。こんな感じです。&lt;/p&gt;&lt;p&gt;PCIeケーブルは、次のグラボの時に挿します・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/44_25.B3WLdtJS_Z1G37s9.webp&quot; srcset=&quot;/_astro/44_25.B3WLdtJS_1bPsfQ.webp 640w, /_astro/44_25.B3WLdtJS_1VPvGl.webp 750w, /_astro/44_25.B3WLdtJS_1jhwiw.webp 828w, /_astro/44_25.B3WLdtJS_Z1dstDc.webp 1080w, /_astro/44_25.B3WLdtJS_p4xH2.webp 1280w, /_astro/44_25.B3WLdtJS_H6Ax4.webp 1668w, /_astro/44_25.B3WLdtJS_Z1G37s9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;13. グラボをPCケース内に設置する。&lt;a href=&quot;#13-グラボをpcケース内に設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;13-1. マザボに固定用の治具を設置する。&lt;a href=&quot;#13-1-マザボに固定用の治具を設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;やっとここまで来ました。ゲーミングPCの華であるグラフィックボードを設置していきます。&lt;/p&gt;&lt;p&gt;今回のGPUは「NVIDIA GeForce RTX 4080 SUPER」です。少々デカいです。なので少し設置方法が従来のグラボとは違ってくる感じです。&lt;/p&gt;&lt;p&gt;まずは、先程マザボを固定したネジを2本外します。このネジ孔でグラボを固定していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_01.BRNFUCl-_Z1m4tku.webp&quot; srcset=&quot;/_astro/46_01.BRNFUCl-_Z6ylVM.webp 640w, /_astro/46_01.BRNFUCl-_DqGtH.webp 750w, /_astro/46_01.BRNFUCl-_RH5S.webp 828w, /_astro/46_01.BRNFUCl-_ZStPvx.webp 1080w, /_astro/46_01.BRNFUCl-_J3bOG.webp 1280w, /_astro/46_01.BRNFUCl-_125eEI.webp 1668w, /_astro/46_01.BRNFUCl-_Z1m4tku.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;4080 SUPERの設置の図解はこんな感じだとのことです。台を設置するのではなく、治具で固定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_02.Bo5t2gMr_Z1OIu3M.webp&quot; srcset=&quot;/_astro/46_02.Bo5t2gMr_QxAMP.webp 640w, /_astro/46_02.Bo5t2gMr_1BxEek.webp 750w, /_astro/46_02.Bo5t2gMr_XYEPv.webp 828w, /_astro/46_02.Bo5t2gMr_Z1m8QeP.webp 1080w, /_astro/46_02.Bo5t2gMr_gob6o.webp 1280w, /_astro/46_02.Bo5t2gMr_yqdVq.webp 1668w, /_astro/46_02.Bo5t2gMr_Z1OIu3M.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;4080 SUPERに同梱されていたスペーサーをネジ孔に設置します。このスペーサーはドライバーで回すことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_03.Ji6Hd9mX_1nphHN.webp&quot; srcset=&quot;/_astro/46_03.Ji6Hd9mX_1VTTMe.webp 640w, /_astro/46_03.Ji6Hd9mX_Z2nhaAd.webp 750w, /_astro/46_03.Ji6Hd9mX_24lXOT.webp 828w, /_astro/46_03.Ji6Hd9mX_1PYUwK.webp 1080w, /_astro/46_03.Ji6Hd9mX_Z1AEaUW.webp 1280w, /_astro/46_03.Ji6Hd9mX_Z1iC85U.webp 1668w, /_astro/46_03.Ji6Hd9mX_1nphHN.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スペーサーの上に固定用の治具を置きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_04.BOK4fiPa_ZLGz8W.webp&quot; srcset=&quot;/_astro/46_04.BOK4fiPa_Z1esu1M.webp 640w, /_astro/46_04.BOK4fiPa_ZtsqAi.webp 750w, /_astro/46_04.BOK4fiPa_Z171pY7.webp 828w, /_astro/46_04.BOK4fiPa_Zj6Vk0.webp 1080w, /_astro/46_04.BOK4fiPa_1jq61e.webp 1280w, /_astro/46_04.BOK4fiPa_1Bs8Qg.webp 1668w, /_astro/46_04.BOK4fiPa_ZLGz8W.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その固定用の治具を同じく同梱されていたネジで固定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_05.BQMhkPUB_ZSvVhu.webp&quot; srcset=&quot;/_astro/46_05.BQMhkPUB_Z2nIEAW.webp 640w, /_astro/46_05.BQMhkPUB_Z1CIBas.webp 750w, /_astro/46_05.BQMhkPUB_Z2ghAyh.webp 828w, /_astro/46_05.BQMhkPUB_ZpVisx.webp 1080w, /_astro/46_05.BQMhkPUB_1cAIRG.webp 1280w, /_astro/46_05.BQMhkPUB_1uCLHI.webp 1668w, /_astro/46_05.BQMhkPUB_ZSvVhu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13-2. グラボをPCケース内で固定する。&lt;a href=&quot;#13-2-グラボをpcケース内で固定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではいよいよ・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_11.JI0SFrWp_e1zYp.webp&quot; srcset=&quot;/_astro/46_11.JI0SFrWp_UB3ve.webp 640w, /_astro/46_11.JI0SFrWp_1FB6VI.webp 750w, /_astro/46_11.JI0SFrWp_1337xT.webp 828w, /_astro/46_11.JI0SFrWp_GBdNm.webp 1080w, /_astro/46_11.JI0SFrWp_2k9g9A.webp 1280w, /_astro/46_11.JI0SFrWp_Z2s0OOj.webp 1668w, /_astro/46_11.JI0SFrWp_e1zYp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出ました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_12.C0HPBbIH_25eI4G.webp&quot; srcset=&quot;/_astro/46_12.C0HPBbIH_19gdSE.webp 640w, /_astro/46_12.C0HPBbIH_1Tghk9.webp 750w, /_astro/46_12.C0HPBbIH_1gHhVk.webp 828w, /_astro/46_12.C0HPBbIH_Z2wmLUi.webp 1080w, /_astro/46_12.C0HPBbIH_ZSOJz4.webp 1280w, /_astro/46_12.C0HPBbIH_ZAMGJ2.webp 1668w, /_astro/46_12.C0HPBbIH_25eI4G.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ふ、ふつくしい・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_13.Cv3rIwW2_PQqLx.webp&quot; srcset=&quot;/_astro/46_13.Cv3rIwW2_Z1vgmGx.webp 640w, /_astro/46_13.Cv3rIwW2_ZKgjg3.webp 750w, /_astro/46_13.Cv3rIwW2_Z1nOiDR.webp 828w, /_astro/46_13.Cv3rIwW2_1jr4Au.webp 1080w, /_astro/46_13.Cv3rIwW2_Z28d1Rd.webp 1280w, /_astro/46_13.Cv3rIwW2_Z1PaY2b.webp 1668w, /_astro/46_13.Cv3rIwW2_PQqLx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このふつくしいグラボにも治具を取り付けます。右側に付けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_14.hUGb5Omr_ZT9zpc.webp&quot; srcset=&quot;/_astro/46_14.hUGb5Omr_olJBp.webp 640w, /_astro/46_14.hUGb5Omr_19lN2T.webp 750w, /_astro/46_14.hUGb5Omr_vMNE5.webp 828w, /_astro/46_14.hUGb5Omr_ZqyVAf.webp 1080w, /_astro/46_14.hUGb5Omr_1bX5JY.webp 1280w, /_astro/46_14.hUGb5Omr_1u08A1.webp 1668w, /_astro/46_14.hUGb5Omr_ZT9zpc.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんなネジ孔が空いています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_15.B1G4mZno_1xRQ9i.webp&quot; srcset=&quot;/_astro/46_15.B1G4mZno_18dxOR.webp 640w, /_astro/46_15.B1G4mZno_1SdBgm.webp 750w, /_astro/46_15.B1G4mZno_1fEBRx.webp 828w, /_astro/46_15.B1G4mZno_21stXf.webp 1080w, /_astro/46_15.B1G4mZno_Z1qbBus.webp 1280w, /_astro/46_15.B1G4mZno_Z189yEq.webp 1668w, /_astro/46_15.B1G4mZno_1xRQ9i.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ネジを締めて治具を固定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_16.CvXDX2Dh_i3tx1.webp&quot; srcset=&quot;/_astro/46_16.CvXDX2Dh_2eM7xo.webp 640w, /_astro/46_16.CvXDX2Dh_Z25oWP3.webp 750w, /_astro/46_16.CvXDX2Dh_2mebA4.webp 828w, /_astro/46_16.CvXDX2Dh_KD7lX.webp 1080w, /_astro/46_16.CvXDX2Dh_2ob9Hc.webp 1280w, /_astro/46_16.CvXDX2Dh_Z2nXVgH.webp 1668w, /_astro/46_16.CvXDX2Dh_i3tx1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ペリペリフィルムを剥がすのを忘れないように。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_17.BB0PMDZ5_1Y8McX.webp&quot; srcset=&quot;/_astro/46_17.BB0PMDZ5_ZE04Pl.webp 640w, /_astro/46_17.BB0PMDZ5_5YXA9.webp 750w, /_astro/46_17.BB0PMDZ5_Zwy0MF.webp 828w, /_astro/46_17.BB0PMDZ5_2rIq1U.webp 1080w, /_astro/46_17.BB0PMDZ5_ZYUFqM.webp 1280w, /_astro/46_17.BB0PMDZ5_ZGSCAK.webp 1668w, /_astro/46_17.BB0PMDZ5_1Y8McX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13-3. グラボをマザボに挿す。&lt;a href=&quot;#13-3-グラボをマザボに挿す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;グラボを設置していきます。&lt;/p&gt;&lt;p&gt;まずはグラボのスロットを露出させるために、ケースに付いているスロットカバーを外します。4080 SUPERの場合は2スロット分外す必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_21.BKnE3hoN_ZRvHXd.webp&quot; srcset=&quot;/_astro/46_21.BKnE3hoN_2ctgXV.webp 640w, /_astro/46_21.BKnE3hoN_Z27HNov.webp 750w, /_astro/46_21.BKnE3hoN_2jUl1B.webp 828w, /_astro/46_21.BKnE3hoN_ZoV59g.webp 1080w, /_astro/46_21.BKnE3hoN_1dAWbX.webp 1280w, /_astro/46_21.BKnE3hoN_1vD020.webp 1668w, /_astro/46_21.BKnE3hoN_ZRvHXd.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ネジを回して外します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_22.D488v4Lj_qqFGF.webp&quot; srcset=&quot;/_astro/46_22.D488v4Lj_160RaC.webp 640w, /_astro/46_22.D488v4Lj_1Q0UB7.webp 750w, /_astro/46_22.D488v4Lj_1drVdi.webp 828w, /_astro/46_22.D488v4Lj_T1jvC.webp 1080w, /_astro/46_22.D488v4Lj_2wylQQ.webp 1280w, /_astro/46_22.D488v4Lj_Z2fAJ73.webp 1668w, /_astro/46_22.D488v4Lj_qqFGF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スロットカバーが外れました。
それでは、PCIeの拡張スロットにグラボを挿し込みます。しかしまた、これが手元が見えない・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_23.PhxY0TGq_Zv0xN9.webp&quot; srcset=&quot;/_astro/46_23.PhxY0TGq_Z1nV2I3.webp 640w, /_astro/46_23.PhxY0TGq_ZCUYhy.webp 750w, /_astro/46_23.PhxY0TGq_Z1gtXFn.webp 828w, /_astro/46_23.PhxY0TGq_Z2pTYc.webp 1080w, /_astro/46_23.PhxY0TGq_1A77m2.webp 1280w, /_astro/46_23.PhxY0TGq_1S9ac4.webp 1668w, /_astro/46_23.PhxY0TGq_Zv0xN9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_24.DO1B6BVa_Z2aGYbi.webp&quot; srcset=&quot;/_astro/46_24.DO1B6BVa_bPKul.webp 640w, /_astro/46_24.DO1B6BVa_VPNUP.webp 750w, /_astro/46_24.DO1B6BVa_jhOx1.webp 828w, /_astro/46_24.DO1B6BVa_Z1H7lml.webp 1080w, /_astro/46_24.DO1B6BVa_Z4zj17.webp 1280w, /_astro/46_24.DO1B6BVa_drINU.webp 1668w, /_astro/46_24.DO1B6BVa_Z2aGYbi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_25.CR4Q04L3_1qLfux.webp&quot; srcset=&quot;/_astro/46_25.CR4Q04L3_Z298gk1.webp 640w, /_astro/46_25.CR4Q04L3_Z1o8cSw.webp 750w, /_astro/46_25.CR4Q04L3_Z21Gchl.webp 828w, /_astro/46_25.CR4Q04L3_1TlSju.webp 1080w, /_astro/46_25.CR4Q04L3_Z1xid9d.webp 1280w, /_astro/46_25.CR4Q04L3_Z1fgajb.webp 1668w, /_astro/46_25.CR4Q04L3_1qLfux.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・、一応取り付けられたようです・・・。（全く手応えがなかった・・・。カチッともガコンッとも言わん。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_26.CaiR7d-e_Z1pmsFD.webp&quot; srcset=&quot;/_astro/46_26.CaiR7d-e_Z1fHzIa.webp 640w, /_astro/46_26.CaiR7d-e_ZuHwhF.webp 750w, /_astro/46_26.CaiR7d-e_Z18gvFu.webp 828w, /_astro/46_26.CaiR7d-e_ZVLOQG.webp 1080w, /_astro/46_26.CaiR7d-e_FKctx.webp 1280w, /_astro/46_26.CaiR7d-e_XMfjz.webp 1668w, /_astro/46_26.CaiR7d-e_Z1pmsFD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;引っ張っても外れないので、おそらくしっかり付いたのでしょう。そう思うしか。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_27.BbLJvnfe_Z1KvIAe.webp&quot; srcset=&quot;/_astro/46_27.BbLJvnfe_ZVnpOB.webp 640w, /_astro/46_27.BbLJvnfe_Zbnmo7.webp 750w, /_astro/46_27.BbLJvnfe_ZNVlLV.webp 828w, /_astro/46_27.BbLJvnfe_Z1hV5Lh.webp 1080w, /_astro/46_27.BbLJvnfe_kAVyW.webp 1280w, /_astro/46_27.BbLJvnfe_CCYoY.webp 1668w, /_astro/46_27.BbLJvnfe_Z1KvIAe.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13-4. グラボをPCケース内で固定する。&lt;a href=&quot;#13-4-グラボをpcケース内で固定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;グラボを挿したら、PCケース内にネジで固定していきます。&lt;/p&gt;&lt;p&gt;まずは先程外したスロットカバーのネジ孔で固定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_31.D8CHlZOY_Z1OpMbm.webp&quot; srcset=&quot;/_astro/46_31.D8CHlZOY_ZhtwFo.webp 640w, /_astro/46_31.D8CHlZOY_svvK6.webp 750w, /_astro/46_31.D8CHlZOY_Za2sCI.webp 828w, /_astro/46_31.D8CHlZOY_Z1lP9mp.webp 1080w, /_astro/46_31.D8CHlZOY_gGRXO.webp 1280w, /_astro/46_31.D8CHlZOY_yIUNQ.webp 1668w, /_astro/46_31.D8CHlZOY_Z1OpMbm.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんなに狭いと、今回マザボに付属していたような細長いドライバーでないと締めることが出来ません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_32.CIvQOh6z_ZCOIKP.webp&quot; srcset=&quot;/_astro/46_32.CIvQOh6z_oRRb8.webp 640w, /_astro/46_32.CIvQOh6z_19RUBC.webp 750w, /_astro/46_32.CIvQOh6z_wjVdN.webp 828w, /_astro/46_32.CIvQOh6z_Zaf5VS.webp 1080w, /_astro/46_32.CIvQOh6z_1shVol.webp 1280w, /_astro/46_32.CIvQOh6z_1KjYen.webp 1668w, /_astro/46_32.CIvQOh6z_ZCOIKP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次は先程マザボに取り付けた治具と、グラボに取り付けた治具をお互いに固定します。グラボの説明書ではこんな感じの図解が載せられています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_33.CPDFL0PX_Z2bRxpt.webp&quot; srcset=&quot;/_astro/46_33.CPDFL0PX_Z1rfshH.webp 640w, /_astro/46_33.CPDFL0PX_ZGfoQd.webp 750w, /_astro/46_33.CPDFL0PX_Z1jNof2.webp 828w, /_astro/46_33.CPDFL0PX_Z1IhTAw.webp 1080w, /_astro/46_33.CPDFL0PX_Z5JRfi.webp 1280w, /_astro/46_33.CPDFL0PX_chazJ.webp 1668w, /_astro/46_33.CPDFL0PX_Z2bRxpt.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に取り付けるとこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_34.BdLdY6l-_1lK6XC.webp&quot; srcset=&quot;/_astro/46_34.BdLdY6l-_CNvvU.webp 640w, /_astro/46_34.BdLdY6l-_1nNyWp.webp 750w, /_astro/46_34.BdLdY6l-_KfzyA.webp 828w, /_astro/46_34.BdLdY6l-_1OkJMz.webp 1080w, /_astro/46_34.BdLdY6l-_Z1CjlF8.webp 1280w, /_astro/46_34.BdLdY6l-_Z1khiP6.webp 1668w, /_astro/46_34.BdLdY6l-_1lK6XC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13-5. グラボに電源ケーブルを繋ぐ。&lt;a href=&quot;#13-5-グラボに電源ケーブルを繋ぐ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではグラボに電源を供給するためのケーブルを挿します。グラボに同梱されていたこの変換ケーブルを使います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_41.B6AQd9wS_27zAkY.webp&quot; srcset=&quot;/_astro/46_41.B6AQd9wS_Z1CKOdw.webp 640w, /_astro/46_41.B6AQd9wS_ZRKKM2.webp 750w, /_astro/46_41.B6AQd9wS_Z1vjKaQ.webp 828w, /_astro/46_41.B6AQd9wS_Z2u1TE0.webp 1080w, /_astro/46_41.B6AQd9wS_ZQtRiL.webp 1280w, /_astro/46_41.B6AQd9wS_ZyrOsJ.webp 1668w, /_astro/46_41.B6AQd9wS_27zAkY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源ユニットに挿さっている8ピンPCIeケーブルを、この変換ケーブルに繋ぎます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_42.Djztjd9t_2fFfN9.webp&quot; srcset=&quot;/_astro/46_42.Djztjd9t_19AKqz.webp 640w, /_astro/46_42.Djztjd9t_1TANR4.webp 750w, /_astro/46_42.Djztjd9t_1h2Otf.webp 828w, /_astro/46_42.Djztjd9t_Z2lVfbP.webp 1080w, /_astro/46_42.Djztjd9t_ZIocPB.webp 1280w, /_astro/46_42.Djztjd9t_Zqma0z.webp 1668w, /_astro/46_42.Djztjd9t_2fFfN9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;やっぱり角ばっていて痛いから手袋を装着。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_43.BN7KPjbz_ZObvlw.webp&quot; srcset=&quot;/_astro/46_43.BN7KPjbz_2czOPj.webp 640w, /_astro/46_43.BN7KPjbz_Z27Bfx8.webp 750w, /_astro/46_43.BN7KPjbz_2k1SRY.webp 828w, /_astro/46_43.BN7KPjbz_ZlARwz.webp 1080w, /_astro/46_43.BN7KPjbz_1gV9NE.webp 1280w, /_astro/46_43.BN7KPjbz_1yXcDG.webp 1668w, /_astro/46_43.BN7KPjbz_ZObvlw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、繋いだ変換ケーブルの17ピン端子をグラボに挿します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_44.ypMQsejI_1DjdHx.webp&quot; srcset=&quot;/_astro/46_44.ypMQsejI_ZEF3Yc.webp 640w, /_astro/46_44.ypMQsejI_5jYri.webp 750w, /_astro/46_44.ypMQsejI_ZxdYVw.webp 828w, /_astro/46_44.ypMQsejI_26SQwu.webp 1080w, /_astro/46_44.ypMQsejI_Z1kKeVd.webp 1280w, /_astro/46_44.ypMQsejI_Z12Ic6b.webp 1668w, /_astro/46_44.ypMQsejI_1DjdHx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今度やる時は静電気が起きなさそうな手袋を用意するか・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_45.BztajD0i_FE0S4.webp&quot; srcset=&quot;/_astro/46_45.BztajD0i_VupYx.webp 640w, /_astro/46_45.BztajD0i_1Gutq2.webp 750w, /_astro/46_45.BztajD0i_13Vu2d.webp 828w, /_astro/46_45.BztajD0i_19eDH1.webp 1080w, /_astro/46_45.BztajD0i_Z2iprKG.webp 1280w, /_astro/46_45.BztajD0i_Z20noUE.webp 1668w, /_astro/46_45.BztajD0i_FE0S4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グラボに電源ケーブルを挿し込めました！（今回も手応えなし！でも引っ張っても取れなかったからヨシ！）
グラボのスロットはちゃんと露出しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_46.Ckd_J4tc_2bUxVX.webp&quot; srcset=&quot;/_astro/46_46.Ckd_J4tc_Z1MCEJq.webp 640w, /_astro/46_46.Ckd_J4tc_Z12CBiV.webp 750w, /_astro/46_46.Ckd_J4tc_Z1FbAGK.webp 828w, /_astro/46_46.Ckd_J4tc_Z2pFW31.webp 1080w, /_astro/46_46.Ckd_J4tc_ZM8TGM.webp 1280w, /_astro/46_46.Ckd_J4tc_Zu6QQK.webp 1668w, /_astro/46_46.Ckd_J4tc_2bUxVX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いよいよ仕上げです・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/46_47.DlCZSCMv_Z97O27.webp&quot; srcset=&quot;/_astro/46_47.DlCZSCMv_1eRh2U.webp 640w, /_astro/46_47.DlCZSCMv_1YRktp.webp 750w, /_astro/46_47.DlCZSCMv_1mjl5A.webp 828w, /_astro/46_47.DlCZSCMv_jrNLP.webp 1080w, /_astro/46_47.DlCZSCMv_1VYQ84.webp 1280w, /_astro/46_47.DlCZSCMv_2f1SX6.webp 1668w, /_astro/46_47.DlCZSCMv_Z97O27.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;14. PCの電源を入れてBIOSを起動する。&lt;a href=&quot;#14-pcの電源を入れてbiosを起動する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;14-1. PCの電源だけ入れてみる。&lt;a href=&quot;#14-1-pcの電源だけ入れてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これで電源は入るようになったので、一旦通電してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_01.XMr1BV4l_vWMNT.webp&quot; srcset=&quot;/_astro/51_01.XMr1BV4l_Z2aV5pi.webp 640w, /_astro/51_01.XMr1BV4l_Z1pV1XN.webp 750w, /_astro/51_01.XMr1BV4l_Z23u1mC.webp 828w, /_astro/51_01.XMr1BV4l_YxqCQ.webp 1080w, /_astro/51_01.XMr1BV4l_Z2s6EOQ.webp 1280w, /_astro/51_01.XMr1BV4l_Z2a4BYO.webp 1668w, /_astro/51_01.XMr1BV4l_vWMNT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マザボが光りました！ちゃんと通電はしているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_02.B_mNHeOm_Z1NaVMO.webp&quot; srcset=&quot;/_astro/51_02.B_mNHeOm_Z2fvMcJ.webp 640w, /_astro/51_02.B_mNHeOm_Z1uvILf.webp 750w, /_astro/51_02.B_mNHeOm_Z284Ia4.webp 828w, /_astro/51_02.B_mNHeOm_Z1kAiXR.webp 1080w, /_astro/51_02.B_mNHeOm_hVImm.webp 1280w, /_astro/51_02.B_mNHeOm_zXLco.webp 1668w, /_astro/51_02.B_mNHeOm_Z1NaVMO.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしこの時点ではまだCPUクーラーは光りませんでした。ふーむ、これはBIOSを起動させる必要があるか・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_03.z2vpbFyV_Z2rRP3q.webp&quot; srcset=&quot;/_astro/51_03.z2vpbFyV_1YmgsD.webp 640w, /_astro/51_03.z2vpbFyV_Z2kONTN.webp 750w, /_astro/51_03.z2vpbFyV_26Nkvj.webp 828w, /_astro/51_03.z2vpbFyV_Z1Yicet.webp 1080w, /_astro/51_03.z2vpbFyV_ZlK9Sf.webp 1280w, /_astro/51_03.z2vpbFyV_Z3I73d.webp 1668w, /_astro/51_03.z2vpbFyV_Z2rRP3q.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14-2. ケースのカバーを閉じる。&lt;a href=&quot;#14-2-ケースのカバーを閉じる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;マザボ裏側のカバーを閉めます。ちなみにマザボ裏側は最終的にこうなりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_11.B3Z_IcpR_baFXH.webp&quot; srcset=&quot;/_astro/51_11.B3Z_IcpR_ZRxQxJ.webp 640w, /_astro/51_11.B3Z_IcpR_Z7xN7f.webp 750w, /_astro/51_11.B3Z_IcpR_ZK6Mv4.webp 828w, /_astro/51_11.B3Z_IcpR_DKjME.webp 1080w, /_astro/51_11.B3Z_IcpR_2him8S.webp 1280w, /_astro/51_11.B3Z_IcpR_Z2uQIP1.webp 1668w, /_astro/51_11.B3Z_IcpR_baFXH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;閉めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_12.CIRVqWdV_ZQisJS.webp&quot; srcset=&quot;/_astro/51_12.CIRVqWdV_ZJAn43.webp 640w, /_astro/51_12.CIRVqWdV_oFmr.webp 750w, /_astro/51_12.CIRVqWdV_ZC9j1n.webp 828w, /_astro/51_12.CIRVqWdV_ZnHOUV.webp 1080w, /_astro/51_12.CIRVqWdV_1eOcpi.webp 1280w, /_astro/51_12.CIRVqWdV_1wQffk.webp 1668w, /_astro/51_12.CIRVqWdV_ZQisJS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、マザボ上面のカバーを閉めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_13.BbgG8-Yx_Z1SAXTz.webp&quot; srcset=&quot;/_astro/51_13.BbgG8-Yx_Z7BmUW.webp 640w, /_astro/51_13.BbgG8-Yx_CnFux.webp 750w, /_astro/51_13.BbgG8-Yx_ZaiSh.webp 828w, /_astro/51_13.BbgG8-Yx_Z1q1l5C.webp 1080w, /_astro/51_13.BbgG8-Yx_cvGfB.webp 1280w, /_astro/51_13.BbgG8-Yx_uxJ5D.webp 1668w, /_astro/51_13.BbgG8-Yx_Z1SAXTz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ペリペリフィルムを剥がし忘れないようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_14.DQyBlbor_Z6PBVD.webp&quot; srcset=&quot;/_astro/51_14.DQyBlbor_ZS8jHq.webp 640w, /_astro/51_14.DQyBlbor_Z88ggV.webp 750w, /_astro/51_14.DQyBlbor_ZKGfEK.webp 828w, /_astro/51_14.DQyBlbor_lJ0Rj.webp 1080w, /_astro/51_14.DQyBlbor_1Yh3dx.webp 1280w, /_astro/51_14.DQyBlbor_2hj63z.webp 1668w, /_astro/51_14.DQyBlbor_Z6PBVD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに、マザボ表側のカバーを閉めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_15.CcdpgjTJ_Z2diN2l.webp&quot; srcset=&quot;/_astro/51_15.CcdpgjTJ_1kNngk.webp 640w, /_astro/51_15.CcdpgjTJ_25NqGO.webp 750w, /_astro/51_15.CcdpgjTJ_1sfrj0.webp 828w, /_astro/51_15.CcdpgjTJ_Z1JIado.webp 1080w, /_astro/51_15.CcdpgjTJ_Z7b7Ra.webp 1280w, /_astro/51_15.CcdpgjTJ_aPTWR.webp 1668w, /_astro/51_15.CcdpgjTJ_Z2diN2l.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな感じのPCになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_16.DgGLY75m_Z1tTdrM.webp&quot; srcset=&quot;/_astro/51_16.DgGLY75m_1GfwQb.webp 640w, /_astro/51_16.DgGLY75m_2rfAhF.webp 750w, /_astro/51_16.DgGLY75m_1NGASQ.webp 828w, /_astro/51_16.DgGLY75m_Z11jzCP.webp 1080w, /_astro/51_16.DgGLY75m_BdrHo.webp 1280w, /_astro/51_16.DgGLY75m_Tfuxq.webp 1668w, /_astro/51_16.DgGLY75m_Z1tTdrM.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14-3. BIOSを起動する。&lt;a href=&quot;#14-3-biosを起動する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは電源を入れて、BIOSを起動したいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_21.i4dZWFyh_Z2fLpN8.webp&quot; srcset=&quot;/_astro/51_21.i4dZWFyh_Z1Voj3C.webp 640w, /_astro/51_21.i4dZWFyh_Z1bofC8.webp 750w, /_astro/51_21.i4dZWFyh_Z1NWf0W.webp 828w, /_astro/51_21.i4dZWFyh_Z1MbLYb.webp 1080w, /_astro/51_21.i4dZWFyh_Z9DJCW.webp 1280w, /_astro/51_21.i4dZWFyh_8nic5.webp 1668w, /_astro/51_21.i4dZWFyh_Z2fLpN8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;電源を入れると、底面の吸気ファンが回っていることが確認できます。グラボも光っています！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_22.CYwekrCA_Z2eW1Em.webp&quot; srcset=&quot;/_astro/51_22.CYwekrCA_1kK93i.webp 640w, /_astro/51_22.CYwekrCA_25KctM.webp 750w, /_astro/51_22.CYwekrCA_1scd5X.webp 828w, /_astro/51_22.CYwekrCA_Z1LmnPp.webp 1080w, /_astro/51_22.CYwekrCA_Z8Olub.webp 1280w, /_astro/51_22.CYwekrCA_9cGkQ.webp 1668w, /_astro/51_22.CYwekrCA_Z2eW1Em.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;CPUクーラーが回っていることも確認できます。そして光っています！（RAMも光っています！）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/51_23.udpywFrK_2ri9tI.webp&quot; srcset=&quot;/_astro/51_23.udpywFrK_Z2h9Atw.webp 640w, /_astro/51_23.udpywFrK_Z1w9x32.webp 750w, /_astro/51_23.udpywFrK_Z29HwqQ.webp 828w, /_astro/51_23.udpywFrK_Z2ajlvg.webp 1080w, /_astro/51_23.udpywFrK_ZwLja2.webp 1280w, /_astro/51_23.udpywFrK_ZeJgk0.webp 1668w, /_astro/51_23.udpywFrK_2ri9tI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、BIOSが起動しました！　いいぞぉ！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_01.B5iHiicZ_1ed0sb.webp&quot; srcset=&quot;/_astro/01_01.B5iHiicZ_ZlsFeb.webp 640w, /_astro/01_01.B5iHiicZ_owncj.webp 750w, /_astro/01_01.B5iHiicZ_Ze1Bbv.webp 828w, /_astro/01_01.B5iHiicZ_1GMDh8.webp 1080w, /_astro/01_01.B5iHiicZ_Z1JQsbz.webp 1280w, /_astro/01_01.B5iHiicZ_Z1rOplx.webp 1668w, /_astro/01_01.B5iHiicZ_1ed0sb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;組み立てはおわり。&lt;a href=&quot;#組み立てはおわり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これで自作PCを組み立てる作業は終わりました！&lt;/p&gt;&lt;p&gt;ちなみに、今回組み立てたPCは床に設置して、床で転がして掃除できるようにキャスター付きのスタンドに載せています。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;768&quot; src=&quot;/_astro/91.DRkju6Cr_nErdL.webp&quot; srcset=&quot;/_astro/91.DRkju6Cr_2siszH.webp 640w, /_astro/91.DRkju6Cr_ZJC7Fp.webp 750w, /_astro/91.DRkju6Cr_Z1d26ef.webp 828w, /_astro/91.DRkju6Cr_nErdL.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは次回は、OS設定編に入ります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-os-setting/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（OS設定編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCのOSの設定をする際の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241112_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;組み立てが終わったか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;追い込みですよ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】半角カタカナを全角カタカナに変換する処理をPesterでテストする</title><link>https://endorphinbath.com/posts/powershell-convert-to-full-width-kana/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-convert-to-full-width-kana/</guid><description>PowerShellで半角カタカナを全角カタカナに変換する関数を作成し、Pesterを用いてそのテストを実施する方法を解説しています。</description><pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、このカタカナ半角だな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;全角の方が見慣れてるんだよなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;半角カタカナとかあまり使いたくない&lt;a href=&quot;#半角カタカナとかあまり使いたくない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まあ、人に見せるための資料を作る時に、なんとか収めたい時に使うことが無いこともギリ無いですけど・・・。&lt;/p&gt;&lt;p&gt;しかし、自分のメモ用には全角カタカナで一律揃えたいので、どこかのWebサイトから情報を引っ張ってくる時に、文字列の中に含まれている半角カタカナを全て全角カタカナにするツールをPowerShellで作りました。&lt;/p&gt;&lt;p&gt;起動用のバッチを実行すれば、表示されるPowerShellコンソール内に文字列を打ち込めば全角カタカナになります。これをコピーして、貼りたい場所に貼って使用できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;389&quot; src=&quot;/_astro/11.C9GSM5OF_Z278LNJ.webp&quot; srcset=&quot;/_astro/11.C9GSM5OF_Z14hlSj.webp 640w, /_astro/11.C9GSM5OF_19EDpM.webp 750w, /_astro/11.C9GSM5OF_HPDzP.webp 828w, /_astro/11.C9GSM5OF_2bKpvO.webp 1080w, /_astro/11.C9GSM5OF_Z278LNJ.webp 1104w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;全角カタカナ変換処理のコード&lt;a href=&quot;#全角カタカナ変換処理のコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実行ディレクトリの構成はこれを想定しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z9-1_convert_to_full_width_kana.bat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z9-1_convert_to_full_width_kana.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  Z9-1_convert_to_full_width_kana.Tests.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これが今回のツールのコードです。正味の処理は1行しかありません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$String&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$String.Normalize&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;System.Text.NormalizationForm&lt;/span&gt;&lt;span&gt;]::FormKC)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$inputString&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input characters containing Katakana.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]::IsNullOrWhiteSpace(&lt;/span&gt;&lt;span&gt;$inputString&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;No input. This process has cancelled.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$convertedString&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputString&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;Input characters: {0}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputString&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;Output characters: {0}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$convertedString&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input any key to terminate this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;実行用のバッチの中身はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Start&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;Powershell&lt;/span&gt;&lt;span&gt; -Windowstyle Normal -NoProfile -ExecutionPolicy Unrestricted -File &lt;/span&gt;&lt;span&gt;&quot;Z9-1_convert_to_full_width_kana.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pesterを動かす。&lt;a href=&quot;#pesterを動かす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、「Pester」で動くテストコードも書いてみます。&lt;/p&gt;&lt;p&gt;「Pester」とは、PowerShellスクリプトを単体テストするためのPowerShellに内蔵されているライブラリです。&lt;/p&gt;&lt;p&gt;僕自身、Pesterを使ったことがないので、今回のような単純な処理で使用感を味わってみたいと思います。&lt;/p&gt;&lt;a href=&quot;https://pester.dev/docs/quick-start&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pester.dev/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;pester.dev&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Quick Start | Pester&lt;/div&gt;&lt;div&gt;Get started using Pester to test your PowerShell scripts, functions and modules&lt;/div&gt;&lt;div&gt;pester.dev&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まずは、単体テストをするディレクトリにて、Pesterをインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Install-Module&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Name Pester &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Force &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;SkipPublisherCheck&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;今回のテストコードはこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BeforeAll {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Leaf $PSCommandPath).Replace(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.Tests&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Describe &lt;/span&gt;&lt;span&gt;&quot;Convert-ToFullWidthKana Function Tests&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Normal tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Context &lt;/span&gt;&lt;span&gt;&quot;When converting half-width Katakana to full-width Katakana&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should convert ｶﾀｶﾅ to カタカナ&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# Arrange&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ｶﾀｶﾅ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;カタカナ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# Act&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;# Assert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should convert ﾀﾞﾌﾞﾙｸｫｰﾃｰｼｮﾝ to ダブルクォーテーション&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ﾀﾞﾌﾞﾙｸｫｰﾃｰｼｮﾝ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ダブルクォーテーション&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Abnormal tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Context &lt;/span&gt;&lt;span&gt;&quot;When input is empty or invalid&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should return an empty string when input is empty&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should return the original string if no half-width Katakana is present&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;これはテストです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;これはテストです。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Boundary Value Tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Context &lt;/span&gt;&lt;span&gt;&quot;Edge cases&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should handle mixed input with half-width and full-width characters&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ﾊﾝｶｸと全角カタカナ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ハンカクと全角カタカナ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should handle mixed input with half-width and full-width characters and mixed Japanese and English characters&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ﾊﾞﾝｶﾞｰﾄﾞFTSEｴﾏｰｼﾞﾝｸﾞ･ﾏｰｹｯﾂET&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;バンガードFTSEエマージング・マーケッツET&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;It &lt;/span&gt;&lt;span&gt;&quot;should handle numeric and symbol characters without changes&quot;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;12345 &amp;amp;@&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;12345 &amp;amp;@&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Convert-ToFullWidthKana&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;String &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$result&lt;/span&gt;&lt;span&gt;&lt;span&gt; | Should &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Be &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;それではテストコードを実行してみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-Pester&lt;/span&gt;&lt;span&gt;&lt;span&gt; .\Z9&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1_convert_to_full_width_kana.Tests.ps1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Pesterを実行してみると・・・アレッ。こんなエラーメッセージが表示されて全てのテストが失敗しました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Starting discovery in 1 files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Discovery found 7 tests in 204ms.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Running tests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[-] Convert-ToFullWidthKana Function Tests.When converting half-width Katakana to full-width Katakana.should convert ｶﾀｶﾅ to カタカナ 66ms (39ms|26ms)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CommandNotFoundException: The term &apos;Convert-ToFullWidthKana&apos; is not recognized as a name of a cmdlet, function, script file, or executable program.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Check the spelling of the name, or if a path was included, verify that the path is correct and try again.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;at , /home/user/PictureExifOptimizer/codes/Z9-1_convert_to_full_width_kana.Tests.ps1:13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[-] Convert-ToFullWidthKana Function Tests.When converting half-width Katakana to full-width Katakana.should convert ﾀﾞﾌﾞﾙｸｫｰﾃｰｼｮﾝ to ダブルクォーテーション 24ms (23ms|1ms)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CommandNotFoundException: The term &apos;Convert-ToFullWidthKana&apos; is not recognized as a name of a cmdlet, function, script file, or executable program.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Check the spelling of the name, or if a path was included, verify that the path is correct and try again.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;at , /home/user/PictureExifOptimizer/codes/Z9-1_convert_to_full_width_kana.Tests.ps1:23&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージで調べてみると、どうやら&lt;code&gt;Describe&lt;/code&gt;ブロックの実行前に&lt;code&gt;BeforeAll&lt;/code&gt;ブロックが必要らしい。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BeforeAll {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Leaf $PSCommandPath).Replace(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.Tests&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Import-Module $script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;再びPesterを実行すると・・・、なんか止まった。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Starting discovery in 1 files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Discovery found 7 tests in 43ms.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Running tests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Input characters containing Katakana.:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;あっ・・・、ファイルの中の全てが実行されるのか。だから入力待ちになっている・・・。適当に「v」とか何でもいいので入力します。&lt;/p&gt;&lt;p&gt;すると・・・成功！&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[+] /home/userxxxx/PictureExifOptimizer/codes/Z9-1_convert_to_full_width_kana.Tests.ps1 4.19s (4.13s|47ms)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Tests completed in 4.19s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Tests Passed: 7, Failed: 0, Skipped: 0, Inconclusive: 0, NotRun: 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;かなり使いやすくて良いですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;テスト対象をスコープに入れる。&lt;a href=&quot;#テスト対象をスコープに入れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、&lt;code&gt;BeforeAll&lt;/code&gt;ブロックの中でテスト対象のスクリプトファイルを呼び出す処理を行っていますが。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BeforeAll {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Leaf $PSCommandPath).Replace(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.Tests&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Import-Module $script -Scope &quot;Global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、「&lt;code&gt;. $script&lt;/code&gt;」という処理で、テスト対象を現在のスコープの中にいれる処理を行っています。&lt;/p&gt;&lt;p&gt;このドットを頭に打ち込んでから、コマンドを実行しています。この記法を「ドットソース表記」と呼ぶらしく、コマンドを実行する前に新しいスコープは作成されません。なので、独自のローカルスコープに加えた追加や変更は、代わりに現在のスコープに対して行われるようです。&lt;/p&gt;&lt;p&gt;PowerShellではスクリプト実行時に、「スクリプト ファイル」、「スクリプト ブロック」、「関数またはフィルター」の括りでスコープが作成されます。なので、&lt;code&gt;$script&lt;/code&gt;でスクリプトを実行してしまうと、そのテスト対象のスクリプトのスコープは「BeforeAllブロック」の中で閉じてしまうのでしょうか、&lt;code&gt;CommandNotFoundException&lt;/code&gt;の例外となってテストに失敗しました。「&lt;code&gt;. $script&lt;/code&gt;」実行時には、「スクリプトファイル」内のスコープに入るってわけか。へえ、ブロック内にある処理に関係するモジュールのスコープは、全てそのブロックの中のものになると思っていたんですけど、実行時にスコープは定義されるのか・・・。それは知らなかった。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-03?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;基本的な概念 - PowerShell&lt;/div&gt;&lt;div&gt;PowerShell プロバイダーでは、コマンド ラインからデータとコンポーネントにアクセスできます。 データは、ファイル システム ドライブに似た一貫性のある形式で表示されます。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Import-Moduleではテストできない。&lt;a href=&quot;#import-moduleではテストできない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さらにちなみに、&lt;code&gt;BeforeAll&lt;/code&gt;ブロックの中に&lt;code&gt;Import-Module&lt;/code&gt;がコメントアウトされて書いてありますが。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;BeforeAll {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Leaf $PSCommandPath).Replace(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.Tests&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$scriptDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;\\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Import-Module $script -Scope &quot;Global&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;$script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;なぜ、&lt;code&gt;Import-Module&lt;/code&gt;などと書いてあるかと言うと、テストを試している途中でエラーメッセージで表示されていたからです。しかし、このコマンドレットでテスト対象のスクリプトをモジュールとしてインポートしようとしてもテストは出来ませんでした。&lt;/p&gt;&lt;p&gt;詳しいロジックはちょっと分かりませんが、今回のテストは、「モジュールをテストしようとしているわけではない。」ということだからなんですかね。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/import-module?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Import-Module (Microsoft.PowerShell.Core) - PowerShell&lt;/div&gt;&lt;div&gt;Import-Module コマンドレットは、現在のセッションに 1 つ以上のモジュールを追加します。 PowerShell 3.0 以降では、モジュール内のコマンドまたはプロバイダーを使用すると、インストールされているモジュールがセッションに自動的にインポートされます。 ただし、Import-Module コマンドを使用してモジュールをインポートすることはできます。 $PSModuleAutoLoadingPreference 基本設定変数を使用して、モジュールの自動インポートを無効にすることができます。 $PSModuleAutoLoadingPreference 変数の詳細については、about_Preference_Variablesを参照してください。 モジュールは、PowerShell で使用できるメンバーを含むパッケージです。 メンバーには、コマンドレット、プロバイダー、スクリプト、関数、変数、およびその他のツールとファイルが含まれます。 モジュールがインポートされたら、セッションでモジュール メンバーを使用できます。 モジュールの詳細については、about_Modulesを参照してください。 既定では、モジュールがエクスポートするすべてのメンバー Import-Module インポートされますが、Alias、Function、Cmdlet、および Variable パラメーターを使用して、インポートするメンバーを制限できます。 NoClobber パラメーターを指定すると、Import-Module は現在のセッションのメンバーと同じ名前のメンバーをインポートできなくなります。 Import-Module は、モジュールを現在のセッションにのみインポートします。 新しいセッションごとにモジュールをインポートするには、PowerShell プロファイルに Import-Module コマンドを追加します。 プロファイルの詳細については、about_Profilesを参照してください。 リモート コンピューターに PSSession を作成することで、PowerShell リモート処理が有効になっているリモート Windows コンピューターを管理できます。 次に、 の Import-Module パラメーターを使用して、リモート コンピューターにインストールされているモジュールをインポートします。 現在のセッションでインポートされたコマンドを使用すると、コマンドはリモート コンピューターで暗黙的に実行されます。 Windows PowerShell 3.0 以降では、Import-Module を使用して共通情報モデル (CIM) モジュールをインポートできます。 CIM モジュールは、コマンドレット定義 XML (CDXML) ファイルでコマンドレットを定義します。 この機能を使用すると、C++ で記述されたコマンドレットなど、非マネージド コード アセンブリに実装されているコマンドレットを使用できます。 Windows オペレーティング システムを実行していないコンピューターなど、PowerShell リモート処理が有効になっていないリモート コンピューターの場合は、 の Import-Module パラメーターを使用して、リモート コンピューターから CIM モジュールをインポートできます。 インポートされたコマンドは、リモート コンピューターで暗黙的に実行されます。 CIMSession は、リモート コンピューター上の Windows Management Instrumentation (WMI) への接続です。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;テストのカバレッジを取得する。&lt;a href=&quot;#テストのカバレッジを取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さらにさらに、Pesterでは実行ディレクトリにおけるテストカバレッジも取得できます。&lt;/p&gt;&lt;a href=&quot;https://pester.dev/docs/usage/code-coverage&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pester.dev/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;pester.dev&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Generating Code Coverage Metrics | Pester&lt;/div&gt;&lt;div&gt;Pester can generate code coverage metrics to help you understand how many lines of your PowerShell code that is actually covered by your Pester-tests. Use this to increase confidence in your tests&lt;/div&gt;&lt;div&gt;pester.dev&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Pesterの公式ドキュメントにある「Generating Code Coverage Metrics」の項にある「Quick Start」に書いてあるスニペットをそのままテスト対象のディレクトリで実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Create a Pester configuration object using `New-PesterConfiguration`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$config&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-PesterConfiguration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Set the test path to specify where your tests are located. In this example, we set the path to the current directory. Pester will look into all subdirectories.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$config.Run.Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Enable Code Coverage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$config.CodeCoverage.Enabled&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Run Pester tests using the configuration you&apos;ve created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-Pester&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Configuration &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちゃんと実行されると、テスト終了後にこんな感じに表示されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Running tests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Input characters containing Katakana.: v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[+] /home/userxxxxxxx/PictureExifOptimizer/codes/Z9-1_convert_to_full_width_kana.Tests.ps1 2.6s (2.44s|155ms)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Tests completed in 2.61s&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Tests Passed: 7, Failed: 0, Skipped: 0, Inconclusive: 0, NotRun: 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Processing code coverage result.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Covered 0.71% / 75%. 845 analyzed Commands in 22 Files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;うーんまあ、そりゃあ他のスクリプトのテストは書いてないからなあ・・・。&lt;/p&gt;&lt;p&gt;とりあえず、カバレッジを取ることも出来ました！
ちなみに、実行ディレクトリの中に、より詳細な内容が記録されている&lt;code&gt;coverage.xml&lt;/code&gt;というファイルも出力されましたとさ。中身はこんな感じでした。&lt;code&gt;class&lt;/code&gt;タグと&lt;code&gt;sourcefile&lt;/code&gt;タグに分かれてデータが入っていますね。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt; version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span&gt; encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span&gt; standalone&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;no&quot;&lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!&lt;/span&gt;&lt;span&gt;DOCTYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;report&lt;/span&gt;&lt;span&gt;&lt;span&gt; PUBLIC &quot;-//JACOCO//DTD Report 1.1//EN&quot; &quot;report.dtd&quot;&lt;/span&gt;&lt;span&gt;[]&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;report&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Pester (11/15/2024 18:43:45)&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;sessioninfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;this&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1731696222526&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dump&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1731696225137&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codes&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codes/1-2-2_move_mp4&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sourcefilename&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1-2-2_move_mp4.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;script&amp;gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;desc&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;()&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codes/1-2-3_set_create_date&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sourcefilename&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1-2-3_set_create_date.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codes/Z9-1_convert_to_full_width_kana&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sourcefilename&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Z9-1_convert_to_full_width_kana.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Convert-ToFullWidthKana&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;desc&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;()&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&amp;lt;script&amp;gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;desc&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;()&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;9&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;5&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;5&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1-2-2_move_mp4.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1-2-3_set_create_date.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Z9-1_convert_to_full_width_kana.ps1&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;9&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;11&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;12&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;13&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;18&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nr&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;19&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mi&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ci&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cb&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;sourcefile&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;839&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;639&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;45&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;21&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;INSTRUCTION&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;839&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;LINE&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;639&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;6&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;METHOD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;45&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;2&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;counter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CLASS&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;missed&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;21&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;covered&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;1&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;report&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、PowerShellで複数枚の画像を1つのPDFファイルへと結合する方法を紹介しました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;PowerShellで半角カタカナから全角カタカナにする処理を書くことが出来る。&lt;/li&gt;
&lt;li&gt;Pesterを使うと、PowerShellの自作スクリプトに対して単体テストを行うことが出来る。&lt;/li&gt;
&lt;li&gt;Pesterを使う際にテスト対象のスクリプトをインポートする際に、&lt;code&gt;Import-Module&lt;/code&gt;は不要。ドットソース表記を使う。&lt;/li&gt;
&lt;li&gt;Pesterでは、テストカバレッジも取得できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで自分が書いたPowerShellスクリプトの動作を検証することが出来るようになりました。&lt;/p&gt;&lt;p&gt;Pesterでは今回紹介したこと以外に、処理をモック化することも出来るようです。必要な時はぜひ使ってみたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShell関連記事&lt;a href=&quot;#powershell関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のPowerShell関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-trimming-needs-marchaling/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をトリミングしたいだけなのにマーシャリングを知らなくて沼った話&lt;/div&gt;&lt;div&gt;.NETの構造体「System.Drawing.Rectangle」の引数の型で沼りました。更に、BitmapのDisposeでオブジェクトの破棄、LockBitsで処理を軽くしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241026_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-merging-into-pdf/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話&lt;/div&gt;&lt;div&gt;ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241027_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;全角にするのは瞬殺だったな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほとんどテストの内容でした。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【気を付けろ】GoogleドキュメントからNotionに貼り付けた画像はリンクで貼られる</title><link>https://endorphinbath.com/posts/notion-googledoc-paste-image-link/</link><guid isPermaLink="true">https://endorphinbath.com/posts/notion-googledoc-paste-image-link/</guid><description>GoogleドキュメントからNotionに貼り付けた画像は、画像そのものを貼っているわけではなくリンクを貼っているに過ぎません。なのでコピー元を消すと画像は消えます。</description><pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_002.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うっわ！！ 今まで溜めてた画像が消えたんだけど！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こっ、これはマズすぎる・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_002.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;これから同じことをしようとしている人に向けての警鐘&lt;a href=&quot;#これから同じことをしようとしている人に向けての警鐘&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事は、僕と同じようにNotionで情報を記録および管理している人、しようとしている人に向けた記事になります。&lt;/p&gt;&lt;p&gt;Notionに「画像」を貼るプロセスにおいて、今回の解説する事を知っておかないと、自分が築き上げてきた「デジタル資産」的なものが消滅する可能性があります。（僕はこの事を知らないで、画像データが半分は消えました。）&lt;/p&gt;&lt;p&gt;それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起こったのか。&lt;a href=&quot;#何が起こったのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Notionに移動した画像が表示されない・・・。&lt;a href=&quot;#notionに移動した画像が表示されない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕は現在、日々の記録というかメモを、「Notion」というサービスに集約しようとしています。&lt;/p&gt;&lt;a href=&quot;https://www.notion.com/ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;あなたのニーズを叶えるAIワークスペース。| Notion (ノーション)&lt;/div&gt;&lt;div&gt;カスタムエージェントの構築や、すべてのアプリを横断する情報検索、面倒な作業の自動化を行えるAIワークスペースなど、チームはより多くの作業をスピーディにこなせます。&lt;/div&gt;&lt;div&gt;www.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/meta/custom-agents-og.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかしながら、僕はこのNotionに辿り着くまでに、メモを管理するツールを色々と渡り歩いてきました。
渡り歩いたとは言っても、最初にEvernote、その次にGoogleドキュメント（Googleドライブと言えばいいのか。）、そして現在のNotionです。&lt;/p&gt;&lt;p&gt;そのNotionに至るまでの経緯は、今回はまあ置いておきましょう。&lt;/p&gt;&lt;p&gt;そして、僕がGoogleドキュメントからNotionにデータを移して、少し時が経過してからその移したページを見てみると・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1586&quot; height=&quot;884&quot; src=&quot;/_astro/03.NAdqdIfO_1iqK6z.webp&quot; srcset=&quot;/_astro/03.NAdqdIfO_1oIzkx.webp 640w, /_astro/03.NAdqdIfO_ZE0UKL.webp 750w, /_astro/03.NAdqdIfO_1c7YMa.webp 828w, /_astro/03.NAdqdIfO_Z1Aze8N.webp 1080w, /_astro/03.NAdqdIfO_1WVoE8.webp 1280w, /_astro/03.NAdqdIfO_1iqK6z.webp 1586w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・はっ？？&lt;/p&gt;&lt;p&gt;画像が表示されていないんだが・・・？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画像のリンク先を見てみると・・・。&lt;a href=&quot;#画像のリンク先を見てみると&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;何が起きているのかと思い、そのNotion上で表示されていない画像の上で右クリックをして、コンテキストメニューから&lt;code&gt;View original&lt;/code&gt;をクリックして、画像のオリジナルファイルがある場所に遷移してみます。&lt;/p&gt;&lt;p&gt;すると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1417&quot; height=&quot;769&quot; src=&quot;/_astro/06.CRkaIpL2_1JQvdj.webp&quot; srcset=&quot;/_astro/06.CRkaIpL2_203IV2.webp 640w, /_astro/06.CRkaIpL2_vkIpP.webp 750w, /_astro/06.CRkaIpL2_jrK8B.webp 828w, /_astro/06.CRkaIpL2_2kXR19.webp 1080w, /_astro/06.CRkaIpL2_OqqXI.webp 1280w, /_astro/06.CRkaIpL2_1JQvdj.webp 1417w&quot; /&gt;&lt;/p&gt;&lt;p&gt;404・・・？　　リンク切れ・・・？&lt;/p&gt;&lt;p&gt;そこで僕は悟りました。&lt;/p&gt;&lt;p&gt;そのNotionのページに貼り付いているのは「画像そのもの」ではなく、「画像へのリンク」なのだと。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionのページに貼り付いている画像の在り処。&lt;a href=&quot;#notionのページに貼り付いている画像の在り処&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程は便宜上、「画像そのもの」という表現をしましたが、Notionのページ上には、その「画像そのもの」が貼り付いているわけではありません。&lt;/p&gt;&lt;p&gt;Notionからページをエクスポートすると、ページに貼り付いている画像もエクスポートする時があります。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;エクスポート時にその状態になっているページは、「画像そのもの」がページに貼り付いている。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;という表現にしています。&lt;/p&gt;&lt;p&gt;「画像そのもの」が貼り付いている状態だと、画像のオリジナルファイルのアドレスは下記の画像のように&lt;code&gt;file.notion.so/~&lt;/code&gt;という感じで表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1686&quot; height=&quot;821&quot; src=&quot;/_astro/08.CiIpDESh_1SxnPy.webp&quot; srcset=&quot;/_astro/08.CiIpDESh_ZTnN1q.webp 640w, /_astro/08.CiIpDESh_YsIfh.webp 750w, /_astro/08.CiIpDESh_wbOF1.webp 828w, /_astro/08.CiIpDESh_Z1hMOMW.webp 1080w, /_astro/08.CiIpDESh_Ze3Pjr.webp 1280w, /_astro/08.CiIpDESh_1QwtYQ.webp 1668w, /_astro/08.CiIpDESh_1SxnPy.webp 1686w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、先程のリンク切れを起こしていた画像に関しては、Googleドキュメント内にある「画像へのリンク」が貼り付けられていた状態です。&lt;/p&gt;&lt;p&gt;そのため、Notionに移行した後、削除してしまったGoogleドキュメントのファイル内にあった画像へのリンクが切れて、Notionで表示できなくなっていたわけです。&lt;/p&gt;&lt;p&gt;そしてこれが、200ページぐらいで発生していたので無事死亡・・・。&lt;/p&gt;&lt;p&gt;さすがに笑えない。（火災に遭うと、こんな気分になるんだなあ。って思いました。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;画像がNotionにリンクで貼り付いた原因。&lt;a href=&quot;#画像がnotionにリンクで貼り付いた原因&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、NotionのページにGoogleドキュメント内にある「画像へのリンク」が貼り付いてしまった原因を見ていきます。&lt;/p&gt;&lt;p&gt;僕がNotionに移行していた時の工程はこんな感じの流れです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Googleドキュメントで全選択（データ多い場合は分けて選択）して、クリップボードにコピーする。&lt;/li&gt;
&lt;li&gt;Notionの貼り付けたいページ上で、クリップボードから貼り付ける。&lt;/li&gt;
&lt;li&gt;それをひたすら繰り返す。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;というプロセスです。至極単純です。&lt;/p&gt;&lt;p&gt;しかし、Notionへメモを保存する手段としては、この方法はいただけませんでした・・・。&lt;/p&gt;&lt;p&gt;実は、Notionに、Webサイトの画像をコピーする際にも、同じ現象が起きます。&lt;/p&gt;&lt;p&gt;上記のNotionへの移行の流れと同様に、Web記事をNotionのページに貼り付けてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;913&quot; src=&quot;/_astro/10_01.DoRtS2F0_Z9ujqU.webp&quot; srcset=&quot;/_astro/10_01.DoRtS2F0_Z2gchhl.webp 640w, /_astro/10_01.DoRtS2F0_eX0HE.webp 750w, /_astro/10_01.DoRtS2F0_ZtszuB.webp 828w, /_astro/10_01.DoRtS2F0_BebRF.webp 1080w, /_astro/10_01.DoRtS2F0_Z199VNi.webp 1280w, /_astro/10_01.DoRtS2F0_12g2KT.webp 1668w, /_astro/10_01.DoRtS2F0_Z9ujqU.webp 1917w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;906&quot; src=&quot;/_astro/10_02.DF1_aYgf_Z1bY0PV.webp&quot; srcset=&quot;/_astro/10_02.DF1_aYgf_1HrDLD.webp 640w, /_astro/10_02.DF1_aYgf_ZQzc2i.webp 750w, /_astro/10_02.DF1_aYgf_Z1A0Mfy.webp 828w, /_astro/10_02.DF1_aYgf_1aS1ag.webp 1080w, /_astro/10_02.DF1_aYgf_ZLUe2m.webp 1280w, /_astro/10_02.DF1_aYgf_GD3rm.webp 1668w, /_astro/10_02.DF1_aYgf_Z1bY0PV.webp 1917w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;View original&lt;/code&gt;からこの画像のオリジナルファイルを確認してみますと・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;897&quot; src=&quot;/_astro/10_03.DIDfbOTt_Z1RydkP.webp&quot; srcset=&quot;/_astro/10_03.DIDfbOTt_2jpOgo.webp 640w, /_astro/10_03.DIDfbOTt_cYMYd.webp 750w, /_astro/10_03.DIDfbOTt_26g3kx.webp 828w, /_astro/10_03.DIDfbOTt_Z1YYMoE.webp 1080w, /_astro/10_03.DIDfbOTt_Z3T9IG.webp 1280w, /_astro/10_03.DIDfbOTt_Z5k8R.webp 1668w, /_astro/10_03.DIDfbOTt_Z1RydkP.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんと、Notionとは全く別のサーバーのアドレスが表示されています・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;950&quot; src=&quot;/_astro/10_04.BeicImGA_ZupcV6.webp&quot; srcset=&quot;/_astro/10_04.BeicImGA_Z1XsBhX.webp 640w, /_astro/10_04.BeicImGA_ZzyhHM.webp 750w, /_astro/10_04.BeicImGA_1bqfLF.webp 828w, /_astro/10_04.BeicImGA_bEll1.webp 1080w, /_astro/10_04.BeicImGA_wQjUt.webp 1280w, /_astro/10_04.BeicImGA_Z2x54dO.webp 1668w, /_astro/10_04.BeicImGA_ZupcV6.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;つまり、この状態だと、Notionページに「画像そのもの」が貼り付いている状態ではないということです。（ちなみに、この状態でリンク切れしていない状態でエクスポートしたら画像もエクスポートされるかどうかは、試してません。）&lt;/p&gt;&lt;p&gt;ということで、Notionに他のサービスから画像を含むメモを移行する時には、クリップボードを使ったコピペは使わない方が良いという結論に至りました。コピペはスゴイ便利なんだけどなあ・・・。（ところで、Googleドキュメント内の画像が、ファイルに埋め込まれているわけではなく、Google上の別のサーバに置かれている画像にリンクされているとは知りませんでした・・・。そこがMicrosoftのWordとは少し違うんだなあ。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;じゃあ、何を使って移行するべきなの？&lt;a href=&quot;#じゃあ何を使って移行するべきなの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それじゃあ、何を使ってNotionに画像を移行するべきなのでしょうか？&lt;/p&gt;&lt;p&gt;その手段としては、「import機能」を使うべきだと思います。オススメします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Notion Web Clipperでは画像は外部リンク参照になる。&lt;a href=&quot;#notion-web-clipperでは画像は外部リンク参照になる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、他の手段として「Notion Web Clipper」が思いついたので試しました。&lt;/p&gt;&lt;a href=&quot;https://www.notion.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Notion Web Clipper for Chrome, Safari, Firefox, and mobile&lt;/div&gt;&lt;div&gt;Save any web page on Notion. Annotate and organize to your heartʼs content.&lt;/div&gt;&lt;div&gt;www.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/meta/web-clipper.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、結果としては、コピペしたときと変わらず、画像には「画像へのリンク」が貼り付いてしまっていました。&lt;/p&gt;&lt;p&gt;なので、Web記事の魚拓に「Notion Web Clipper」を使うのはオススメしません。（外部リンクに参照している状態ということは、それって魚拓になってないよね・・・。Notionに画像をメモるツールとして、Web Clipperはほぼ意味ないと思います。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画像を取り込みたかったらimport機能を使え。&lt;a href=&quot;#画像を取り込みたかったらimport機能を使え&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;重ねて、画像のリンクではなく画像そのものをNotionのページ内に取り込みたかったら、「import機能」を使うことをオススメします。
少し「import機能」の使い方を見ていきましょう。&lt;/p&gt;&lt;p&gt;import機能は、多くのサービスに対応しています。Googleドキュメント、Word、Asana、Trello、Monday.com、などなど・・・があります。&lt;/p&gt;&lt;p&gt;そこで今回は、Googleドキュメントと、Evernoteにおけるimport機能の使い方を紹介します。。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleドキュメントからのインポート&lt;a href=&quot;#googleドキュメントからのインポート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、Googleドキュメントのインポートの仕方について紹介します。
サイドメニューバー内の&lt;code&gt;Setting&lt;/code&gt;をクリックして、表示されたウインドウ内でサイドバーにある「import」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;720&quot; src=&quot;/_astro/11.Bl20wnjB_Db90t.webp&quot; srcset=&quot;/_astro/11.Bl20wnjB_CHlhI.webp 640w, /_astro/11.Bl20wnjB_2ctow2.webp 750w, /_astro/11.Bl20wnjB_Z1mY6x6.webp 828w, /_astro/11.Bl20wnjB_yd0IQ.webp 1080w, /_astro/11.Bl20wnjB_Db90t.webp 1153w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、インポート元のGoogleドキュメントはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;902&quot; src=&quot;/_astro/12.B7A-lACp_1FN71g.webp&quot; srcset=&quot;/_astro/12.B7A-lACp_1oxv8N.webp 640w, /_astro/12.B7A-lACp_ZCJ6dc.webp 750w, /_astro/12.B7A-lACp_22uqs9.webp 828w, /_astro/12.B7A-lACp_ZOAXnS.webp 1080w, /_astro/12.B7A-lACp_Z2iKUPY.webp 1280w, /_astro/12.B7A-lACp_vJ3wO.webp 1668w, /_astro/12.B7A-lACp_1FN71g.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Notionのimport画面では、下記の画像のように表示が為されます。このウインドウ内でインポートしたいファイルを1つ選びます。（2024-11-14時点では、インポート1回ごとにGoogleドキュメントのファイルは1つしか選べません。）
&lt;img loading=&quot;lazy&quot; width=&quot;1148&quot; height=&quot;707&quot; src=&quot;/_astro/13.BvnggM3v_Z2ix1Wr.webp&quot; srcset=&quot;/_astro/13.BvnggM3v_1MlfAa.webp 640w, /_astro/13.BvnggM3v_Z15tQCy.webp 750w, /_astro/13.BvnggM3v_YggHm.webp 828w, /_astro/13.BvnggM3v_9EEW8.webp 1080w, /_astro/13.BvnggM3v_Z2ix1Wr.webp 1148w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、インポートが開始して完了すると、インポートを行ったタブと同じタブで、先程選択したGoogleドキュメントのファイルがインポートされたNotionのページが表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;901&quot; src=&quot;/_astro/14.Dpwww5WF_186gkQ.webp&quot; srcset=&quot;/_astro/14.Dpwww5WF_Z5AIjX.webp 640w, /_astro/14.Dpwww5WF_2nhiwQ.webp 750w, /_astro/14.Dpwww5WF_2qsqLU.webp 828w, /_astro/14.Dpwww5WF_Z1nv1Dm.webp 1080w, /_astro/14.Dpwww5WF_2dw9Ht.webp 1280w, /_astro/14.Dpwww5WF_2v07b6.webp 1668w, /_astro/14.Dpwww5WF_186gkQ.webp 1917w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Evernoteからのインポート&lt;a href=&quot;#evernoteからのインポート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Evetrnoteにあるノートのインポートの仕方について紹介します。&lt;/p&gt;&lt;p&gt;Googleドキュメントのときと同じく、サイドメニューバー内の&lt;code&gt;Setting&lt;/code&gt;をクリックして、表示されたウインドウ内でサイドバーにある&lt;code&gt;Import&lt;/code&gt;をクリックします。&lt;/p&gt;&lt;p&gt;そして、Evernoteをクリックして、自分のアカウントでログインしてNotionのアカウントと紐付けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;720&quot; src=&quot;/_astro/11.Bl20wnjB_Db90t.webp&quot; srcset=&quot;/_astro/11.Bl20wnjB_CHlhI.webp 640w, /_astro/11.Bl20wnjB_2ctow2.webp 750w, /_astro/11.Bl20wnjB_Z1mY6x6.webp 828w, /_astro/11.Bl20wnjB_yd0IQ.webp 1080w, /_astro/11.Bl20wnjB_Db90t.webp 1153w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アカウントが紐付いたら、インポートしたいEvernoteのノートブックにチェックを付けます。チェックしたのにチェックボックスにチェックが付かないことがありますが、&lt;code&gt;Import&lt;/code&gt;ボタンが活性化されていたらインポートできると思います。
&lt;img loading=&quot;lazy&quot; width=&quot;848&quot; height=&quot;433&quot; src=&quot;/_astro/16.Ckidr6AR_Z1NqcrF.webp&quot; srcset=&quot;/_astro/16.Ckidr6AR_Zdsjw6.webp 640w, /_astro/16.Ckidr6AR_1Uf5yB.webp 750w, /_astro/16.Ckidr6AR_Z1iwWJf.webp 828w, /_astro/16.Ckidr6AR_Z1NqcrF.webp 848w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、インポートが開始されます。インポートに掛かる時間は、ノートブックの規模によります。&lt;/p&gt;&lt;p&gt;そして、インポートが終わると、インポートを実行したタブと同じタブの中で、新規に作成されたNotionのノートが表示されます。ノートの名前は、先程インポート元として設定したEvernoteのノートブックと同じですね。&lt;/p&gt;&lt;p&gt;EvernoteのノートがNotionのページになったものがデータベース形式で表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1913&quot; height=&quot;893&quot; src=&quot;/_astro/17.7blKDioN_Z1izo4V.webp&quot; srcset=&quot;/_astro/17.7blKDioN_NCMBJ.webp 640w, /_astro/17.7blKDioN_ZA3Pnm.webp 750w, /_astro/17.7blKDioN_Z16TcIp.webp 828w, /_astro/17.7blKDioN_wu9pB.webp 1080w, /_astro/17.7blKDioN_Zd9nSH.webp 1280w, /_astro/17.7blKDioN_ZCIVOy.webp 1668w, /_astro/17.7blKDioN_Z1izo4V.webp 1913w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、一つのEvernoteのスタックの中で複数のノートブックをチェックした状態でインポートすると、スタック名が新規Notionノートの名前となり、インポート元Evernoteノートブックの名前が付いたページの中に、EvernoteのノートがNotionのページになったものがデータベース形式で表示されます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;これから魚拓していく方法を考える。&lt;a href=&quot;#これから魚拓していく方法を考える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これからNotionで画像を含むWeb記事をバックアップする手順を構築していこうと考えていますが、こんな感じでしょうか。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;PC版Chromeでサイトを開く。&lt;/li&gt;
&lt;li&gt;コピーして、Googleドキュメントで新規ファイルを作って、Google Docsに貼り付ける。&lt;/li&gt;
&lt;li&gt;コピーして、Notionにインポートする。&lt;/li&gt;
&lt;li&gt;Googleドキュメントのファイルを削除。&lt;/li&gt;
&lt;li&gt;インポートしたNotionの一時ページを削除。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Evernoteの方が一気にインポートできて便利そうですが、Evernoteは（僕からすると悪化の一途を辿っているので、）ちょっと使いたくないので、Googleドキュメントを使おうと思います。そんなに一気に魚拓を取りたい時も発生しないと思いますし。&lt;/p&gt;&lt;p&gt;・・・コピペで画像をそのまま持ってこれる仕様にすれば、ものスゴク有用なツールになるのに・・・。まあでも、そうしないのは、おそらくサーバへの負荷を下げたいからとかあるのでしょう。「Plus」以上のプランに課金したら出来るようになるのかな？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事は、Notionに画像を貼り付けたりインポートする時の注意点に関する記事でした。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;GoogleドキュメントからクリップボードにコピペしてNotionに貼り付けた画像は、Notionの中にはいない。「画像へのリンク」が貼り付いている状態になってしまう。&lt;/li&gt;
&lt;li&gt;Notionに「画像へのリンク」を貼り付けると、コピー元のサービス内にある画像が消えたら、Notion内でも消える。&lt;/li&gt;
&lt;li&gt;Notionに「画像そのもの」を貼り付けると、「file.notion.so/~」のアドレスにある状態になり、その画像は自分が消さない限り消えない。&lt;/li&gt;
&lt;li&gt;Notion Web Clipperでは、「画像へのリンク」が貼り付けられる。&lt;/li&gt;
&lt;li&gt;import機能を使うと、「画像そのもの」が貼り付けられる。&lt;/li&gt;
&lt;li&gt;Googleドキュメントからは、1ファイルずつしかインポートできない。（2024-11-14時点）&lt;/li&gt;
&lt;li&gt;Evernoteからは、一気に複数ファイルをインポートできる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回の大事件が起きて、ここ数年で味わわなかったレベルの喪失感と怒りに苛まれました。&lt;/p&gt;&lt;p&gt;Notionはどうせこの仕様のまま動いていくと思いますので、その仕様のおかげで悲劇に巻き込まれないようにお気を付け下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;半分ぐらいは戻せたか・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Evernoteの遺産が役に立ったな～～&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Vertex AI】エクスポートしたNotionのページでRAGさせるかノーコードで。</title><link>https://endorphinbath.com/posts/vertexai-notion-exported-page-rag/</link><guid isPermaLink="true">https://endorphinbath.com/posts/vertexai-notion-exported-page-rag/</guid><description>Notionからエクスポートしたファイルを使って、Vertex AI Agent BuilderでRAGを実装する方法を紹介します。自分が持っているデータで独自に検索できてしまいます。</description><pubDate>Fri, 08 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そろそろRAGが出来るんじゃないのぉ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そろそろRAGをしていくか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAG出来るかどうか試してみよう&lt;a href=&quot;#rag出来るかどうか試してみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この前、Google CloudのVertex AI APIを試したので、今度はAPIを使わないでやってみようと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-vertexai-generate-permalink/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Vertex AI APIでブログのパーマリンクを自動生成する&lt;/div&gt;&lt;div&gt;Google CloudのVertex AIのGemini APIで、ブログ記事のパーマリンクをを作成していく流れを紹介する記事です。Google Apps Scriptで処理していきます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241106_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで・・・、今回は生成AIにRAGをさせていきたいと思います。データセットは、自分が今まで書き溜めてきたNotionのページ達です。それらのデータを使って、簡単にアプリを作ってみます。&lt;/p&gt;&lt;p&gt;RAGとは・・・「Retrieval Augmented Generation」の略で、どっかに蓄積された大量の業務文書・規定などの社内情報、外部の最新情報などに基づいて大規模言語モデル（LLM）に回答させる方法のことです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使うツール&lt;a href=&quot;#今回使うツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回使うツールは、Google Cloudの「Vertex AI Agent Builder」です。&lt;/p&gt;&lt;p&gt;RAGをさせたモデルをアプリとかに利用したい場合、以前は「Vertex AI」＞「検索と会話」から遷移できたらしいですだが、現在2024-11-12時点では、「Agent Builder」という項目から取り掛かることが出来ます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Vertex AI Search を使用すると、デベロッパーはウェブサイト、イントラネット、RAG システムを対象とした、生成 AI エージェントとアプリ向けの安全で Google 品質の検索エクスペリエンスを構築できます。Vertex AI Search は Vertex AI Agent Builder に統合されています。&lt;/p&gt;&lt;/blockquote&gt;&lt;a href=&quot;https://cloud.google.com/products/gemini-enterprise-agent-platform/agent-search&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Gemini Enterprise Agent Platform 上の Agent Search | Google Cloud&lt;/div&gt;&lt;div&gt;ウェブサイトや社内データ用のカスタム検索エンジンを迅速に構築する方法や、RAG を使用して企業データに AI アプリケーションをグラウンディングする方法をご紹介します。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAGをさせる直前まで。&lt;a href=&quot;#ragをさせる直前まで&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;アプリの構成を設定する。&lt;a href=&quot;#アプリの構成を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Agent Builder」の項目をクリックすると、こんな画面が表示されるので、とりあえず同意しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;905&quot; src=&quot;/_astro/03.DnW_ayvH_Z2bysxa.webp&quot; srcset=&quot;/_astro/03.DnW_ayvH_Z16apzV.webp 640w, /_astro/03.DnW_ayvH_1mHBgS.webp 750w, /_astro/03.DnW_ayvH_Z12eYQH.webp 828w, /_astro/03.DnW_ayvH_Z2bowA3.webp 1080w, /_astro/03.DnW_ayvH_Z164ynE.webp 1280w, /_astro/03.DnW_ayvH_1Iqq09.webp 1668w, /_astro/03.DnW_ayvH_Z2bysxa.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クリックするとアプリの作成画面らしきものが表示されました。進めていきます。
アプリの種類は「検索」を選びます。
&lt;img loading=&quot;lazy&quot; width=&quot;1615&quot; height=&quot;906&quot; src=&quot;/_astro/04.CS-SMD4B_2p0NuW.webp&quot; srcset=&quot;/_astro/04.CS-SMD4B_2LCYm.webp 640w, /_astro/04.CS-SMD4B_B5wjk.webp 750w, /_astro/04.CS-SMD4B_ZIPr98.webp 828w, /_astro/04.CS-SMD4B_20CPtr.webp 1080w, /_astro/04.CS-SMD4B_Z23cLqj.webp 1280w, /_astro/04.CS-SMD4B_2p0NuW.webp 1615w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アプリの構成を設定します。&lt;/p&gt;&lt;p&gt;「内容」は汎用にしておきます。そして、「Enterpriseエディションの機能」をアクティブにすると、追加料金が発生しますが、RAGのデータセットに加えて、Web検索や画像検索も併用されるみたいです。まあ、多少なりとも学習してあるAIモデルを使うと思うので、今回は非アクティブにします。「高度なLLM機能」はアクティブにしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11.C0xFuRK2_Z23lX54.webp&quot; srcset=&quot;/_astro/11.C0xFuRK2_Bqyfu.webp 640w, /_astro/11.C0xFuRK2_Z1K4yKE.webp 750w, /_astro/11.C0xFuRK2_ZV7Ape.webp 828w, /_astro/11.C0xFuRK2_Z2mJ8el.webp 1080w, /_astro/11.C0xFuRK2_Z1nyDhL.webp 1280w, /_astro/11.C0xFuRK2_iKNkn.webp 1668w, /_astro/11.C0xFuRK2_Z23lX54.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アプリ名と会社名は適当に記入しておきます。ロケーションはマルチリージョン。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/12.CUW0ci5e_Z1uqpLs.webp&quot; srcset=&quot;/_astro/12.CUW0ci5e_Z1OyxRk.webp 640w, /_astro/12.CUW0ci5e_S7rUs.webp 750w, /_astro/12.CUW0ci5e_1H4qgS.webp 828w, /_astro/12.CUW0ci5e_Z1NNzUJ.webp 1080w, /_astro/12.CUW0ci5e_ZOD5Ya.webp 1280w, /_astro/12.CUW0ci5e_QGlCY.webp 1668w, /_astro/12.CUW0ci5e_Z1uqpLs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして次の画面は、「データストア」です・・・。
データを入れなければなりませんね。Notionからページをエクスポートします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13.BAFSWpW7_Z24PHSs.webp&quot; srcset=&quot;/_astro/13.BAFSWpW7_hmPRX.webp 640w, /_astro/13.BAFSWpW7_Z258h8b.webp 750w, /_astro/13.BAFSWpW7_Z1gbiLK.webp 828w, /_astro/13.BAFSWpW7_Z2odS2J.webp 1080w, /_astro/13.BAFSWpW7_Z1p3o6a.webp 1280w, /_astro/13.BAFSWpW7_hh3vY.webp 1668w, /_astro/13.BAFSWpW7_Z24PHSs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;データストアを作る。&lt;a href=&quot;#データストアを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notionからエクスポートしてきたので、これらのページを今回のテスト用に格納していきたいと思います。&lt;/p&gt;&lt;p&gt;ページのタイトルは以下の4つです。いずれもMarkdown形式です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;夫が死んだら妻は義父母を養う義務はあるか｜家計・貯金&lt;/li&gt;
&lt;li&gt;本をプラスチックの箱の中にしまう&lt;/li&gt;
&lt;li&gt;旅行先の持ち物チェックリスト&lt;/li&gt;
&lt;li&gt;Unreal EngineとVerseの学習&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;826&quot; height=&quot;396&quot; src=&quot;/_astro/16.Dd-5mXWG_Z1ksXMp.webp&quot; srcset=&quot;/_astro/16.Dd-5mXWG_1V9LMt.webp 640w, /_astro/16.Dd-5mXWG_Z1qWmmF.webp 750w, /_astro/16.Dd-5mXWG_Z1ksXMp.webp 826w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは、Agent Builderで「データストアを作成」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/17.CSaguSNm_Z1bw6Hh.webp&quot; srcset=&quot;/_astro/17.CSaguSNm_2hS5Cc.webp 640w, /_astro/17.CSaguSNm_Zjq1jU.webp 750w, /_astro/17.CSaguSNm_2lNvlq.webp 828w, /_astro/17.CSaguSNm_1koqHk.webp 1080w, /_astro/17.CSaguSNm_Z7qGY2.webp 1280w, /_astro/17.CSaguSNm_Z2ozK9t.webp 1668w, /_astro/17.CSaguSNm_Z1bw6Hh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Googleの色々なデータソースからデータストアを作成できるみたいですね。2024-11-12時点で確認できるものを挙げていきます。13種類あります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;BigQuery&lt;/li&gt;
&lt;li&gt;Cloud Storage&lt;/li&gt;
&lt;li&gt;APIからのインポート&lt;/li&gt;
&lt;li&gt;Cloud SQL&lt;/li&gt;
&lt;li&gt;Spanner&lt;/li&gt;
&lt;li&gt;Bigtable&lt;/li&gt;
&lt;li&gt;Firestore&lt;/li&gt;
&lt;li&gt;AlloyDB&lt;/li&gt;
&lt;li&gt;Googleドライブ&lt;/li&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Googleサイト&lt;/li&gt;
&lt;li&gt;Googleカレンダー&lt;/li&gt;
&lt;li&gt;Googleグループ&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/18.Dw07GONv_Z24lARI.webp&quot; srcset=&quot;/_astro/18.Dw07GONv_1L7YQH.webp 640w, /_astro/18.Dw07GONv_ZPb75p.webp 750w, /_astro/18.Dw07GONv_1P3pzV.webp 828w, /_astro/18.Dw07GONv_ryVwS.webp 1080w, /_astro/18.Dw07GONv_Z10gc9t.webp 1280w, /_astro/18.Dw07GONv_1MLSu1.webp 1668w, /_astro/18.Dw07GONv_Z24lARI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回は、Cloud Storageからインポートしていきます。&lt;/p&gt;&lt;p&gt;Markdownを読み取るので「非構造化ドキュメント」にして、「1回限り」で読み取らせます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/19.2-PefLGC_ZUMqQr.webp&quot; srcset=&quot;/_astro/19.2-PefLGC_Z1WL8jI.webp 640w, /_astro/19.2-PefLGC_v6Sx6.webp 750w, /_astro/19.2-PefLGC_Z1SPHAu.webp 828w, /_astro/19.2-PefLGC_1A86ya.webp 1080w, /_astro/19.2-PefLGC_8hWQN.webp 1280w, /_astro/19.2-PefLGC_Z28Q5iD.webp 1668w, /_astro/19.2-PefLGC_ZUMqQr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Cloud Storageに今回用のバケットも作成します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/20.D7ag0hV8_ZL01Fp.webp&quot; srcset=&quot;/_astro/20.D7ag0hV8_Z2hsDyo.webp 640w, /_astro/20.D7ag0hV8_bpniq.webp 750w, /_astro/20.D7ag0hV8_Z2dxdPa.webp 828w, /_astro/20.D7ag0hV8_1JUvJc.webp 1080w, /_astro/20.D7ag0hV8_i5n2P.webp 1280w, /_astro/20.D7ag0hV8_Z1Y3F7B.webp 1668w, /_astro/20.D7ag0hV8_ZL01Fp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;フォルダを適当に作成して、今回使うMarkdownファイル4つを格納します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/21.CCEqX9p8_Z15pacg.webp&quot; srcset=&quot;/_astro/21.CCEqX9p8_2s5vn6.webp 640w, /_astro/21.CCEqX9p8_Z9dAz1.webp 750w, /_astro/21.CCEqX9p8_2w0V6k.webp 828w, /_astro/21.CCEqX9p8_1qvndl.webp 1080w, /_astro/21.CCEqX9p8_Z1jKt1.webp 1280w, /_astro/21.CCEqX9p8_Z2isNDs.webp 1668w, /_astro/21.CCEqX9p8_Z15pacg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「データストアの構成」を設定していきます。&lt;/p&gt;&lt;p&gt;データストア名を適当に入力して、ドキュメントの解析には「Digital Parser」を選択します。「OCR Parser」や「Layout Parser」というものもありますが、おそらく画像データに対して使用するんだと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/22.BAVxEuWp_RSknJ.webp&quot; srcset=&quot;/_astro/22.BAVxEuWp_Z1pb9RK.webp 640w, /_astro/22.BAVxEuWp_13GQY4.webp 750w, /_astro/22.BAVxEuWp_Z1lfJ9w.webp 828w, /_astro/22.BAVxEuWp_Z1Fng0A.webp 1080w, /_astro/22.BAVxEuWp_1VXJ6Y.webp 1280w, /_astro/22.BAVxEuWp_Zkaj3s.webp 1668w, /_astro/22.BAVxEuWp_RSknJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データストアが作成できたら、アプリを作成します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/23.Be9qMnnl_1h15fb.webp&quot; srcset=&quot;/_astro/23.Be9qMnnl_SFMHi.webp 640w, /_astro/23.Be9qMnnl_Z1HCjeO.webp 750w, /_astro/23.Be9qMnnl_WBdqw.webp 828w, /_astro/23.Be9qMnnl_Z1hfv99.webp 1080w, /_astro/23.Be9qMnnl_2l6tXq.webp 1280w, /_astro/23.Be9qMnnl_3WqMY.webp 1668w, /_astro/23.Be9qMnnl_1h15fb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アプリが正常に作成されて、作成したアプリの「アクティビティ」を確認すると、「インポートしています」と表示されているので少し待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/24.DQi_P5bQ_1vaDLq.webp&quot; srcset=&quot;/_astro/24.DQi_P5bQ_Z2wYyQs.webp 640w, /_astro/24.DQi_P5bQ_Z46wYD.webp 750w, /_astro/24.DQi_P5bQ_Z2t498e.webp 828w, /_astro/24.DQi_P5bQ_Z135VBT.webp 1080w, /_astro/24.DQi_P5bQ_Z2uV5jg.webp 1280w, /_astro/24.DQi_P5bQ_i70ke.webp 1668w, /_astro/24.DQi_P5bQ_1vaDLq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;10分ぐらい待っていると終わっていましたが、何か問題ありのようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;619&quot; src=&quot;/_astro/25.DbKhGi2j_Z15Bifp.webp&quot; srcset=&quot;/_astro/25.DbKhGi2j_ZH9lo1.webp 640w, /_astro/25.DbKhGi2j_Z1QTWPo.webp 750w, /_astro/25.DbKhGi2j_Z19O2sG.webp 828w, /_astro/25.DbKhGi2j_Z15Bifp.webp 1045w&quot; /&gt;&lt;/p&gt;&lt;p&gt;エラー内容を確認すると、「File extension type is md, and it is not supported. Currently supported extensions are pdf, html, docx, pptx and txt.」と表示されていました・・・。あれっ、Markdownダメなのかよ・・・。&lt;/p&gt;&lt;p&gt;なので、Cloud Storageに全く同じ内容のtxtファイルを格納し直します。txtファイルの種類は「text/plain」、そしてmdファイルの種類は「application/octet-stream」でした。おそらく、MarkdownはRawデータとして扱えないんでしょうね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/26.DdELpEJq_mhiex.webp&quot; srcset=&quot;/_astro/26.DdELpEJq_2kVDRP.webp 640w, /_astro/26.DdELpEJq_Zgms4h.webp 750w, /_astro/26.DdELpEJq_2oR4B4.webp 828w, /_astro/26.DdELpEJq_Z2bYi9M.webp 1080w, /_astro/26.DdELpEJq_1qmGWM.webp 1280w, /_astro/26.DdELpEJq_ZPLlcE.webp 1668w, /_astro/26.DdELpEJq_mhiex.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら再び「データをインポート」していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/27.BMmP2uSc_Z23L3HJ.webp&quot; srcset=&quot;/_astro/27.BMmP2uSc_Z1uXG8H.webp 640w, /_astro/27.BMmP2uSc_WTkI7.webp 750w, /_astro/27.BMmP2uSc_Z1r3gpt.webp 828w, /_astro/27.BMmP2uSc_s9tGR.webp 1080w, /_astro/27.BMmP2uSc_ZYFDYu.webp 1280w, /_astro/27.BMmP2uSc_1NmqE0.webp 1668w, /_astro/27.BMmP2uSc_Z23L3HJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データソースの場所を選んで、「非構造化ドキュメント」としてインポートします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/28.B02va0bZ_Z1J0JhY.webp&quot; srcset=&quot;/_astro/28.B02va0bZ_1LM1yb.webp 640w, /_astro/28.B02va0bZ_ZOw5nV.webp 750w, /_astro/28.B02va0bZ_1PHrhp.webp 828w, /_astro/28.B02va0bZ_LTN7C.webp 1080w, /_astro/28.B02va0bZ_ZEUkyJ.webp 1280w, /_astro/28.B02va0bZ_287K4K.webp 1668w, /_astro/28.B02va0bZ_Z1J0JhY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インポートが始まりました。また待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/29.ByX6ITCc_ravSI.webp&quot; srcset=&quot;/_astro/29.ByX6ITCc_2v6EB4.webp 640w, /_astro/29.ByX6ITCc_Z6crl3.webp 750w, /_astro/29.ByX6ITCc_Z2va3tD.webp 828w, /_astro/29.ByX6ITCc_Z2764uB.webp 1080w, /_astro/29.ByX6ITCc_1vfUBX.webp 1280w, /_astro/29.ByX6ITCc_ZKS7xt.webp 1668w, /_astro/29.ByX6ITCc_ravSI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAGが終わってアプリを使ってみる。&lt;a href=&quot;#ragが終わってアプリを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;データストアのインポートが終わったみたいです。それではサイドバーの「プレビュー」から実際にアプリを使ってみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/31.B2GieV7w_VAh79.webp&quot; srcset=&quot;/_astro/31.B2GieV7w_Z60J5Y.webp 640w, /_astro/31.B2GieV7w_2mRhKP.webp 750w, /_astro/31.B2GieV7w_Z25jmK.webp 828w, /_astro/31.B2GieV7w_Z1BFjhb.webp 1080w, /_astro/31.B2GieV7w_20FFPo.webp 1280w, /_astro/31.B2GieV7w_Zgsmk3.webp 1668w, /_astro/31.B2GieV7w_VAh79.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;メタデータに関する質問に答えてもらう。&lt;a href=&quot;#メタデータに関する質問に答えてもらう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは最初の質問です。「本をプラスチックの箱の中にしまうのは、完了しましたか？」
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/32.CxmP8zSW_R56D5.webp&quot; srcset=&quot;/_astro/32.CxmP8zSW_HRkUe.webp 640w, /_astro/32.CxmP8zSW_Z1SqL1S.webp 750w, /_astro/32.CxmP8zSW_LMKDs.webp 828w, /_astro/32.CxmP8zSW_Z1GbtKf.webp 1080w, /_astro/32.CxmP8zSW_1Vavmk.webp 1280w, /_astro/32.CxmP8zSW_ZkXwN7.webp 1668w, /_astro/32.CxmP8zSW_R56D5.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出来てる・・・！！
メタデータから完了した日付や、そのページに紐付いているタグまで教えてくれましたね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/33.Cl2vUcVn_22fDdp.webp&quot; srcset=&quot;/_astro/33.Cl2vUcVn_68Olp.webp 640w, /_astro/33.Cl2vUcVn_Z2vahAH.webp 750w, /_astro/33.Cl2vUcVn_a4f4D.webp 828w, /_astro/33.Cl2vUcVn_Zw0WaU.webp 1080w, /_astro/33.Cl2vUcVn_Z1XQ5Rh.webp 1280w, /_astro/33.Cl2vUcVn_ObYLd.webp 1668w, /_astro/33.Cl2vUcVn_22fDdp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは次の質問です。「Unreal EngineとVerseの学習は、完了しましたか？」
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/34.CHrPq0o1_Z1ErwlX.webp&quot; srcset=&quot;/_astro/34.CHrPq0o1_2gWaGO.webp 640w, /_astro/34.CHrPq0o1_ZklVfi.webp 750w, /_astro/34.CHrPq0o1_2kRAq3.webp 828w, /_astro/34.CHrPq0o1_Qt13D.webp 1080w, /_astro/34.CHrPq0o1_ZAm7CI.webp 1280w, /_astro/34.CHrPq0o1_2cFX0L.webp 1668w, /_astro/34.CHrPq0o1_Z1ErwlX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出来てる・・・！！
完了したかどうかに加えて、txtファイルの中に書いてある内容も、要約して簡単に教えてくれました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/35.DeAUIkAj_2tsI4M.webp&quot; srcset=&quot;/_astro/35.DeAUIkAj_ZH0zwb.webp 640w, /_astro/35.DeAUIkAj_1KRrkD.webp 750w, /_astro/35.DeAUIkAj_ZD59MW.webp 828w, /_astro/35.DeAUIkAj_Z4MRjx.webp 1080w, /_astro/35.DeAUIkAj_Z1wD10T.webp 1280w, /_astro/35.DeAUIkAj_1gp4CA.webp 1668w, /_astro/35.DeAUIkAj_2tsI4M.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;肝心の僕はいつ学習を始めるのやら・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/36.C_0RMlpV_Axkw8.webp&quot; srcset=&quot;/_astro/36.C_0RMlpV_Z2eLfej.webp 640w, /_astro/36.C_0RMlpV_e6LCv.webp 750w, /_astro/36.C_0RMlpV_Z2aPOv5.webp 828w, /_astro/36.C_0RMlpV_Z1WIfRc.webp 1080w, /_astro/36.C_0RMlpV_1ECJfn.webp 1280w, /_astro/36.C_0RMlpV_ZBviU4.webp 1668w, /_astro/36.C_0RMlpV_Axkw8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;もう少しフランクに質問して、雑多な内容を答えてもらう。&lt;a href=&quot;#もう少しフランクに質問して雑多な内容を答えてもらう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次の質問です。「今度の旅行に何を持っていけばいいでしょうか？」
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/37.Bqtup501_ZFTbig.webp&quot; srcset=&quot;/_astro/37.Bqtup501_LQE4.webp 640w, /_astro/37.Bqtup501_2tESvS.webp 750w, /_astro/37.Bqtup501_4Hhni.webp 828w, /_astro/37.Bqtup501_1P1m7l.webp 1080w, /_astro/37.Bqtup501_nbdpY.webp 1280w, /_astro/37.Bqtup501_Z1SWOJs.webp 1668w, /_astro/37.Bqtup501_ZFTbig.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれっ・・・。
AIから提示されたソースを開くと・・・、文字化けしてる・・・？
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/38.DL55zqSe_Z1ciyi0.webp&quot; srcset=&quot;/_astro/38.DL55zqSe_Z1XiC4P.webp 640w, /_astro/38.DL55zqSe_uzoLY.webp 750w, /_astro/38.DL55zqSe_Z1TnclB.webp 828w, /_astro/38.DL55zqSe_1jBY7B.webp 1080w, /_astro/38.DL55zqSe_Z8d9yK.webp 1280w, /_astro/38.DL55zqSe_Z2pmcJc.webp 1668w, /_astro/38.DL55zqSe_Z1ciyi0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;違う質問をしてみます。「旅行にパジャマは必要ですか？」と尋ねてみると、どうやらパジャマがチェックリストに入っていることは把握しているので、文字化けでインポート出来ていなかったわけではないみたいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/39.DsLnONzH_Z1lrQnX.webp&quot; srcset=&quot;/_astro/39.DsLnONzH_XvptR.webp 640w, /_astro/39.DsLnONzH_Z1CMGsf.webp 750w, /_astro/39.DsLnONzH_12qPd6.webp 828w, /_astro/39.DsLnONzH_1asG1D.webp 1080w, /_astro/39.DsLnONzH_ZhmrEI.webp 1280w, /_astro/39.DsLnONzH_2vFCXL.webp 1668w, /_astro/39.DsLnONzH_Z1lrQnX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「旅行先の持ち物チェックリストの内容を見せて。」と尋ねてみると、見せてくれませんでした・・・。
まあ、ソースを見れば確認できるからまあ良しとしますか。（メモ帳ではそのtxtファイルを確認できました。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/40.ItYdfzzR_ZKh3EL.webp&quot; srcset=&quot;/_astro/40.ItYdfzzR_1NHynB.webp 640w, /_astro/40.ItYdfzzR_ZMAxyv.webp 750w, /_astro/40.ItYdfzzR_1RCY6P.webp 828w, /_astro/40.ItYdfzzR_1KDtJP.webp 1080w, /_astro/40.ItYdfzzR_iNl3t.webp 1280w, /_astro/40.ItYdfzzR_Z1XkH6X.webp 1668w, /_astro/40.ItYdfzzR_ZKh3EL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「荷物チェックリストの優先順位は？」と尋ねてみました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/41.8H-w0Jax_1MjfjF.webp&quot; srcset=&quot;/_astro/41.8H-w0Jax_Z2mqru6.webp 640w, /_astro/41.8H-w0Jax_6rzmI.webp 750w, /_astro/41.8H-w0Jax_Z2iv1KR.webp 828w, /_astro/41.8H-w0Jax_ZKWl4E.webp 1080w, /_astro/41.8H-w0Jax_Z2dMtL1.webp 1280w, /_astro/41.8H-w0Jax_zfARt.webp 1668w, /_astro/41.8H-w0Jax_1MjfjF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・。&lt;/p&gt;&lt;p&gt;なんか進次郎構文みたいになった・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;どれぐらいしっかり答えてくるのかを見てみる。&lt;a href=&quot;#どれぐらいしっかり答えてくるのかを見てみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは最後に、「夫が死んだら妻は義父母を養う義務はありますか？」と尋ねます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/42.d0MvxeRL_25IKy0.webp&quot; srcset=&quot;/_astro/42.d0MvxeRL_Z12M4wu.webp 640w, /_astro/42.d0MvxeRL_1q5Wkk.webp 750w, /_astro/42.d0MvxeRL_ZXQDNg.webp 828w, /_astro/42.d0MvxeRL_ZswOPk.webp 1080w, /_astro/42.d0MvxeRL_Z1UmXwG.webp 1280w, /_astro/42.d0MvxeRL_RF76N.webp 1668w, /_astro/42.d0MvxeRL_25IKy0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ほぉ～、よくできてるなぁ～。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/43.Cr94HpeS_2liiMr.webp&quot; srcset=&quot;/_astro/43.Cr94HpeS_ZRh3aJ.webp 640w, /_astro/43.Cr94HpeS_1AAXG5.webp 750w, /_astro/43.Cr94HpeS_ZNlCrv.webp 828w, /_astro/43.Cr94HpeS_ZcXhAS.webp 1080w, /_astro/43.Cr94HpeS_Z1ENqif.webp 1280w, /_astro/43.Cr94HpeS_18eElf.webp 1668w, /_astro/43.Cr94HpeS_2liiMr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、『その「姻族関係終了届」に関する情報をいつ作成されましたか？』と尋ねます。&lt;/p&gt;&lt;p&gt;うーん、ソースのテキストファイルに書いてあるタグから情報を取得できないかどうかを試しましたが、文章で書いてないと厳しそうですね。なるほど、データの作り方の参考になりますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/44.CIvYLuN4_mHvW7.webp&quot; srcset=&quot;/_astro/44.CIvYLuN4_ZB9xEE.webp 640w, /_astro/44.CIvYLuN4_1QItca.webp 750w, /_astro/44.CIvYLuN4_Zxe7Vq.webp 828w, /_astro/44.CIvYLuN4_Z2by4rd.webp 1080w, /_astro/44.CIvYLuN4_1qMUFm.webp 1280w, /_astro/44.CIvYLuN4_ZPl7u5.webp 1668w, /_astro/44.CIvYLuN4_mHvW7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Notionからエクスポートしたファイルを使って、Vertex AI Agent BuilderでRAGを実装する方法を紹介しました。ちなみに今回作ったアプリは、アプリの設定を閲覧している画面内のサイドバーで「統合」に遷移すると、ウィジェットとして埋め込むことまで可能なようです。つまり、今回のような検索ツールを自分のブログに埋め込んだり出来るということですね。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Agent Builderのデータソースには、Cloud StorageやGoogleドライブなどの様々なGoogleサービスを選択できる。&lt;/li&gt;
&lt;li&gt;ファイルがMarkdown形式だとAgent BuilderでRAG出来ないので、txt形式にした。&lt;/li&gt;
&lt;li&gt;リスト形式の列挙は苦手なようだ。&lt;/li&gt;
&lt;li&gt;ある情報と、その情報が記述されているファイル内に書いてあるメタデータは、関連付けされない。（これらの情報が、同じ段落内で文章として記述されていれば関連付けられる？）&lt;/li&gt;
&lt;li&gt;非構造化ドキュメントでRAGをする際には、情報は文章として記述されている必要がありそう。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回、自分が今まで書き溜めてきたNotionにおける情報が、AIによって学習されて実際に返答できるようになって、とても興奮しました。これから更に自分が使いやすい情報になるように、メモの仕方を工夫していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;意外と簡単にちゃんと動いたな～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回コード書いてないぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Vertex AI APIでブログのパーマリンクを自動生成する</title><link>https://endorphinbath.com/posts/gas-vertexai-generate-permalink/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-vertexai-generate-permalink/</guid><description>Google CloudのVertex AIのGemini APIで、ブログ記事のパーマリンクをを作成していく流れを紹介する記事です。Google Apps Scriptで処理していきます。</description><pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そろそろパーマリンクを作るのが面倒になってきた！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあ自動で作るか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ブログ記事のパーマリンクを自動で作ってくれい&lt;a href=&quot;#ブログ記事のパーマリンクを自動で作ってくれい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ブログ記事のURLは、ドメインの後に「パーマリンク」という、その記事のページの住所の中の部屋番号的なものを割り当てる必要があります。そして、これは一意にユニークなものでなければなりません。
そのパーマリンクを作るために、重複チェック機能は作ったのですが、そろそろ記事の量も増えてきたので、生成AIくんに適当に作ってもらいたいものです。&lt;/p&gt;&lt;p&gt;そこで今回は、Google Apps Script（GAS）で、Gemini APIのVertex AIを使って、パーマリンク作成ツールを作っていきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/products/gemini-enterprise-agent-platform&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Gemini Enterprise Agent Platform（旧称 Vertex AI）&lt;/div&gt;&lt;div&gt;Gemini Enterprise Agent Platform（旧称 Vertex AI）は、デベロッパーがエージェントを構築、スケール、管理、最適化するための包括的なプラットフォームです。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Vertex AIについて簡単に紹介します&lt;a href=&quot;#vertex-aiについて簡単に紹介します&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloudで利用できる「Vertex AI」は、以前に紹介した「Google AI Studio」と同じく、Googleが開発している生成AIである「Gemini」をベースとした生成AIを利用できるサービスです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/how-to-use-google-ai-studio/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google AI Studioの使い方。Geminiと比較してみた。&lt;/div&gt;&lt;div&gt;Google AI Studioで利用できるAIモデルおよびプロンプトの過程を紹介しています。Geminiプラットフォームとの比較、APIキー経由でGASを使ってプロンプトしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241020_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;なぜ今回、Google AI Studioではなく、Vertex AIを使うのかと言うと、以下の理由からになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Vertex AIで学習させた内容は、Geminiの学習データに利用されないから。&lt;/li&gt;
&lt;li&gt;Vertex AIで料金が嵩む規模感を把握するため。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Vertex AIで学習させた内容は、Geminiの学習データに利用されません。つまり、Google AI Studioで学習させた内容は、Geminiに学習されてしまいます。なので今回から、少し自分のデータを学習に利用されないようなツールを作り始めたくなったわけです。&lt;/p&gt;&lt;p&gt;そして、Vertex AIはGeminiの学習に利用されない反面、Google AI Studioのように無料で利用することは出来ません。そしてその料金体系を確認してはみたのですが・・・&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/products/gemini-enterprise-agent-platform&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Gemini Enterprise Agent Platform (formerly Vertex AI)&lt;/div&gt;&lt;div&gt;Gemini Enterprise Agent Platform (formerly Vertex AI) is a comprehensive platform for developers to build, scale, govern and optimize agents.&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;うーん、いまいち分からん・・・！！
なので、今回Vertex AIを使ってみることで、どれぐらいの規模感でGeminiを使用すると料金が嵩んでいくのかを身を以て体験していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Vertex AIへのリクエスト&lt;a href=&quot;#vertex-aiへのリクエスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Vertex AIにリクエストして、ちゃんとしたレスポンスを受け取れるようにしましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Vertex AI関連のAPIを有効にする。&lt;a href=&quot;#vertex-ai関連のapiを有効にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Cloudのコンソールを開いて、Vertex AIの「すべての推奨APIを有効化」します。
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;898&quot; src=&quot;/_astro/01.BpDl_bfm_ZuxJbB.webp&quot; srcset=&quot;/_astro/01.BpDl_bfm_jKSk8.webp 640w, /_astro/01.BpDl_bfm_Z2hxdBY.webp 750w, /_astro/01.BpDl_bfm_Z2em5mU.webp 828w, /_astro/01.BpDl_bfm_1kzO5O.webp 1080w, /_astro/01.BpDl_bfm_Z8z8mh.webp 1280w, /_astro/01.BpDl_bfm_8SO6l.webp 1668w, /_astro/01.BpDl_bfm_ZuxJbB.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;はい、有効化しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1147&quot; height=&quot;488&quot; src=&quot;/_astro/06.DoU3KZVN_ioTIq.webp&quot; srcset=&quot;/_astro/06.DoU3KZVN_ZS427K.webp 640w, /_astro/06.DoU3KZVN_Z1iCjYf.webp 750w, /_astro/06.DoU3KZVN_Z1ptUKn.webp 828w, /_astro/06.DoU3KZVN_ZvMk4i.webp 1080w, /_astro/06.DoU3KZVN_ioTIq.webp 1147w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おおっ、
&lt;img loading=&quot;lazy&quot; width=&quot;1111&quot; height=&quot;488&quot; src=&quot;/_astro/07.CHz-Lu8e_Zmhiit.webp&quot; srcset=&quot;/_astro/07.CHz-Lu8e_13PFlY.webp 640w, /_astro/07.CHz-Lu8e_4fRTn.webp 750w, /_astro/07.CHz-Lu8e_Z1bDI2Y.webp 828w, /_astro/07.CHz-Lu8e_1or0r5.webp 1080w, /_astro/07.CHz-Lu8e_Zmhiit.webp 1111w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おおっ・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1149&quot; height=&quot;491&quot; src=&quot;/_astro/08.CDlSVkkb_26HlsN.webp&quot; srcset=&quot;/_astro/08.CDlSVkkb_Z1IuoQP.webp 640w, /_astro/08.CDlSVkkb_131ci4.webp 750w, /_astro/08.CDlSVkkb_2ffkIm.webp 828w, /_astro/08.CDlSVkkb_1hmXhH.webp 1080w, /_astro/08.CDlSVkkb_26HlsN.webp 1149w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・・・・・・・、&lt;/p&gt;&lt;p&gt;・・・なんか、13個のAPIが絡んでくるみたいですね・・・。まあ、不要なものは後でオフにしておきましょう・・・。少しメモしておきます。&lt;/p&gt;&lt;p&gt;Vertex AIの「すべての推奨APIを有効化」で有効されるAPI:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Vertex AI API&lt;/li&gt;
&lt;li&gt;Cloud Storage API&lt;/li&gt;
&lt;li&gt;Dataplex API&lt;/li&gt;
&lt;li&gt;Notebooks API&lt;/li&gt;
&lt;li&gt;Dataflow API&lt;/li&gt;
&lt;li&gt;Artifact Registry API&lt;/li&gt;
&lt;li&gt;Data Catalog API&lt;/li&gt;
&lt;li&gt;Compute Engine API&lt;/li&gt;
&lt;li&gt;Dataform API&lt;/li&gt;
&lt;li&gt;Vision AI API&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;まずはVertex AI Studioを使ってみる。&lt;a href=&quot;#まずはvertex-ai-studioを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは次に、「Vertex AI Studio」にアクセスします。なんだか「Google AI Studio」と似ていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1482&quot; height=&quot;856&quot; src=&quot;/_astro/11.Eohb2bhd_ZRnAsz.webp&quot; srcset=&quot;/_astro/11.Eohb2bhd_Z1JTAXb.webp 640w, /_astro/11.Eohb2bhd_7u1yd.webp 750w, /_astro/11.Eohb2bhd_Z1Msrum.webp 828w, /_astro/11.Eohb2bhd_Zlcw5w.webp 1080w, /_astro/11.Eohb2bhd_Z1R9c3F.webp 1280w, /_astro/11.Eohb2bhd_ZRnAsz.webp 1482w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな画面に遷移しました。なんか始められそうな気がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1907&quot; height=&quot;901&quot; src=&quot;/_astro/12.D6JGl0ZZ_1oAOTx.webp&quot; srcset=&quot;/_astro/12.D6JGl0ZZ_Z1N4ql6.webp 640w, /_astro/12.D6JGl0ZZ_ENAvI.webp 750w, /_astro/12.D6JGl0ZZ_Z1J90BR.webp 828w, /_astro/12.D6JGl0ZZ_1qCN2x.webp 1080w, /_astro/12.D6JGl0ZZ_Z1ckDO.webp 1280w, /_astro/12.D6JGl0ZZ_Z2gSu4W.webp 1668w, /_astro/12.D6JGl0ZZ_1oAOTx.webp 1907w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに進むとこんな画面が出てきました。Google AI StudioのUIと似ていますね！（いや、Vertex AI Studioの方が先発なので逆か・・・。）
それでは、「Explain how AI works.」とプロンプトしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1913&quot; height=&quot;901&quot; src=&quot;/_astro/13.CP2HaY8W_ZDtwn0.webp&quot; srcset=&quot;/_astro/13.CP2HaY8W_Z2rblMk.webp 640w, /_astro/13.CP2HaY8W_1GF4u.webp 750w, /_astro/13.CP2HaY8W_Z2nfV46.webp 828w, /_astro/13.CP2HaY8W_ZBMvFh.webp 1080w, /_astro/13.CP2HaY8W_Z25Wt8n.webp 1280w, /_astro/13.CP2HaY8W_Ixvfq.webp 1668w, /_astro/13.CP2HaY8W_ZDtwn0.webp 1913w&quot; /&gt;&lt;/p&gt;&lt;p&gt;回答を返してくれました。
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;901&quot; src=&quot;/_astro/14.Dy2O2PFd_10oNnT.webp&quot; srcset=&quot;/_astro/14.Dy2O2PFd_SbRit.webp 640w, /_astro/14.Dy2O2PFd_Z1I7eDD.webp 750w, /_astro/14.Dy2O2PFd_W7i1H.webp 828w, /_astro/14.Dy2O2PFd_Z1v0h1f.webp 1080w, /_astro/14.Dy2O2PFd_Zr8cya.webp 1280w, /_astro/14.Dy2O2PFd_Z9Ef5x.webp 1668w, /_astro/14.Dy2O2PFd_10oNnT.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Vertex AIにおけるAPIキーを取得する。&lt;a href=&quot;#vertex-aiにおけるapiキーを取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではこれと同じことをGoogle Apps Scriptから行えるようにしましょう！&lt;/p&gt;&lt;p&gt;しかし、そのためには、アクセストークンを発行しなければなりません・・・。（Google AI Studioの場合はサクッと簡単にAPIキーを発行できましたが、Google Cloudが絡んでくると少し回りくどくなります。）&lt;/p&gt;&lt;p&gt;というわけで、Google Cloudのコンソール上で、「APIとサービス」＞「認証情報」と遷移して「Vertex AI API」を使用するためのAPIキーを作成します。Vertex AI APIにだけ使えるように制限が掛かったAPIキーを作っておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1906&quot; height=&quot;896&quot; src=&quot;/_astro/15.DJQYgIeb_1Av1LC.webp&quot; srcset=&quot;/_astro/15.DJQYgIeb_17Y3Jd.webp 640w, /_astro/15.DJQYgIeb_Z1tk3cT.webp 750w, /_astro/15.DJQYgIeb_Z1q8TWP.webp 828w, /_astro/15.DJQYgIeb_UhnJG.webp 1080w, /_astro/15.DJQYgIeb_ZxRyHp.webp 1280w, /_astro/15.DJQYgIeb_ZgoBeM.webp 1668w, /_astro/15.DJQYgIeb_1Av1LC.webp 1906w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、残念でした。&lt;/p&gt;&lt;p&gt;APIリクエストしてみたところ、401エラーが返ってきて、以下のメッセージも送られてきました。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;‘Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See &lt;a href=&quot;https://developers.google.com/identity/sign-in/web/devconsole-project&quot; target=&quot;_blank&quot;&gt;https://developers.google.com/identity/sign-in/web/devconsole-project&lt;/a&gt;.’&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;OAuth2.0かぁ・・・。ちなみに、このメッセージ内にあるURLでは、HTMLの中にスクリプトを仕込んで認証する方法が紹介されていましたが、今回はGASのライブラリを使って認証しようと思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;OAuth2.0で認証する。&lt;a href=&quot;#oauth20で認証する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;APIキーで出来れば簡単でしたが、OAuth2.0でないと認証できないと言われてしまったので、やっていきます。&lt;/p&gt;&lt;p&gt;まずは、GASのスクリプトエディタ上で、新しいライブラリ「OAuth2 for Apps Script」を追加します。&lt;/p&gt;&lt;p&gt;スクリプトIDは、&lt;code&gt;1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF&lt;/code&gt;です。使い方は&lt;a href=&quot;https://github.com/googleworkspace/apps-script-oauth2&quot; target=&quot;_blank&quot;&gt;GitHubのリポジトリ&lt;/a&gt;をご参照下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;505&quot; height=&quot;304&quot; src=&quot;/_astro/21.Cu_SBaBq_ZAPDGi.webp&quot; srcset=&quot;/_astro/21.Cu_SBaBq_ZAPDGi.webp 505w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、Google Cloudのコンソール上で、APIキーを作ったときと同じく、&lt;code&gt;APIとサービス&lt;/code&gt;＞&lt;code&gt;認証情報&lt;/code&gt;と遷移して、OAuth2.0の認可サーバへ認証するためのクライアントを作ります。
&lt;code&gt;アプリケーションの種類&lt;/code&gt;では、ウェブアプリケーションを選択します。&lt;/p&gt;&lt;p&gt;リダイレクトURIは、&lt;code&gt;https://script.google.com/macros/d/スクリプトID/usercallback&lt;/code&gt;です。&lt;code&gt;https://script.google.com/macros/d/xxxxxxxxxxxxxxxxxxxxxxx/usercallback&lt;/code&gt;みたいな感じです。&lt;/p&gt;&lt;p&gt;あと、&lt;code&gt;承認済みのJavaScript生成元&lt;/code&gt;の記入は不要です。
&lt;img loading=&quot;lazy&quot; width=&quot;1905&quot; height=&quot;904&quot; src=&quot;/_astro/22.BMN2S_Pm_ZddWXI.webp&quot; srcset=&quot;/_astro/22.BMN2S_Pm_Z1rewKC.webp 640w, /_astro/22.BMN2S_Pm_11Du6c.webp 750w, /_astro/22.BMN2S_Pm_Z1nj72o.webp 828w, /_astro/22.BMN2S_Pm_Zb3Qsl.webp 1080w, /_astro/22.BMN2S_Pm_Tg6J3.webp 1280w, /_astro/22.BMN2S_Pm_1a95tM.webp 1668w, /_astro/22.BMN2S_Pm_ZddWXI.webp 1905w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたらOKします。クライアントの作成に成功すると、クライアントIDとクライアントシークレットが表示されるので、それをメモっておきます。&lt;/p&gt;&lt;p&gt;設定が済んだので、認証部分のGASを書いていきます。今回は、OAuth2.0の細かい部分は省きます。一応下記のコードでOAuth2.0認証は達成しました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logoutOauthSvcForVertexAi&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reset&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Session has reset on Vertex AI API.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModalDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Logged out from Google API&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{HtmlOutput}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackForVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authCallbackForVertexAi: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Success! You can close this tab. Redo autocreate a permalink.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Denied. You can close this tab&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{OAuth2.Service_}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VERTEX_AI_CLIENT_ID&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VERTEX_AI_CLIENT_SECRET&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getVertexAiService: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;VERTEX_AI_API&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationBaseUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/auth&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;secret&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setCallbackFunction&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;authCallbackForVertexAi&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setPropertyStore&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setScope&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/cloud-platform&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setParam&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;login_hint&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Session&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveUser&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getEmail&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{OAuth2.Service_}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;authenticateVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getAuthorizationUrl&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authenticate&amp;lt;/a&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModalDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Google API Authentication&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authenticateVertexAi: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinkWithLlm&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myScriptName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MY_SCRIPT_NAME&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_DISSEMINATING_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Create a permalink with the generative AI on Vertex AI API.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Return -1 if not duplicated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GOOGLE_CLOUD_PROJECT_ID&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-aiplatform.googleapis.com/v1/projects/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/locations/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/publishers/google/models/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:streamGenerateContent`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Bearer &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;contents&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-1.5-flash-001&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// const model = &quot;gemini-1.5-flash-002&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Explain how AI works.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;candidates&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// half-width space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`promptToGenAi: 1111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;candidates&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`promptToGenAi: 77777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authenticateVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記のコードを実行すると、認可サーバのURLがリンクされたテキストがHTMLで表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;336&quot; src=&quot;/_astro/23.CWAtiIen_1UIVRf.webp&quot; srcset=&quot;/_astro/23.CWAtiIen_1UIVRf.webp 474w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サーバがちゃんと認可できると、先程のリンクを押して表示されるページにこんな文字が表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;349&quot; src=&quot;/_astro/24.CB6mA5TU_Z1XBXaO.webp&quot; srcset=&quot;/_astro/24.CB6mA5TU_1EvNgs.webp 640w, /_astro/24.CB6mA5TU_Z2rbbPy.webp 750w, /_astro/24.CB6mA5TU_Z1XBXaO.webp 807w&quot; /&gt;&lt;/p&gt;&lt;p&gt;セッションは使わないのであれば切断する必要があります。&lt;code&gt;logoutOauthSvcForVertexAi()&lt;/code&gt;関数を別途実行することによって、クライアントをVertex AI APIが機能しているアプリからログアウトさせます。
&lt;img loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;335&quot; src=&quot;/_astro/25.DcSDlhkm_NeVI8.webp&quot; srcset=&quot;/_astro/25.DcSDlhkm_NeVI8.webp 462w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕が最も引っ掛かったのが、権限周りのスコープの設定です。&lt;/p&gt;&lt;p&gt;Vertex AI APIのOAuth2.0認証を達成するにあたって、現在2024-11-11時点では、Vertex AIの機能に絞られたスコープはまだ存在しないみたいです。そのため、以下のようにスコープを設定したら、Vertex AI APIを叩けるようになりました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;OAuth2.0クライアントのスコープに&lt;code&gt;&quot;https://www.googleapis.com/auth/cloud-platform&quot;&lt;/code&gt;を入れる。&lt;/li&gt;
&lt;li&gt;appscript.jsonの&lt;code&gt;&quot;scope&quot;&lt;/code&gt;に&lt;code&gt;&quot;https://www.googleapis.com/auth/userinfo.email&quot;&lt;/code&gt;を入れる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;一般的なOAuth2.0スコープは、このページを見ればおおよそ把握できるんですけど・・・、&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google API の OAuth 2.0 スコープ | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回使った&lt;code&gt;&quot;cloud-platform&quot;&lt;/code&gt;とかは、別のページで見つけました。まとまっていてほしい・・・。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/storage/docs/oauth-scopes?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cloud Storage OAuth 2.0 スコープ | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;OAuth2.0クライアントのスコープに&lt;code&gt;&quot;https://www.googleapis.com/auth/cloud-platform&quot;&lt;/code&gt;を入れるのは、入れないとVertex AI APIを実行することが出来ないためです。いやー、このスコープを探すのには苦労しました。ググってたまたま見つけたのは良かったんですけど、ちゃんとGoogle Cloudのコンソール上で確認することが出来るんですよね。その方法を探すのに時間が掛かってしまいました。&lt;/p&gt;&lt;p&gt;その方法は、Google Cloudのコンソール上で&lt;code&gt;Google Auth Platform&lt;/code&gt;＞&lt;code&gt;データアクセス&lt;/code&gt;の順番でクリックしていくと、権限スコープをもっと増やすかどうかを設定できる画面に移動できるので、そこに書いてあるスコープを見てOAuthに必要なスコープを確認することが出来ます。&lt;code&gt;Vertex AI API&lt;/code&gt;には&lt;code&gt;&quot;auth/cloud-platform&quot;&lt;/code&gt;のサフィックスが付くスコープが記載されていました。
&lt;img loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;356&quot; src=&quot;/_astro/31.CFeju9QF_1ga6HU.webp&quot; srcset=&quot;/_astro/31.CFeju9QF_aTu4.webp 640w, /_astro/31.CFeju9QF_Z24IQSr.webp 750w, /_astro/31.CFeju9QF_DE9HH.webp 828w, /_astro/31.CFeju9QF_1ga6HU.webp 837w&quot; /&gt;&lt;/p&gt;&lt;p&gt;本当に全然ググっても出てこなかったので、こんなページまで見つけてしまう始末。&lt;/p&gt;&lt;p&gt;このページの中にある&lt;code&gt;Vertex AI の事前定義ロール&lt;/code&gt;にある文字とかを入れておけば行けそうな気がしましたが、そうは問屋が卸さなかった・・・。しかし、おそらくこれから権限周りの開発が進んでいったら、これと似たような名前のスコープが追加されそうな気はします。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/vertex-ai/docs/general/access-control?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;IAM を使用した Vertex AI のアクセス制御 | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;IAM を使用して Vertex AI リソースへのアクセスを制御する。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GASからプロンプトを込めてリクエストする。&lt;a href=&quot;#gasからプロンプトを込めてリクエストする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在、Vertex AIでサポートされているAIモデルはこの公式ページに書いてある通りでしょう。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/inference?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Vertex AI で Gemini API を使用してコンテンツを生成する | Generative AI on Vertex AI | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;Vertex AI の Model API for Gemini を使用して、カスタム アプリケーションを作成します。Gemini モデルのリクエスト本文、モデル パラメータ、レスポンス本文、リクエストとレスポンスのサンプルを確認します。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;2024-11-11時点では、以下のモデルがサポートされています。&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;モデル&lt;/th&gt;&lt;th&gt;バージョン&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Gemini 1.5 Flash&lt;/td&gt;&lt;td&gt;`gemini-1.5-flash-001&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gemini-1.5-flash-002`&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini 1.5 Pro&lt;/td&gt;&lt;td&gt;`gemini-1.5-pro-001&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gemini-1.5-pro-002`&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini 1.0 Pro Vision&lt;/td&gt;&lt;td&gt;`gemini-1.0-pro-001&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gemini-1.0-pro-vision-001`&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini 1.0 Pro&lt;/td&gt;&lt;td&gt;`gemini-1.0-pro&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gemini-1.0-pro-001&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;gemini-1.0-pro-002`&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;この公式チュートリアルのプロンプトを真似て作っていきます。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/vertex-ai/generative-ai/docs/start?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Vertex AI クイックスタート | Generative AI on Vertex AI | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;選択した言語の Google Gen AI SDK をインストールし、最初のリクエストを送信します。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして実際に出来たプロンプトを含んだコードはこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinkWithLlm&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myScriptName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MY_SCRIPT_NAME&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_DISSEMINATING_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[][]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAllRecords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssRecords&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[][]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTitlesAndPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;col1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMN_FOR_TITLE_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;col2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMN_FOR_PERMALINK_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;col1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;col2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check duplication to return index of duplicated string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Return -1 if not duplicated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkDuplicationInArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Create a permalink with the generative AI on Vertex AI API.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Return -1 if not duplicated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GOOGLE_CLOUD_PROJECT_ID&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-aiplatform.googleapis.com/v1/projects/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/locations/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/publishers/google/models/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:streamGenerateContent`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Bearer &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;contents&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-1.5-flash-001&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// const model = &quot;gemini-1.5-flash-002&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Explain how AI works.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;candidates&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// half-width space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`promptToGenAi: 1111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinks&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;titlesAndPermalinks&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;titlesAndPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkDuplicationInArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// const index = checkDuplicationInArray(permalinks, searchString);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authenticateVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAllRecords&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: 1111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;titlesAndPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTitlesAndPermalinks&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;titlesAndPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: 3333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記のコード内のpromptToGenAiを実行すると、Vertex AI APIからは下記の文字列が返ってきます。配列だとこんな感じです。この文字列を半角スペースで結合すれば本来の文章になりそうです。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;’##’, ’ Understanding AI: It’s not magic, it’s math and data!\n\n’, ‘Artificial Intelligence (AI) isn’t a single thing, but rather a broad’, ’ field encompassing various techniques. At its core, AI aims to create systems that can mimic human intelligence and perform tasks that typically require human expertise. \n\nHere’s a’, ’ simplified breakdown of how AI works:\n\n1. Data is King: AI systems rely heavily on large amounts of data to learn and improve. This data can’, ’ be anything from text and images to sensor readings and financial records. \n\n2. Algorithms: The Brains: Algorithms are sets of instructions that tell the AI how to process and learn from the data. Different AI techniques use different types of’, ’ algorithms:\n\n * Machine Learning (ML): Systems learn from data without explicit programming. They identify patterns and make predictions based on the data they’ve seen. \n * Deep Learning (DL): A subset of ML’, ’ using artificial neural networks, inspired by the structure of the human brain. These networks are particularly good at recognizing patterns in complex data like images and speech.\n\n3. Training: Feeding the AI: The AI system is “trained” on the data, meaning the algorithms adjust themselves to find the best way to process and’, ’ understand the information. This is like showing a child many pictures of a dog to teach them what a dog looks like.\n\n4. Inference: Making Predictions: Once trained, the AI can use its knowledge to make predictions or take actions based on new, unseen data. For example, a trained image recognition system can identify’, ’ different objects in a photo.\n\n5. Feedback and Improvement: The AI’s performance is constantly evaluated, and feedback is used to further refine the algorithms and improve its accuracy. This is a continuous loop that allows the AI to learn and adapt over time.\n\nExamples of AI in action:\n\n* ’, ‘Self-driving cars: Using sensors, cameras, and ML, they navigate roads and react to changing conditions.\n* Spam filters: ML identifies patterns in emails to sort spam from legitimate messages.\n* Recommendation systems: AI suggests movies, products, or music based on your preferences.\n* Virtual assistants:’, ’ Like Siri or Alexa, they understand your voice and respond to your requests.\n\nKey points to remember:\n\n* AI is not sentient or conscious. It simply follows instructions based on the data it has been trained on.\n* AI is a powerful tool, but it’s important to understand its limitations and potential’, ’ biases.\n* The field of AI is constantly evolving, with new breakthroughs emerging all the time.\n\nThis is a simplified explanation of AI. The details and specific techniques can be quite complex, but the core concepts remain consistent. By understanding the basic principles of AI, you can gain a better grasp of this rapidly growing field’, ’ and its impact on our lives. \n’&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パーマリンクを自動生成する。&lt;a href=&quot;#パーマリンクを自動生成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;パーマリンクを生成するためのプロンプト&lt;a href=&quot;#パーマリンクを生成するためのプロンプト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、今回やってみたい処理を実装していきます。今回使うAIモデルは&lt;code&gt;Gemini 1.5 Flash 001&lt;/code&gt;です。&lt;/p&gt;&lt;p&gt;プロンプトの中には、以下の情報を載せます。これらの情報からVertex AIで類推してもらって、新しいパーマリンクを生成してもらいます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;今まで書いてきたブログ記事のタイトル&lt;/li&gt;
&lt;li&gt;今まで書いてきたブログ記事のパーマリンク&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、Vertex AIにプロンプトする内容はこんな感じです。まあ、今日のAIは帰納的なので、文字数の要件定義はおまけ程度です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;今まで書いたブログ記事の[# 題名とパーマリンクのペアの一覧]を参考に、[# パーマリンクの要件]を満たしたパーマリンクを作成して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# 題名とパーマリンクのペアの一覧]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[[【GAS】Google Apps Scriptで書いたコードをGiitHubで公開するための段取り,gas-setup-to-publish-github],&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;【Googleスプレッドシート、GAS】選択した範囲をHTMLのtableタグとして画面上に出力する,gas-selected-area-to-html-table-2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,[DaVinci Resolve 18でゆっくり動画っぽいものをPythonで効率的に作ろうとしたけど断念した話,davinciresolve-yukkuri-giveup],&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;【Python】1つのファイル内における関数の依存関係をMermaidの書式で出力する,python-mermaid-print-dependencies&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;【Satisfactory】レアな資源の場所（石英）,satisfactory-where-is-rare-item2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;【ゲーム】Steamリプレイ2022の自分がプレイした履歴を見てみた,steamreplay-2022&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,[【GitHub Actions】実行時にパラメータ項目を設定する,githubactions-setting-parameter],[【Google Apps Script】onOpen時に「Spreadsheet.openByIdを呼び出す権限がありません」となり、メニューが追加されない,gas-onopne-auth-error]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# 新しいブログ記事の題名]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;【GAS】Gemini APIでブログのパーマリンクを自動生成する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# パーマリンクの要件]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみに上記のプロンプトをVertex AIに投げるとこんな感じの返答が返ってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1910&quot; height=&quot;897&quot; src=&quot;/_astro/36.tAI1OWL9_ZQTuup.webp&quot; srcset=&quot;/_astro/36.tAI1OWL9_ZaX0KI.webp 640w, /_astro/36.tAI1OWL9_Z2dfC7I.webp 750w, /_astro/36.tAI1OWL9_2l69la.webp 828w, /_astro/36.tAI1OWL9_Z1yELkY.webp 1080w, /_astro/36.tAI1OWL9_22mp0Q.webp 1280w, /_astro/36.tAI1OWL9_2jPmtt.webp 1668w, /_astro/36.tAI1OWL9_ZQTuup.webp 1910w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;パーマリンクを生成するためのGASコード&lt;a href=&quot;#パーマリンクを生成するためのgasコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そのプロンプトを踏まえた上での処理全体のコードがこちらになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// The functions to authenticate with OAuth2.0: START ================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logoutOauthSvcForVertexAi&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;displayHtmlPage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModalDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reset&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;displayHtmlPage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Session has reset on Vertex AI API.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Logged out from Google API&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{HtmlOutput}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackForVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authCallbackForVertexAi: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Success! You can close this tab. Redo autocreate a permalink.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Denied. You can close this tab&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{OAuth2.Service_}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VERTEX_AI_CLIENT_ID&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;secret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VERTEX_AI_CLIENT_SECRET&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getVertexAiService: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;VERTEX_AI_API&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationBaseUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/auth&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;secret&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setCallbackFunction&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;authCallbackForVertexAi&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setPropertyStore&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setScope&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/cloud-platform&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setParam&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;login_hint&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Session&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveUser&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getEmail&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{OAuth2.Service_}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;authenticateVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getAuthorizationUrl&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authenticate&amp;lt;/a&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModalDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Google API Authentication&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authenticateVertexAi: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// The functions to authenticate with OAuth2.0: END ================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// The functions to generate permalinks with Vertex AI: START ================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinkWithLlm&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myScriptName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MY_SCRIPT_NAME&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_DISSEMINATING_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[][]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAllRecords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssRecords&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Create a permalink with the generative AI on Vertex AI API.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Return -1 if not duplicated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GOOGLE_CLOUD_PROJECT_ID&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;us-central1&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-aiplatform.googleapis.com/v1/projects/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;projectId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/locations/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/publishers/google/models/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:streamGenerateContent`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Bearer &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;contents&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-1.5-flash-001&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// const model = &quot;gemini-1.5-flash-002&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestToVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;candidates&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// half-width space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`promptToGenAi: 1111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`promptToGenAi: 77777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newBlogTitle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;newBlogTitle&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[][]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[][]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTitlesAndPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;col1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMN_FOR_TITLE_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;col2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMN_FOR_PERMALINK_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;col1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;col2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tps&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tps&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check duplication to return index of duplicated string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Return -1 if not duplicated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkDuplicationInArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* data = &apos;```[  &quot;gas-gemini-api-autogenerate-permalink&quot;,  &quot;gas-gemini-api-auto-permalink&quot;,  &quot;gas-gemini-api-blog-permalink&quot;,  &quot;gas-auto-generate-blog-permalink-gemini-api&quot;,  &quot;gemini-api-for-blog-permalink-with-gas&quot;]```&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* elements = [ &apos;gas-gemini-api-autogenerate-permalink&apos;, &apos;gas-gemini-api-auto-permalink&apos;, &apos;gas-gemini-api-blog-permalink&apos;, &apos;gas-auto-generate-blog-permalink-gemini-api&apos;, &apos;gemini-api-for-blog-permalink-with-gas&apos; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractElementsFromString&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&quot;(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;&quot;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;)&quot;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&quot;/&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`LlmPrompter.extractElementsFromString: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAllRecords&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 1111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTitlesAndPermalinks&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinksToShow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`[&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;tp&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;]`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 3333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinksToShow&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 4444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`今まで書いたブログ記事の[# 題名とパーマリンクのペアの一覧]を参考に、[# パーマリンクの要件]を満たしたパーマリンクを作成して。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;[# 題名とパーマリンクのペアの一覧]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinksToShow&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;[# 新しいブログ記事の題名]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;【GAS】Gemini APIでブログのパーマリンクを自動生成する&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;[# パーマリンクの要件]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- [# 新しいブログ記事の題名]に適している&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- 文字数は30文字以内である&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- 5通り作って、コードブロックの中に配列として出力する。その配列は1文字目の昇順にソートする。&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedPermalinkSentence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;generatedPermalinkSentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractElementsFromString&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;generatedPermalinkSentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;generatedPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 6666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;srcTitlesAndPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;srcPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkDuplicationInArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;srcPermalinks&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinks: 9999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filteredPermalinks&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;displayHtmlPlainPage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModalDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OauthServiceMgr&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getVertexAiService&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;oauthMgr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authenticateVertexAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: 222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;svc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;スプレッドシート上にダイアログを表示して入力するなり、シートから取得する。&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPermalinks&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;newTitle&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinkSentence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;permalinks&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: 666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;permalinkSentence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: 777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Generated permalinks are following.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;permalinkSentence&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Create a permalink with Vertex AI is Terminated...&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createPermalinkWithLlm: ==============================================`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// The functions to generate permalinks with Vertex AI: END ================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記のコード（&lt;code&gt;createPermalinkWithLlm&lt;/code&gt;）の流れとしては、こんな感じです。これから、生成AIからのレスポンスを構造的に処理したい場合は、正規表現の必要性が増してきそうですね・・・。今まで全く覚える気がありませんでしたが。。。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Vetex AI API用のOAuth2.0認証セッションを持っているか確かめる。（持っていなかったらOAuth2.0認証をして再度実行。）&lt;/li&gt;
&lt;li&gt;Vetex AI APIにアクセスできるので、それに対するプロンプトの内容を作る。&lt;/li&gt;
&lt;li&gt;プロンプトを送って返事を貰ったら、その内容を正規表現で解析して、新しいパーマリンクの配列を取得する。&lt;/li&gt;
&lt;li&gt;HTMLに新しいパーマリンクの配列を表示する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;上記のコードを実行すると、こんな感じにHTML形式で新しいパーマリンクの候補が表示されます。レスポンスのトークンの切れ目に半角スペースが入ってしまっていますが、まあ後で直すとしますか・・・。&lt;/p&gt;&lt;p&gt;AIから提示されたこれらの候補を元に、楽にパーマリンクを作成できるようになりました！
&lt;img loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;346&quot; src=&quot;/_astro/39.gwgmNjv0_ZhSzDk.webp&quot; srcset=&quot;/_astro/39.gwgmNjv0_ZhSzDk.webp 448w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Apps Scriptで今まで自分で作ってきたブログ記事のタイトルとパーマリンクを生成AI「Gemini」にプリプロンプトして、パーマリンクを自動作成してもらう方法を紹介しました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。（2024-11-11時点。）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Vertex AIを使えば、Geminiチャットの用に学習されることなく、LLMを利用できる。&lt;/li&gt;
&lt;li&gt;Vertex AI Studio上で、Google AI StudioのようにGemini等のLLMと対話できる。&lt;/li&gt;
&lt;li&gt;Vertex AI APIでは、APIキーを使った認証は不可能。OAuth2.0を使った認証を行う必要がある。&lt;/li&gt;
&lt;li&gt;HTMLのタグを使ってOAuth2.0の認証が可能だが、GASでは「OAuth2 for Apps Script」ライブラリを使って認証を行うことも可能である。&lt;/li&gt;
&lt;li&gt;Vertex AIからのレスポンスは文字列であるため、正規表現を使えばデータの構造を作っていくことが出来る。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで、Google Apps ScriptからGoogle CloudのVertex AIというサービスを利用することが出来るようになりました。OAuth2.0認証が少々面倒ですが、何度か試していけば慣れます。これからも便利なサービスはどんどん試していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GASに関するその他の記事&lt;a href=&quot;#gasに関するその他の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-record-gamil-with-openai/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、GPT-4】OpenAI APIでGmailに届くエラーメールをスプレッドシートに記録する&lt;/div&gt;&lt;div&gt;Google Apps Scirptを使っていると、Gmailにそのエラー情報が送られてきたりします。そこで、OpenAI APIのGPT-4とParserで情報を抽出しましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240206_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-search-to-save-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】スプレッドシートに入力したキーワードで検索してヒットした画像をGoogleドライブに保存する&lt;/div&gt;&lt;div&gt;Google Apps ScriptでGoogle Spreadsheetに入力した文字で画像検索し、結果をGoogleドライブに保存する処理を書きます。Custom Search APIを使います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/03/20240212_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はどれにしようかな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;0からパーマリンクを作らなくていいから楽になりますね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】スクリプトプロパティがGUIで確認できないのでJSONに入れることにした</title><link>https://endorphinbath.com/posts/gas-scriptpropertis-holding-json/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-scriptpropertis-holding-json/</guid><description>GASのエディタでスクリプトプロパティを編集出来なくなる事象を回避するために、プロパティの値をJSONで格納するように実装していく記事です。</description><pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スクリプトプロパティが見えない・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;格納の仕方を変えねばな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptでスクリプトプロパティが見えない&lt;a href=&quot;#google-apps-scriptでスクリプトプロパティが見えない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script（以下、GAS）のエディターでは、1プロジェクトにつき、スクリプトプロパティの数が50以上になると、51個目以降のスクリプトプロパティをGUI上で確認できなくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;488&quot; src=&quot;/_astro/11.Dg_ZnCUA_1Ijh1m.webp&quot; srcset=&quot;/_astro/11.Dg_ZnCUA_ZghUXz.webp 640w, /_astro/11.Dg_ZnCUA_ZFQdP4.webp 750w, /_astro/11.Dg_ZnCUA_ZMHOBc.webp 828w, /_astro/11.Dg_ZnCUA_Z1EDLFr.webp 1080w, /_astro/11.Dg_ZnCUA_1Ijh1m.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;スクリプトに50を超えるプロパティが含まれています。上のリストには最初の50個のみが表示されており、読み取り専用です。 すべてのプロパティを管理または表示するには、プロパティサービスを使用してプログラムを使って行います。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;一応、&lt;code&gt;PropertiesService.getScriptProperties()&lt;/code&gt;を実行して、&lt;code&gt;console.log()&lt;/code&gt;とかをすれば表示できないことはありません。そして、&lt;code&gt;Properties.setProperty(key, value)&lt;/code&gt;をすればプロパティを編集することは可能ですが、やはりGUI上で表示して編集する方が楽ではあります。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/apps-script/guides/properties?hl=vi&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Dịch vụ thuộc tính | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;Tìm hiểu cách sử dụng dịch vụ Properties để lưu trữ dữ liệu khoá-giá trị cho tập lệnh, người dùng hoặc tài liệu của bạn.&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この事態を打開するためには、スクリプトプロパティの個数を減らすしかありません。そのため今回は、ID とパスワードを JSON にまとめてスクリプトプロパティに入れるようにしていきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトプロパティをJSONにする処理&lt;a href=&quot;#スクリプトプロパティをjsonにする処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このようなコードで、スクリプトプロパティをJSONにする処理を実装できます。&lt;code&gt;getConfig()&lt;/code&gt;関数でJSON文字列をパースして設定オブジェクトを取得し、&lt;code&gt;setConfig()&lt;/code&gt;関数で設定オブジェクトをJSON文字列に変換して保存しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// プロパティのキー&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CONFIG_KEY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;myConfig&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// プロパティの値（JSON）から設定オブジェクトの取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConfig&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configJson&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;CONFIG_KEY&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configJson&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;configJson&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// プロパティに設定オブジェクトの値（JSON）の保存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setConfig&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configJson&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;setProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;CONFIG_KEY&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;configJson&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 使用例&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConfig&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 設定値の取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Logger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;apiUrl&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 設定値の更新&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;apiUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://newapi.example.com&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;abcdef123456&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 設定値の保存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setConfig&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 確認&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConfig&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Logger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;apiUrl&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Logger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記の実装で格納した&lt;code&gt;myConfig&lt;/code&gt;というキーのスクリプトプロパティは、プロパティストアを開くとJSON形式でそのキーに対する設定が確認できるようになります。&lt;/p&gt;&lt;p&gt;JSONなので、階層が深くなったり、構造に非対称性が出てくると編集しにくくなりそうですが、1層か2層ぐらいしか無いJSONであれば、手作業でも編集出来ないことは無さそうです。&lt;/p&gt;&lt;p&gt;こんな風に沢山フィールドがあったり、ネストの深さが一律で無かったりすると編集は大変そうですが・・・、&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;myScript_01&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;userSettings&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;notification&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;language&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_02&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;userSettings&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;notification&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;language&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ja&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;こんな風にフィールドが横並びであれば、何だか編集できそうな気がします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;myScript_01&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_02&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_03&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_04&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_05&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;myScript_06&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiUrl&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;apiKey&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、このようにJSONで格納することによって、「スクリプトプロパティを編集」ボタンをクリックすることで、再びエディタ上でプロパティを閲覧および編集できるようになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;533&quot; src=&quot;/_astro/21.THiYTqga_ZcFlxI.webp&quot; srcset=&quot;/_astro/21.THiYTqga_Z1jvTM5.webp 640w, /_astro/21.THiYTqga_1rYGmO.webp 750w, /_astro/21.THiYTqga_Z1gUiOA.webp 828w, /_astro/21.THiYTqga_Z1gI0Mz.webp 1080w, /_astro/21.THiYTqga_ZcFlxI.webp 1267w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、GASのエディターでスクリプトプロパティを全て表示するために、プロパティの値をJSONで格納する実装に関して紹介しました。これで、スクリプトプロパティが多く必要なプロジェクトでも、そのプロパティの編集作業の時間を短縮することが出来るかもしれません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見えるようになったあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;久しぶりに見たなこの光景。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Pythonまとめ</title><link>https://endorphinbath.com/posts/python-recap/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-recap/</guid><description>Pythonに関する今までの記事を一つの場所に一覧にしました。</description><pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;Python&lt;a href=&quot;#python&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonは、とても読みやすいシンタックスでコードを記述することが出来て、型拘束が比較的ゆるめな動的型付けを搭載した、プログラミング言語です。&lt;/p&gt;&lt;p&gt;そのため、プログラミング言語を初めて触る際に、入門用として扱いやすいものになっています。&lt;/p&gt;&lt;p&gt;また、コンパイルが不要なインタプリタ型の言語でもあり、すぐに実行できてデバッグまでを素早く行えるので、スピーディな開発が可能になります。その事に加えて、便利なライブラリが豊富にあるため、世界で最も使われているプログラミング言語の一つとなっています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonを使う。&lt;a href=&quot;#pythonを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/sqlite3-to-csv/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】sqlite3からCSV文字列を出力する&lt;/div&gt;&lt;div&gt;sqlite3からCSVを出力する記事がググってもほとんど出てこなかったので自分で書きました（笑）なんだか、作ってる最中の心情も記事に書いたので、プログラマあるある的な記事になっています。見てみて下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211124_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/make-voiced-sound/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】シェル上で出力した文字列で濁点が分かれてしまった文字（結合文字）を濁音に直すスクリプト&lt;/div&gt;&lt;div&gt;シェル上でファイル名などを出力した際に、バがバになってしまう場合があります。それをいちいち手作業で直すのがしんどいので、直してくれるスクリプトを作りました。テストコードもあります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211029_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/vscode-setting-python-format-false/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-remove-spaces-head-and-tail/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】文字列の先頭と末尾にあるスペース、空白文字を削除する&lt;/div&gt;&lt;div&gt;Pythonで文字列の先頭と末尾にスペース（空白文字）が混じっていることがあります。そのスペースを削除するスクリプトを掲載します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220120_Eyecatch-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-string-to-list-by-multi-seperator/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】複数の区切り文字を指定して文字列を配列に分割する&lt;/div&gt;&lt;div&gt;Pythonで文字列を配列に分割するスクリプトを掲載します。分割文字は配列で指定するように作っています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220121_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-getting-all-methods-in-file/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】.pyファイルにある関数とメソッドを全て取得する&lt;/div&gt;&lt;div&gt;Pythonで.pyファイルの中に記述されている関数およびメソッドを全て取得するスクリプトを掲載します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220122_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-make-cron/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】cronを生成するモジュールを作った&lt;/div&gt;&lt;div&gt;Pythonでcron時間を生成するモジュールを作りました。タイムゾーンを引数にして生成できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220211_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-pytest-importing-same-dir-modules/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】pytestで同じディレクトリのモジュールをimportして、”ModuleNotFoundError: No module named”を出さなくする&lt;/div&gt;&lt;div&gt;Pythonスクリプトをpytestするとき、&amp;amp;amp;quot;ModuleNotFoundError: No module named&amp;amp;amp;quot;が表示されてしまった場合、この記事の方法でそのエラーが解決するかも。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220215_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-pytest-input-by-monkeypatch/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】inputを使った処理をpytestでunittestしたい（monkeypatchでmockする）&lt;/div&gt;&lt;div&gt;Pythonスクリプトをpytestする時に、input()のようなビルトイン関数が入っている時にmockする方法を紹介します。monkeypatchを使用します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220216_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-mermaid-print-dependencies/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】1つのファイル内における関数の依存関係をMermaidの書式で出力する&lt;/div&gt;&lt;div&gt;1つのファイル内のクラス図の依存関係を描画するために、MarkdownのMermaid書式で出力するPythonスクリプトを作りました。似た機能を作りたい場合にご参考ください。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220313_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;画像・動画の加工&lt;a href=&quot;#画像動画の加工&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/extract-movie-to-image/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】動画をフレームごとの画像にして出力するスクリプトを作った話&lt;/div&gt;&lt;div&gt;動画を画像として切り出すツールをPythonで作りました。OpenCVを利用しています。動画として視聴する必要がないコンテンツはこのツールで画像にしてしまいましょう！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211030_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/trim-multiple-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】複数の画像を一気にトリミングするスクリプトを作った話&lt;/div&gt;&lt;div&gt;複数の画像を一気にトリミングするツールをPythonで作りました。使い方としては、最初に切り出したい範囲を選んで確定したら、そのエリアで後続の画像も切り出します。利用したモジュールは、OpenCVやTkinter、matplotlibになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211101_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/remove-duplicate-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】同じような画像が色々な組み合わせで存在する場合に重複分を削除するスクリプトを作った話&lt;/div&gt;&lt;div&gt;同じような画像が色々な組み合わせ・グループで出来てしまった場合に、重複している分を削除するツールをPythonで作りました。OpenCVやTkinterを利用しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211123_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GitHub&lt;a href=&quot;#github&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/github-action-automake-issue-to-projects-former/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GitHub】PythonとGitHub ActionsでProjectsにIssuesを作る作業を自動化する（前編：Pythonのソース）&lt;/div&gt;&lt;div&gt;日々のタスクをGitHub IssuesおよびGitHub Projectsで管理する時に登録する作業が面倒くさいと思います。いちいちオプションを選択して入力する手間が面倒くさいと思います。本記事では、その作業を省略したツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220208_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/github-action-automake-issue-to-projects-latter/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GitHub】PythonとGitHub ActionsでProjectsにIssuesを作る作業を自動化する（後編：GitHub Actionの内容）&lt;/div&gt;&lt;div&gt;日々のタスクをGitHub IssuesおよびGitHub Projectsで管理する時に登録する作業が面倒くさいと思います。いちいちオプションを選択して入力する手間が面倒くさいと思います。本記事では、その作業を省略したツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220209_Eyecatch-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/cloudfunctions-to-get-github-repo-with-python/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GitHub】Pythonでリポジトリの情報を取得するCloud Functionsを作る&lt;/div&gt;&lt;div&gt;Pythonを使用してGitHubリポジトリの情報を取得し、Cloud Functionsで処理する方法に関する記事です。PyGithubとThreadingで実装および処理を効率的にしました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240222_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Discord&lt;a href=&quot;#discord&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/discord-api-about-timeout/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/renderdotcom-how-to-deploy-discord-bot/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Render.com】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方（Dockerも利用）&lt;/div&gt;&lt;div&gt;RenderでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で一応実施できたので、ご参考ください。Dockerも使いました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/pycord-application-command-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/pycord-inputtextstyle-watching/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Pycord】モーダルのdiscord.InputTextStyleでどのように入力できるかを見てみた&lt;/div&gt;&lt;div&gt;PythonのDiscord拡張ライブラリ、「Pycord」のInputTextStyleでどのようなUIで表示されてどのように入力できるのかを見てみました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2023/02/20230216_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-discord-bot-enhance-2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleサービス&lt;a href=&quot;#googleサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-gss-setting-to-edit/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】Google Spreadsheetを編集するために初期設定からのまとめ&lt;/div&gt;&lt;div&gt;PythonからGoogle Spreadsheetを編集するために行った認証の設定を掲載します。最終的には、gspreadというモジュールで編集できるようになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/02/20220109_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-gspread-number-to-a1notation/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他&lt;a href=&quot;#その他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/wardrobe-app-web/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/heroku-how-to-deploy-discord-bot/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Heroku】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方&lt;/div&gt;&lt;div&gt;HerokuでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で特に躓くことなく実施できたので、ご参考ください。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220124_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-manipulating-html-from-book-meter/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】読書メーターからブログ用に取得したHTMLをキレイに表示するように整形する（Beautiful Soupを使用）&lt;/div&gt;&lt;div&gt;読書メーターから取得したHTMLをブログで見栄え良く見せるために、PythonでBeautiful Soupを使って編集したので、その編集過程を紹介します。HTMLの入手方法も併せて紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220202_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/davinciresolve-yukkuri-giveup/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/llm-knows-python-restructuredtextstyle/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】大規模言語モデル達の間ではReStructuredTextスタイルはあまり知られていないらしい&lt;/div&gt;&lt;div&gt;大規模言語モデルはPythonのSphinx用のReStructuredTextスタイルのdocstringを生成させる記事になります。汎用大規模言語モデルにも得手不得手があるようです。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240224_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以上まとめでした。&lt;a href=&quot;#以上まとめでした&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;読みやすい書きやすい&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;速攻でデプロイに持っていけます。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】Refined Powerの使い方</title><link>https://endorphinbath.com/posts/satisfactory-refinedpower/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-refinedpower/</guid><description>Satisfactoryで利用できるMod「Refined Power」の使い方を網羅的に紹介します。バニラとはまた違った発電方式で楽しいです。</description><pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このModはどうやって使うんだろ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「Refined Power」・・・とな？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Refined Powerとは&lt;a href=&quot;#refined-powerとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Refined Power」とは、工場建設サンドボックスゲーム「Satisfactory」で、バニラとは違う方式で電力を生産することが出来るようになるModです。&lt;/p&gt;&lt;a href=&quot;https://ficsit.app/mod/RefinedPower&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ficsit.app&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ficsit.app&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ficsit.app&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;基本的にこのModでは、Modをインストールすることで着手できるようになるマイルストーンを達成していくことで、新たな発電方式をアンロックしていくことになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/00_01.wadbZf1V_8anWD.webp&quot; srcset=&quot;/_astro/00_01.wadbZf1V_6nz9l.webp 640w, /_astro/00_01.wadbZf1V_QnCzP.webp 750w, /_astro/00_01.wadbZf1V_dODc1.webp 828w, /_astro/00_01.wadbZf1V_AK1LA.webp 1080w, /_astro/00_01.wadbZf1V_2ei47O.webp 1280w, /_astro/00_01.wadbZf1V_2wk6WQ.webp 1668w, /_astro/00_01.wadbZf1V_8anWD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/00_02.qHleZFft_ZOn61S.webp&quot; srcset=&quot;/_astro/00_02.qHleZFft_Z1oy9Gw.webp 640w, /_astro/00_02.qHleZFft_ZDy6g2.webp 750w, /_astro/00_02.qHleZFft_Z1h75DQ.webp 828w, /_astro/00_02.qHleZFft_ZlMscV.webp 1080w, /_astro/00_02.qHleZFft_1gJz8i.webp 1280w, /_astro/00_02.qHleZFft_1yLBXk.webp 1668w, /_astro/00_02.qHleZFft_ZOn61S.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Refined Powerで扱うことが出来る発電方式&lt;a href=&quot;#refined-powerで扱うことが出来る発電方式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Refined Power」で利用できる発電方式を紹介していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;風力発電&lt;a href=&quot;#風力発電&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;風力タービンで発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_01.BJ0LMMQI_2tLdQr.webp&quot; srcset=&quot;/_astro/01_01.BJ0LMMQI_ZX1A28.webp 640w, /_astro/01_01.BJ0LMMQI_Zd1wAD.webp 750w, /_astro/01_01.BJ0LMMQI_ZPzvYs.webp 828w, /_astro/01_01.BJ0LMMQI_Z27Ph8x.webp 1080w, /_astro/01_01.BJ0LMMQI_ZuieMj.webp 1280w, /_astro/01_01.BJ0LMMQI_ZcgbWh.webp 1668w, /_astro/01_01.BJ0LMMQI_2tLdQr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;太陽光発電&lt;a href=&quot;#太陽光発電&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;太陽光パネルで発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_02.DAWQZL9b_Z2bhxnT.webp&quot; srcset=&quot;/_astro/01_02.DAWQZL9b_1aQWTl.webp 640w, /_astro/01_02.DAWQZL9b_1UR1kP.webp 750w, /_astro/01_02.DAWQZL9b_1ij1W1.webp 828w, /_astro/01_02.DAWQZL9b_Z1HGTyW.webp 1080w, /_astro/01_02.DAWQZL9b_Z59RdI.webp 1280w, /_astro/01_02.DAWQZL9b_cRaBj.webp 1668w, /_astro/01_02.DAWQZL9b_Z2bhxnT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;水力発電&lt;a href=&quot;#水力発電&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;水力タービンで発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_03.Bb1J3Zqo_12DKcq.webp&quot; srcset=&quot;/_astro/01_03.Bb1J3Zqo_ZFQcLq.webp 640w, /_astro/01_03.Bb1J3Zqo_48PE4.webp 750w, /_astro/01_03.Bb1J3Zqo_Zyp8IK.webp 828w, /_astro/01_03.Bb1J3Zqo_1veo1n.webp 1080w, /_astro/01_03.Bb1J3Zqo_Z1VpHrk.webp 1280w, /_astro/01_03.Bb1J3Zqo_Z1DnEBi.webp 1668w, /_astro/01_03.Bb1J3Zqo_12DKcq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;火力発電&lt;a href=&quot;#火力発電&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;水を温めて蒸気にしてタービンを回して発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_04.BdKxuScS_Zmso8W.webp&quot; srcset=&quot;/_astro/01_04.BdKxuScS_pp4DT.webp 640w, /_astro/01_04.BdKxuScS_1ap85o.webp 750w, /_astro/01_04.BdKxuScS_wQ8Gz.webp 828w, /_astro/01_04.BdKxuScS_67eF0.webp 1080w, /_astro/01_04.BdKxuScS_1IEh1e.webp 1280w, /_astro/01_04.BdKxuScS_21GjQg.webp 1668w, /_astro/01_04.BdKxuScS_Zmso8W.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;原子炉（リアクター）&lt;a href=&quot;#原子炉リアクター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターコアで原子炉を動かして発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_05.DylA_XGX_1e8EoT.webp&quot; srcset=&quot;/_astro/01_05.DylA_XGX_ZlsNLJ.webp 640w, /_astro/01_05.DylA_XGX_oweDK.webp 750w, /_astro/01_05.DylA_XGX_Ze1JJ4.webp 828w, /_astro/01_05.DylA_XGX_1GIidQ.webp 1080w, /_astro/01_05.DylA_XGX_Z1JUNeQ.webp 1280w, /_astro/01_05.DylA_XGX_Z1rSKoO.webp 1668w, /_astro/01_05.DylA_XGX_1e8EoT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;太陽帆（ソーラーセイル）&lt;a href=&quot;#太陽帆ソーラーセイル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;太陽から得た大量の熱で、水を温めて蒸気にしてタービンを回して発電します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_06.CRPGUZeP_Z1ttHv.webp&quot; srcset=&quot;/_astro/01_06.CRPGUZeP_Z1wYkzD.webp 640w, /_astro/01_06.CRPGUZeP_ZLYh99.webp 750w, /_astro/01_06.CRPGUZeP_Z1pxgwX.webp 828w, /_astro/01_06.CRPGUZeP_r696r.webp 1080w, /_astro/01_06.CRPGUZeP_24DbrF.webp 1280w, /_astro/01_06.CRPGUZeP_2mFehH.webp 1668w, /_astro/01_06.CRPGUZeP_Z1ttHv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;風力発電の使い方&lt;a href=&quot;#風力発電の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、風力発電機を使って、風力発電をするところから始められます。&lt;/p&gt;&lt;p&gt;風力発電機には、Mk.1～Mk.3まであります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_01.DWXr3NAZ_1VhQhw.webp&quot; srcset=&quot;/_astro/02_01.DWXr3NAZ_XXdRs.webp 640w, /_astro/02_01.DWXr3NAZ_1IXhiW.webp 750w, /_astro/02_01.DWXr3NAZ_16phU8.webp 828w, /_astro/02_01.DWXr3NAZ_2oRu6t.webp 1080w, /_astro/02_01.DWXr3NAZ_Z12LBme.webp 1280w, /_astro/02_01.DWXr3NAZ_ZJJywc.webp 1668w, /_astro/02_01.DWXr3NAZ_1VhQhw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;風力発電は、設置して電線に繋げば自然と動き始めます。&lt;/p&gt;&lt;p&gt;しかし、風力発電機を設置する際には、発電機同士にある程度のスパンを空ける必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_02_01.DASWo9U8_xnvwR.webp&quot; srcset=&quot;/_astro/02_02_01.DASWo9U8_Z8wQDJ.webp 640w, /_astro/02_02_01.DASWo9U8_Z2vUvEJ.webp 750w, /_astro/02_02_01.DASWo9U8_1jnkLl.webp 828w, /_astro/02_02_01.DASWo9U8_Z28iyzN.webp 1080w, /_astro/02_02_01.DASWo9U8_ZwMi3y.webp 1280w, /_astro/02_02_01.DASWo9U8_Z1r3dpl.webp 1668w, /_astro/02_02_01.DASWo9U8_xnvwR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_02_02.DTvO0LT0_16lHLM.webp&quot; srcset=&quot;/_astro/02_02_02.DTvO0LT0_Z1gtKmY.webp 640w, /_astro/02_02_02.DTvO0LT0_1qjIpW.webp 750w, /_astro/02_02_02.DTvO0LT0_bqr36.webp 828w, /_astro/02_02_02.DTvO0LT0_Z1zkmkS.webp 1080w, /_astro/02_02_02.DTvO0LT0_1aTbm.webp 1280w, /_astro/02_02_02.DTvO0LT0_ZS51aq.webp 1668w, /_astro/02_02_02.DTvO0LT0_16lHLM.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に設置してみると、これぐらいのスパンで並ぶことになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_03.grsZYRn7_1VU2p8.webp&quot; srcset=&quot;/_astro/02_03.grsZYRn7_282chK.webp 640w, /_astro/02_03.grsZYRn7_Z2c9S5G.webp 750w, /_astro/02_03.grsZYRn7_2ftgkq.webp 828w, /_astro/02_03.grsZYRn7_2puFe5.webp 1080w, /_astro/02_03.grsZYRn7_Z129qeC.webp 1280w, /_astro/02_03.grsZYRn7_ZJ7noA.webp 1668w, /_astro/02_03.grsZYRn7_1VU2p8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_04.BQ4hlnl7_1JUXhm.webp&quot; srcset=&quot;/_astro/02_04.BQ4hlnl7_DA5Eo.webp 640w, /_astro/02_04.BQ4hlnl7_1oA95S.webp 750w, /_astro/02_04.BQ4hlnl7_L29H4.webp 828w, /_astro/02_04.BQ4hlnl7_2dvB6j.webp 1080w, /_astro/02_04.BQ4hlnl7_Z1e8umo.webp 1280w, /_astro/02_04.BQ4hlnl7_ZV6rwm.webp 1668w, /_astro/02_04.BQ4hlnl7_1JUXhm.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、この世界の風には波があるようで、発電量が多い時と少ない時があるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_06.BfK2lcJd_21QULE.webp&quot; srcset=&quot;/_astro/02_06.BfK2lcJd_Z27XeYM.webp 640w, /_astro/02_06.BfK2lcJd_Z1mXbyi.webp 750w, /_astro/02_06.BfK2lcJd_Z20waW7.webp 828w, /_astro/02_06.BfK2lcJd_2uryAB.webp 1080w, /_astro/02_06.BfK2lcJd_ZWcwR6.webp 1280w, /_astro/02_06.BfK2lcJd_ZEau24.webp 1668w, /_astro/02_06.BfK2lcJd_21QULE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;太陽光発電の使い方&lt;a href=&quot;#太陽光発電の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、太陽光パネルを使って、太陽光発電をするところから始められます。&lt;/p&gt;&lt;p&gt;太陽光パネルにも、Mk.1～Mk.3まであります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_01.BF-qwvPO_7yGpy.webp&quot; srcset=&quot;/_astro/03_01.BF-qwvPO_1JqiTR.webp 640w, /_astro/03_01.BF-qwvPO_2uqmlm.webp 750w, /_astro/03_01.BF-qwvPO_1QRmWx.webp 828w, /_astro/03_01.BF-qwvPO_A9kev.webp 1080w, /_astro/03_01.BF-qwvPO_2dGmzJ.webp 1280w, /_astro/03_01.BF-qwvPO_2vIppL.webp 1668w, /_astro/03_01.BF-qwvPO_7yGpy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽光発電も、設置して電線に繋げば自然と動き始めます。（太陽が出ている時だけ。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_02.3BqpU6zw_BUksG.webp&quot; srcset=&quot;/_astro/03_02.3BqpU6zw_Z1FIbn7.webp 640w, /_astro/03_02.3BqpU6zw_ZUI7VC.webp 750w, /_astro/03_02.3BqpU6zw_Z1yh7kr.webp 828w, /_astro/03_02.3BqpU6zw_15uXhD.webp 1080w, /_astro/03_02.3BqpU6zw_Z2m98b4.webp 1280w, /_astro/03_02.3BqpU6zw_Z2475l2.webp 1668w, /_astro/03_02.3BqpU6zw_BUksG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_03.Y6eVJ-ES_ZRBMu3.webp&quot; srcset=&quot;/_astro/03_03.Y6eVJ-ES_ooL9H.webp 640w, /_astro/03_03.Y6eVJ-ES_19oOAc.webp 750w, /_astro/03_03.Y6eVJ-ES_vPPcn.webp 828w, /_astro/03_03.Y6eVJ-ES_Zp29F6.webp 1080w, /_astro/03_03.Y6eVJ-ES_1duRF8.webp 1280w, /_astro/03_03.Y6eVJ-ES_1vwUva.webp 1668w, /_astro/03_03.Y6eVJ-ES_ZRBMu3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽光発電においても、発電量に波があると言いますか、太陽が出ている間にしか発電ができないので、ずっと同じ発電量をキープすることは出来ません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_04.DyYS69w4_4uilX.webp&quot; srcset=&quot;/_astro/03_04.DyYS69w4_Z12Lo55.webp 640w, /_astro/03_04.DyYS69w4_ZhLkDA.webp 750w, /_astro/03_04.DyYS69w4_ZUkk2p.webp 828w, /_astro/03_04.DyYS69w4_x4VaU.webp 1080w, /_astro/03_04.DyYS69w4_2aBXw9.webp 1280w, /_astro/03_04.DyYS69w4_2sE1mb.webp 1668w, /_astro/03_04.DyYS69w4_4uilX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、太陽と発電機の間に設備を置くと、上手く発電することが出来なくなってしまうので注意。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_06.CaHtaCtX_2mOtdL.webp&quot; srcset=&quot;/_astro/03_06.CaHtaCtX_aMtpB.webp 640w, /_astro/03_06.CaHtaCtX_UMwQ6.webp 750w, /_astro/03_06.CaHtaCtX_iexsh.webp 828w, /_astro/03_06.CaHtaCtX_Z2eM1Ld.webp 1080w, /_astro/03_06.CaHtaCtX_ZBeYpY.webp 1280w, /_astro/03_06.CaHtaCtX_ZjcVzW.webp 1668w, /_astro/03_06.CaHtaCtX_2mOtdL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽とパネルの間に何かしらの物体を置いてしまうと、発電量が本来のキャパシティで発電できる量から大きく減ってしまいます。下手をすれば発電量は0になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_07.DEXmXLJK_1ut5gU.webp&quot; srcset=&quot;/_astro/03_07.DEXmXLJK_ZkVF4H.webp 640w, /_astro/03_07.DEXmXLJK_p3nlM.webp 750w, /_astro/03_07.DEXmXLJK_ZduB22.webp 828w, /_astro/03_07.DEXmXLJK_1X3I5R.webp 1080w, /_astro/03_07.DEXmXLJK_Z1tAnmP.webp 1280w, /_astro/03_07.DEXmXLJK_Z1bykwN.webp 1668w, /_astro/03_07.DEXmXLJK_1ut5gU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;水力発電の使い方&lt;a href=&quot;#水力発電の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;水の流れを利用して発電することも可能です。つまり、水力発電です。&lt;/p&gt;&lt;p&gt;水力発電機は、Mk.1までしか存在しません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_01.wu2USSHK_2cwFlp.webp&quot; srcset=&quot;/_astro/04_01.wu2USSHK_Z1WBQAp.webp 640w, /_astro/04_01.wu2USSHK_Z1cBN9U.webp 750w, /_astro/04_01.wu2USSHK_Z1PaMxJ.webp 828w, /_astro/04_01.wu2USSHK_Z2p4ODz.webp 1080w, /_astro/04_01.wu2USSHK_ZLwMil.webp 1280w, /_astro/04_01.wu2USSHK_ZtuJsj.webp 1668w, /_astro/04_01.wu2USSHK_2cwFlp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;水力発電も、これまたスポットに設置して電線に繋ぐだけで自然と動き始めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_02.CgMxAeJp_Zg3CMS.webp&quot; srcset=&quot;/_astro/04_02.CgMxAeJp_1eDD3n.webp 640w, /_astro/04_02.CgMxAeJp_1YDGtR.webp 750w, /_astro/04_02.CgMxAeJp_1m5H63.webp 828w, /_astro/04_02.CgMxAeJp_cw014.webp 1080w, /_astro/04_02.CgMxAeJp_1P42mi.webp 1280w, /_astro/04_02.CgMxAeJp_2865ck.webp 1668w, /_astro/04_02.CgMxAeJp_Zg3CMS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発電できるスポットは、惑星の中を探す必要があるので、スキャンして探索しましょう。水力発電スポットのスキャンは、マイルストーンを達成するとアンロックされます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_03.C148ceRh_Zd7NFJ.webp&quot; srcset=&quot;/_astro/04_03.C148ceRh_Z1dlswm.webp 640w, /_astro/04_03.C148ceRh_Zslp5R.webp 750w, /_astro/04_03.C148ceRh_Z15TotG.webp 828w, /_astro/04_03.C148ceRh_frO8d.webp 1080w, /_astro/04_03.C148ceRh_1RYQtr.webp 1280w, /_astro/04_03.C148ceRh_2b1Tjt.webp 1668w, /_astro/04_03.C148ceRh_Zd7NFJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_04.B6m2GHMD_6X2tP.webp&quot; srcset=&quot;/_astro/04_04.B6m2GHMD_6lcNJ.webp 640w, /_astro/04_04.B6m2GHMD_Qlgfe.webp 750w, /_astro/04_04.B6m2GHMD_dMgQp.webp 828w, /_astro/04_04.B6m2GHMD_zxFiM.webp 1080w, /_astro/04_04.B6m2GHMD_2d5HE1.webp 1280w, /_astro/04_04.B6m2GHMD_2v7Ku3.webp 1668w, /_astro/04_04.B6m2GHMD_6X2tP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発電スポットを探しに行く前に、ワイヤーと鋼鉄パイプをちゃんと所持しているかどうかを確認しましょう。&lt;/p&gt;&lt;p&gt;この水力発電機を設置するためには、沢山のワイヤーと鋼鉄パイプが必要になってきます。一つの視界に、10箇所の水力発電スポットが見つかることもありますので、ふんだんに用意しておくに越したことはありません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_11.tn85aQ3n_vBvIl.webp&quot; srcset=&quot;/_astro/04_11.tn85aQ3n_78HgK.webp 640w, /_astro/04_11.tn85aQ3n_R8KHf.webp 750w, /_astro/04_11.tn85aQ3n_ezLjq.webp 828w, /_astro/04_11.tn85aQ3n_Yc9xi.webp 1080w, /_astro/04_11.tn85aQ3n_Z2srVUp.webp 1280w, /_astro/04_11.tn85aQ3n_Z2apT5n.webp 1668w, /_astro/04_11.tn85aQ3n_vBvIl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_12.C-hqsgUT_Z2byqUI.webp&quot; srcset=&quot;/_astro/04_12.C-hqsgUT_Z1BfeA4.webp 640w, /_astro/04_12.C-hqsgUT_ZQfb9z.webp 750w, /_astro/04_12.C-hqsgUT_Z1tNaxo.webp 828w, /_astro/04_12.C-hqsgUT_Z1HXN6L.webp 1080w, /_astro/04_12.C-hqsgUT_Z5qKKx.webp 1280w, /_astro/04_12.C-hqsgUT_cAh4u.webp 1668w, /_astro/04_12.C-hqsgUT_Z2byqUI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;火力発電の使い方&lt;a href=&quot;#火力発電の使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;火力発電もあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_01_02.CEAWgBVz_ZljSOU.webp&quot; srcset=&quot;/_astro/05_01_02.CEAWgBVz_ZaivOj.webp 640w, /_astro/05_01_02.CEAWgBVz_2wuWXC.webp 750w, /_astro/05_01_02.CEAWgBVz_1hBFAL.webp 828w, /_astro/05_01_02.CEAWgBVz_23b9Ql.webp 1080w, /_astro/05_01_02.CEAWgBVz_Z1quHql.webp 1280w, /_astro/05_01_02.CEAWgBVz_Z2kKCM8.webp 1668w, /_astro/05_01_02.CEAWgBVz_ZljSOU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_01_03.bs2rP76S_Z2mSRYE.webp&quot; srcset=&quot;/_astro/05_01_03.bs2rP76S_Z1xkNNJ.webp 640w, /_astro/05_01_03.bs2rP76S_19sEYc.webp 750w, /_astro/05_01_03.bs2rP76S_Z5pBnE.webp 828w, /_astro/05_01_03.bs2rP76S_1BaGB.webp 1080w, /_astro/05_01_03.bs2rP76S_1C7rdQ.webp 1280w, /_astro/05_01_03.bs2rP76S_HQvR4.webp 1668w, /_astro/05_01_03.bs2rP76S_Z2mSRYE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;火力発電を行うためには、様々な設備を設置する必要があります。それらの設備に、Mk.1があったり、Mk.3のようなものがあったり、燃料にバイオマスを使えたりウランを使えたり、まあ色々な要素が盛り込まれている発電方式です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_07.CAyY5QWF_VSVIY.webp&quot; srcset=&quot;/_astro/04_07.CAyY5QWF_Zm1Jhz.webp 640w, /_astro/04_07.CAyY5QWF_nXj8U.webp 750w, /_astro/04_07.CAyY5QWF_ZezFeT.webp 828w, /_astro/04_07.CAyY5QWF_1ptzxV.webp 1080w, /_astro/04_07.CAyY5QWF_Z22avTL.webp 1280w, /_astro/04_07.CAyY5QWF_Z1J8t4J.webp 1668w, /_astro/04_07.CAyY5QWF_VSVIY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;火力発電の流れ&lt;a href=&quot;#火力発電の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;火力発電は、以下の流れで行うことになります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;水を汲み上げる。（火力発電では「蒸気」がエネルギーの元になります。）&lt;/li&gt;
&lt;li&gt;燃料をヒーターに入れて暖める。（水を温めて蒸気を作る必要があります。）&lt;/li&gt;
&lt;li&gt;ヒーターの熱によって暖まったボイラーの中で、水が「高圧」蒸気になる。&lt;/li&gt;
&lt;li&gt;ボイラーを暖める過程で、二酸化炭素が排出される。&lt;/li&gt;
&lt;li&gt;ボイラーを動かし続けるために、を設置して、二酸化炭素を外気へ逃がす。&lt;/li&gt;
&lt;li&gt;「高圧」蒸気をタービンに供給することで、ジェネレーターが動く。&lt;/li&gt;
&lt;li&gt;ジェネレーターを動かす過程で、「低圧」蒸気が排出される。&lt;/li&gt;
&lt;li&gt;ジェネレーターを動かし続けるために、冷却タワーを設置して、「低圧」蒸気を外気へ逃がす。&lt;/li&gt;
&lt;li&gt;ジェネレーターを動かし続けることによって、恒久的に発電されるようになる。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_08.BwFcSvTJ_WJkaw.webp&quot; srcset=&quot;/_astro/04_08.BwFcSvTJ_1L50tN.webp 640w, /_astro/04_08.BwFcSvTJ_2w53Ui.webp 750w, /_astro/04_08.BwFcSvTJ_1Sw4wt.webp 828w, /_astro/04_08.BwFcSvTJ_1qjWYt.webp 1080w, /_astro/04_08.BwFcSvTJ_Z21k8te.webp 1280w, /_astro/04_08.BwFcSvTJ_Z1Ii5Dc.webp 1668w, /_astro/04_08.BwFcSvTJ_WJkaw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1. 水を汲み上げる。（火力発電では「蒸気」がエネルギーの元になります。）&lt;a href=&quot;#1-水を汲み上げる火力発電では蒸気がエネルギーの元になります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;揚水機で「蒸気」を作るために必要な水を汲み上げます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_06.C-NO2-ka_Z5JpAg.webp&quot; srcset=&quot;/_astro/05_06.C-NO2-ka_Z2wa4rm.webp 640w, /_astro/05_06.C-NO2-ka_Z1La10R.webp 750w, /_astro/05_06.C-NO2-ka_Z2oI0oG.webp 828w, /_astro/05_06.C-NO2-ka_mPddG.webp 1080w, /_astro/05_06.C-NO2-ka_20nfyU.webp 1280w, /_astro/05_06.C-NO2-ka_2ipioW.webp 1668w, /_astro/05_06.C-NO2-ka_Z5JpAg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 燃料をヒーターに入れて暖める。（水を温めて蒸気を作る必要があります。）&lt;a href=&quot;#2-燃料をヒーターに入れて暖める水を温めて蒸気を作る必要があります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ヒーターを暖めるために必要な燃料を詰めます。例えば、バイオマスや石炭を燃料として利用することが可能です。マイルストーンをもう少し進めていけば、原油やウランなどを燃料として利用できるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_07.DV1P_hkE_7gtoo.webp&quot; srcset=&quot;/_astro/05_07.DV1P_hkE_1Tq6Xp.webp 640w, /_astro/05_07.DV1P_hkE_Z2pKXp2.webp 750w, /_astro/05_07.DV1P_hkE_21Rb15.webp 828w, /_astro/05_07.DV1P_hkE_zQ7dl.webp 1080w, /_astro/05_07.DV1P_hkE_2do9yz.webp 1280w, /_astro/05_07.DV1P_hkE_2vqcoB.webp 1668w, /_astro/05_07.DV1P_hkE_7gtoo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. ヒーターの熱によって暖まったボイラーの中で、水が「高圧」蒸気になる。&lt;a href=&quot;#3-ヒーターの熱によって暖まったボイラーの中で水が高圧蒸気になる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ヒーターでボイラーを動かし続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_08_01.g3X6hJD9_Zol7Tv.webp&quot; srcset=&quot;/_astro/05_08_01.g3X6hJD9_1MFepV.webp 640w, /_astro/05_08_01.g3X6hJD9_ZzHpA4.webp 750w, /_astro/05_08_01.g3X6hJD9_Z1OAGWU.webp 828w, /_astro/05_08_01.g3X6hJD9_209ULK.webp 1080w, /_astro/05_08_01.g3X6hJD9_Z1tvVuV.webp 1280w, /_astro/05_08_01.g3X6hJD9_Z2nLQQI.webp 1668w, /_astro/05_08_01.g3X6hJD9_Zol7Tv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;正しくボイラーが動いていれば、ボイラーから「高圧」蒸気が搬出されるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_08_02.CyUC6wI4_M5frR.webp&quot; srcset=&quot;/_astro/05_08_02.CyUC6wI4_1uYXQW.webp 640w, /_astro/05_08_02.CyUC6wI4_ZRnF93.webp 750w, /_astro/05_08_02.CyUC6wI4_Z27gWvT.webp 828w, /_astro/05_08_02.CyUC6wI4_Z1SAOEN.webp 1080w, /_astro/05_08_02.CyUC6wI4_Zi5y8y.webp 1280w, /_astro/05_08_02.CyUC6wI4_Z1cltul.webp 1668w, /_astro/05_08_02.CyUC6wI4_M5frR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. ボイラーを暖める過程で、二酸化炭素が排出される。&lt;a href=&quot;#4-ボイラーを暖める過程で二酸化炭素が排出される&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ボイラーが「高圧」蒸気を搬出すると同時に、ヒーターが「二酸化炭素」を排出します。二酸化炭素をしっかり排出しないと、ヒーターが稼働し続けられないので、ボイラーの稼働も停止してしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_09.BO3ti58-_1hQPK2.webp&quot; srcset=&quot;/_astro/05_09.BO3ti58-_8EFW8.webp 640w, /_astro/05_09.BO3ti58-_SEJnC.webp 750w, /_astro/05_09.BO3ti58-_g6JYN.webp 828w, /_astro/05_09.BO3ti58-_1KrtyY.webp 1080w, /_astro/05_09.BO3ti58-_Z1GcBSI.webp 1280w, /_astro/05_09.BO3ti58-_Z1oaz3G.webp 1668w, /_astro/05_09.BO3ti58-_1hQPK2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. ボイラーを動かし続けるために、二酸化炭素の煙突を設置して、二酸化炭素を外気へ逃がす。&lt;a href=&quot;#5-ボイラーを動かし続けるために二酸化炭素の煙突を設置して二酸化炭素を外気へ逃がす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「二酸化炭素の煙突（CO2 Chimney）」で、二酸化炭素を外気へ逃がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_10.CTZMIlNC_CDJmM.webp&quot; srcset=&quot;/_astro/05_10.CTZMIlNC_2ps2qN.webp 640w, /_astro/05_10.CTZMIlNC_Z1TJ2VD.webp 750w, /_astro/05_10.CTZMIlNC_2wT6tt.webp 828w, /_astro/05_10.CTZMIlNC_16enbJ.webp 1080w, /_astro/05_10.CTZMIlNC_Z2lpIgX.webp 1280w, /_astro/05_10.CTZMIlNC_Z23nFqV.webp 1668w, /_astro/05_10.CTZMIlNC_CDJmM.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. 「高圧」蒸気をタービンに供給することで、ジェネレーターが動く。&lt;a href=&quot;#6-高圧蒸気をタービンに供給することでジェネレーターが動く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;タービンが、「高圧」蒸気を動力へと変換して、タービンに繋っているジェネレーターの稼働が開始します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_11.ZXmDMzMv_Z1d9ElC.webp&quot; srcset=&quot;/_astro/05_11.ZXmDMzMv_3Iz2O.webp 640w, /_astro/05_11.ZXmDMzMv_NICtj.webp 750w, /_astro/05_11.ZXmDMzMv_baD5u.webp 828w, /_astro/05_11.ZXmDMzMv_ZJz1wF.webp 1080w, /_astro/05_11.ZXmDMzMv_RX0Ny.webp 1280w, /_astro/05_11.ZXmDMzMv_1b03DA.webp 1668w, /_astro/05_11.ZXmDMzMv_Z1d9ElC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. ジェネレーターを動かす過程で、「低圧」蒸気が排出される。&lt;a href=&quot;#7-ジェネレーターを動かす過程で低圧蒸気が排出される&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;タービンの横側の方から、「低圧」蒸気が排出されます。それを逃さないとジェネレーターを動かし続けることは出来ません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_12_01.DDMfWzxb_ZaUUbz.webp&quot; srcset=&quot;/_astro/05_12_01.DDMfWzxb_Z1j0NAH.webp 640w, /_astro/05_12_01.DDMfWzxb_1nMFce.webp 750w, /_astro/05_12_01.DDMfWzxb_8TnOn.webp 828w, /_astro/05_12_01.DDMfWzxb_2dz8uG.webp 1080w, /_astro/05_12_01.DDMfWzxb_Z1g6IM0.webp 1280w, /_astro/05_12_01.DDMfWzxb_Z2amE8M.webp 1668w, /_astro/05_12_01.DDMfWzxb_ZaUUbz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_12_02.Cb5XQZVY_k4iin.webp&quot; srcset=&quot;/_astro/05_12_02.Cb5XQZVY_ZsXPFs.webp 640w, /_astro/05_12_02.Cb5XQZVY_2dOD7t.webp 750w, /_astro/05_12_02.Cb5XQZVY_XVlJC.webp 828w, /_astro/05_12_02.Cb5XQZVY_Z2lBLOi.webp 1080w, /_astro/05_12_02.Cb5XQZVY_ZK6vi3.webp 1280w, /_astro/05_12_02.Cb5XQZVY_Z1EmqDP.webp 1668w, /_astro/05_12_02.Cb5XQZVY_k4iin.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. ジェネレーターを動かし続けるために、冷却タワーを設置して、「低圧」蒸気を外気へ逃がす。&lt;a href=&quot;#8-ジェネレーターを動かし続けるために冷却タワーを設置して低圧蒸気を外気へ逃がす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;蒸気冷却タワー（Steam Cooling Tower）を設置して、「低圧」蒸気を外気へ逃がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_13_01.CB5J_SJ3_Z1VEEi.webp&quot; srcset=&quot;/_astro/05_13_01.CB5J_SJ3_OlWS9.webp 640w, /_astro/05_13_01.CB5J_SJ3_Z1y1G7Q.webp 750w, /_astro/05_13_01.CB5J_SJ3_2hhaje.webp 828w, /_astro/05_13_01.CB5J_SJ3_2myo1X.webp 1080w, /_astro/05_13_01.CB5J_SJ3_Z177tfI.webp 1280w, /_astro/05_13_01.CB5J_SJ3_Z21noBv.webp 1668w, /_astro/05_13_01.CB5J_SJ3_Z1VEEi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. ジェネレーターを動かし続けることによって、恒久的に発電されるようになる。&lt;a href=&quot;#9-ジェネレーターを動かし続けることによって恒久的に発電されるようになる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ボイラーによる水から蒸気への変換、そしてタービンによる蒸気から動力への変換が正常に行われると、持続的エネルギーとして我が工場を発展させるための礎となります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_14_01.ECLK_FaO_pzgLn.webp&quot; srcset=&quot;/_astro/05_14_01.ECLK_FaO_Z1VQwDh.webp 640w, /_astro/05_14_01.ECLK_FaO_JVW9E.webp 750w, /_astro/05_14_01.ECLK_FaO_ZtVkdc.webp 828w, /_astro/05_14_01.ECLK_FaO_Z2g6Nli.webp 1080w, /_astro/05_14_01.ECLK_FaO_ZEAwO3.webp 1280w, /_astro/05_14_01.ECLK_FaO_Z1yQsaP.webp 1668w, /_astro/05_14_01.ECLK_FaO_pzgLn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;燃料が供給され続ける限り、この火力発電システムは稼働し続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_14_02.iB48shXh_2fB9fb.webp&quot; srcset=&quot;/_astro/05_14_02.iB48shXh_ZzbW9I.webp 640w, /_astro/05_14_02.iB48shXh_27BwDd.webp 750w, /_astro/05_14_02.iB48shXh_RIfgm.webp 828w, /_astro/05_14_02.iB48shXh_Zq4URu.webp 1080w, /_astro/05_14_02.iB48shXh_1aqkDK.webp 1280w, /_astro/05_14_02.iB48shXh_gaphX.webp 1668w, /_astro/05_14_02.iB48shXh_2fB9fb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;燃料が尽きると勿論、火力発電システムは停止します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_09.C14NpVOe_Z23qpu1.webp&quot; srcset=&quot;/_astro/04_09.C14NpVOe_c54jT.webp 640w, /_astro/04_09.C14NpVOe_W57Ko.webp 750w, /_astro/04_09.C14NpVOe_jw8mz.webp 828w, /_astro/04_09.C14NpVOe_Z1zPLF4.webp 1080w, /_astro/04_09.C14NpVOe_2GfFa.webp 1280w, /_astro/04_09.C14NpVOe_kIivc.webp 1668w, /_astro/04_09.C14NpVOe_Z23qpu1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;動画で確認したい場合はこちら。&lt;a href=&quot;#動画で確認したい場合はこちら&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;火力発電の方法を動画の方で確認してみたい方はこちらをどうそ。26話あたりから火力発電システムづくりが始まっています。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bUF9WGHwnuY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原子炉（リアクター）の使い方&lt;a href=&quot;#原子炉リアクターの使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原子炉というものも利用できます。原子炉すなわち「リアクター」というものです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_13.MO4CG4MD_Z1Rh95S.webp&quot; srcset=&quot;/_astro/04_13.MO4CG4MD_Z2pEfqJ.webp 640w, /_astro/04_13.MO4CG4MD_Z1EEc0f.webp 750w, /_astro/04_13.MO4CG4MD_Z2idbo4.webp 828w, /_astro/04_13.MO4CG4MD_Z1oGvgV.webp 1080w, /_astro/04_13.MO4CG4MD_dPw4i.webp 1280w, /_astro/04_13.MO4CG4MD_vRyTk.webp 1668w, /_astro/04_13.MO4CG4MD_Z1Rh95S.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;リアクターを動かす「リアクターコア」を作るまで&lt;a href=&quot;#リアクターを動かすリアクターコアを作るまで&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このModを入れると「ソリウム」や「デューテリウム」等の原料が追加されるので、それらを使ったレシピをこなしていくことで、「リアクターコア」を使ってリアクター発電を行うことが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_10.BxQhG3Gu_1nJaXo.webp&quot; srcset=&quot;/_astro/04_10.BxQhG3Gu_Zl9UCK.webp 640w, /_astro/04_10.BxQhG3Gu_oP7MJ.webp 750w, /_astro/04_10.BxQhG3Gu_ZdHQA5.webp 828w, /_astro/04_10.BxQhG3Gu_1QjNMl.webp 1080w, /_astro/04_10.BxQhG3Gu_Z1AkhFm.webp 1280w, /_astro/04_10.BxQhG3Gu_Z1iiePk.webp 1668w, /_astro/04_10.BxQhG3Gu_1nJaXo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発電するまでの流れは、以下の通りです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ディーニウムから濃縮ディーニウムを生産する。&lt;/li&gt;
&lt;li&gt;濃縮ディーニウムからディーノリウムを生産する。&lt;/li&gt;
&lt;li&gt;ディーノリウムから無濾過デューテリウムを生産する。&lt;/li&gt;
&lt;li&gt;無濾過デューテリウムから液体デューテリウムを生産する。&lt;/li&gt;
&lt;li&gt;そして、空のリアクターコアを別途で作る。&lt;/li&gt;
&lt;li&gt;液体デューテリウムを空のリアクターコアに充填して、先進的なリアクターコアを作ります。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;下記の画像は、上記の流れを図示したものとなります。（別のModを入れていたので、レシピが少し違いますが。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_11.DXBLh6Vg_27MGJT.webp&quot; srcset=&quot;/_astro/04_11.DXBLh6Vg_19lfO5.webp 640w, /_astro/04_11.DXBLh6Vg_1Tljfz.webp 750w, /_astro/04_11.DXBLh6Vg_1gMjQK.webp 828w, /_astro/04_11.DXBLh6Vg_Z2tNNf5.webp 1080w, /_astro/04_11.DXBLh6Vg_ZQgKSQ.webp 1280w, /_astro/04_11.DXBLh6Vg_ZyeI3O.webp 1668w, /_astro/04_11.DXBLh6Vg_27MGJT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのリアクターコアをリアクターに搬入すると、晴れてリアクターを使った発電を開始することが出来ます・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_12.C8HRdnTx_Pttwx.webp&quot; srcset=&quot;/_astro/04_12.C8HRdnTx_BMXMK.webp 640w, /_astro/04_12.C8HRdnTx_1mN2ef.webp 750w, /_astro/04_12.C8HRdnTx_Jf2Pq.webp 828w, /_astro/04_12.C8HRdnTx_1j47lu.webp 1080w, /_astro/04_12.C8HRdnTx_Z28zY7d.webp 1280w, /_astro/04_12.C8HRdnTx_Z1PxVhb.webp 1668w, /_astro/04_12.C8HRdnTx_Pttwx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リアクターには小さいものと大きいものがあり、こちらは小さいリアクターになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_19.COdiWZqC_Z2rWAtu.webp&quot; srcset=&quot;/_astro/06_19.COdiWZqC_Z2gN4e5.webp 640w, /_astro/06_19.COdiWZqC_Z1vN0MA.webp 750w, /_astro/06_19.COdiWZqC_Z29m0bp.webp 828w, /_astro/06_19.COdiWZqC_Z1YmWEx.webp 1080w, /_astro/06_19.COdiWZqC_ZlOUjj.webp 1280w, /_astro/06_19.COdiWZqC_Z3MRth.webp 1668w, /_astro/06_19.COdiWZqC_Z2rWAtu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;小さいリアクターのサイズはこれぐらいです。
しかし、これよりもっと「大きいリアクター」がこのModには存在していて、その分だけ大きい方が発電量が多いです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_20.DYqh-Bkm_1UkLgR.webp&quot; srcset=&quot;/_astro/06_20.DYqh-Bkm_ZO7Whp.webp 640w, /_astro/06_20.DYqh-Bkm_Z47SPU.webp 750w, /_astro/06_20.DYqh-Bkm_ZGFSeJ.webp 828w, /_astro/06_20.DYqh-Bkm_2nUp5O.webp 1080w, /_astro/06_20.DYqh-Bkm_Z13IGmS.webp 1280w, /_astro/06_20.DYqh-Bkm_ZKGDwQ.webp 1668w, /_astro/06_20.DYqh-Bkm_1UkLgR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;大きいリアクターの使い方&lt;a href=&quot;#大きいリアクターの使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;小さいリアクターは、ただ設置してリアクターコアを搬入すれば発電を始めてくれますが、大きいリアクターはそんな簡単に発電を始めてくれません。&lt;/p&gt;&lt;p&gt;大きいものになるとこれぐらい大きくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_26_01.CFVcAQwA_Z2lohhV.webp&quot; srcset=&quot;/_astro/06_26_01.CFVcAQwA_1SPmgW.webp 640w, /_astro/06_26_01.CFVcAQwA_ZtxhJ3.webp 750w, /_astro/06_26_01.CFVcAQwA_Z1Iqz6T.webp 828w, /_astro/06_26_01.CFVcAQwA_36Lok.webp 1080w, /_astro/06_26_01.CFVcAQwA_1DC2Uz.webp 1280w, /_astro/06_26_01.CFVcAQwA_Jm7yM.webp 1668w, /_astro/06_26_01.CFVcAQwA_Z2lohhV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;一応、ゲーム内で確認できるModの説明書では、工程が11段階になっています。しかし今回は、僕なりに手順を書いてみました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_26_02.BhbwLFgC_Z18QXS6.webp&quot; srcset=&quot;/_astro/06_26_02.BhbwLFgC_WaGNp.webp 640w, /_astro/06_26_02.BhbwLFgC_Z1qcWcA.webp 750w, /_astro/06_26_02.BhbwLFgC_2p5Teu.webp 828w, /_astro/06_26_02.BhbwLFgC_1fD4Na.webp 1080w, /_astro/06_26_02.BhbwLFgC_Z2e2Mtw.webp 1280w, /_astro/06_26_02.BhbwLFgC_1VSpXC.webp 1668w, /_astro/06_26_02.BhbwLFgC_Z18QXS6.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;大きいリアクター（リアクターモジュールと呼んだりもします。）を使う流れは以下の通りになります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;大きいリアクターを構成する設備のレシピを、マイルストーンで開放する。&lt;/li&gt;
&lt;li&gt;大きいリアクターを構成する設備のレシピを、研究で開放する。&lt;/li&gt;
&lt;li&gt;大きいリアクターの構成要素「リアクターの土台」と「サポートリング」を設置する。&lt;/li&gt;
&lt;li&gt;大きいリアクターの構成要素「チャンバー」を設置する。&lt;/li&gt;
&lt;li&gt;リアクターのコイルをロックするためのボタンをONにする。&lt;/li&gt;
&lt;li&gt;リアクターコアを搬入する。&lt;/li&gt;
&lt;li&gt;初期電力として、100MW（2024-11-09時点）を用意する。&lt;/li&gt;
&lt;li&gt;リアクター操作盤の値を「25%」に設定する。&lt;/li&gt;
&lt;li&gt;リアクターを初期チャージする。&lt;/li&gt;
&lt;li&gt;リアクターの稼働を維持するために冷却材を搬入する。&lt;/li&gt;
&lt;li&gt;リアクターコアを消費し切ると、「空の」リアクターコアを排出するので再利用するなり処理する。&lt;/li&gt;
&lt;li&gt;リアクターの発電の余剰分を蓄電装置で充電する。&lt;/li&gt;
&lt;li&gt;リアクターのコイルの数を増やす。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1. 大きいリアクターを構成する設備のレシピを、マイルストーンで開放する。&lt;a href=&quot;#1-大きいリアクターを構成する設備のレシピをマイルストーンで開放する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_27_01.CrvKJgOv_Z1ugCis.webp&quot; srcset=&quot;/_astro/06_27_01.CrvKJgOv_Z1vBhOl.webp 640w, /_astro/06_27_01.CrvKJgOv_1bcbXA.webp 750w, /_astro/06_27_01.CrvKJgOv_Z3G5og.webp 828w, /_astro/06_27_01.CrvKJgOv_TeqnN.webp 1080w, /_astro/06_27_01.CrvKJgOv_2uJGU3.webp 1280w, /_astro/06_27_01.CrvKJgOv_1AtLyg.webp 1668w, /_astro/06_27_01.CrvKJgOv_Z1ugCis.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 大きいリアクターを構成する設備のレシピを、研究で開放する。&lt;a href=&quot;#2-大きいリアクターを構成する設備のレシピを研究で開放する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_28_01.DjmIXczA_Zx61jb.webp&quot; srcset=&quot;/_astro/06_28_01.DjmIXczA_Dlgzv.webp 640w, /_astro/06_28_01.DjmIXczA_Z1J2nqu.webp 750w, /_astro/06_28_01.DjmIXczA_26gt0A.webp 828w, /_astro/06_28_01.DjmIXczA_1Qp2n5.webp 1080w, /_astro/06_28_01.DjmIXczA_Z1CgOTB.webp 1280w, /_astro/06_28_01.DjmIXczA_Z2wwKgo.webp 1668w, /_astro/06_28_01.DjmIXczA_Zx61jb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この「先進的な冷却」（Advanced Cooling）のノードで完了です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_28_02.Bdc2nALT_QGuMF.webp&quot; srcset=&quot;/_astro/06_28_02.Bdc2nALT_2kb0LT.webp 640w, /_astro/06_28_02.Bdc2nALT_Z3cDe6.webp 750w, /_astro/06_28_02.Bdc2nALT_Z1i5UAW.webp 828w, /_astro/06_28_02.Bdc2nALT_Z1NYzk0.webp 1080w, /_astro/06_28_02.Bdc2nALT_ZdtiMK.webp 1280w, /_astro/06_28_02.Bdc2nALT_Z17Je9x.webp 1668w, /_astro/06_28_02.Bdc2nALT_QGuMF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 大きいリアクターの構成要素「リアクターの土台」と「サポートリング」を設置する。&lt;a href=&quot;#3-大きいリアクターの構成要素リアクターの土台とサポートリングを設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_29_01.IgILe6dS_1SFlpy.webp&quot; srcset=&quot;/_astro/06_29_01.IgILe6dS_I91yY.webp 640w, /_astro/06_29_01.IgILe6dS_Z1EeCr1.webp 750w, /_astro/06_29_01.IgILe6dS_2b4e04.webp 828w, /_astro/06_29_01.IgILe6dS_ZM0IH7.webp 1080w, /_astro/06_29_01.IgILe6dS_NuwO8.webp 1280w, /_astro/06_29_01.IgILe6dS_Z5KnwE.webp 1668w, /_astro/06_29_01.IgILe6dS_1SFlpy.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_29_02.f7pKOxMo_1Ytdrr.webp&quot; srcset=&quot;/_astro/06_29_02.f7pKOxMo_ZzHGhc.webp 640w, /_astro/06_29_02.f7pKOxMo_275MvJ.webp 750w, /_astro/06_29_02.f7pKOxMo_Rcv8S.webp 828w, /_astro/06_29_02.f7pKOxMo_ZGcQFe.webp 1080w, /_astro/06_29_02.f7pKOxMo_TioQ1.webp 1280w, /_astro/06_29_02.f7pKOxMo_2tue.webp 1668w, /_astro/06_29_02.f7pKOxMo_1Ytdrr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. 大きいリアクターの構成要素「チャンバー」を設置する。&lt;a href=&quot;#4-大きいリアクターの構成要素チャンバーを設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このサポートリングの同士の縦の隙間に、リアクターチャンバーを設置していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_30_01.vTgVGQkN_Z1VbE1r.webp&quot; srcset=&quot;/_astro/06_30_01.vTgVGQkN_Z21uqAU.webp 640w, /_astro/06_30_01.vTgVGQkN_Fj3c1.webp 750w, /_astro/06_30_01.vTgVGQkN_ZyzeaP.webp 828w, /_astro/06_30_01.vTgVGQkN_sjoEO.webp 1080w, /_astro/06_30_01.vTgVGQkN_23OFc4.webp 1280w, /_astro/06_30_01.vTgVGQkN_19yJPh.webp 1668w, /_astro/06_30_01.vTgVGQkN_Z1VbE1r.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_30_02.Bv5FjrML_1zjO6l.webp&quot; srcset=&quot;/_astro/06_30_02.Bv5FjrML_1GyhXL.webp 640w, /_astro/06_30_02.Bv5FjrML_ZFOm2e.webp 750w, /_astro/06_30_02.Bv5FjrML_Z1UHDp5.webp 828w, /_astro/06_30_02.Bv5FjrML_Z16mg1k.webp 1080w, /_astro/06_30_02.Bv5FjrML_u90uU.webp 1280w, /_astro/06_30_02.Bv5FjrML_Zp6TPR.webp 1668w, /_astro/06_30_02.Bv5FjrML_1zjO6l.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;チャンバーは10個設置する必要があります。10個設置すると、リアクターのコイルが1つ完成します。そのリアクターのコイルで発電していくわけです。&lt;/p&gt;&lt;p&gt;10個全て設置しないとリアクターコイルは動かせません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_30_03.Cr80VxBi_Y20fK.webp&quot; srcset=&quot;/_astro/06_30_03.Cr80VxBi_2jWLT.webp 640w, /_astro/06_30_03.Cr80VxBi_Z2l3Ge6.webp 750w, /_astro/06_30_03.Cr80VxBi_1ufacY.webp 828w, /_astro/06_30_03.Cr80VxBi_Z1GE4QU.webp 1080w, /_astro/06_30_03.Cr80VxBi_Z68NkF.webp 1280w, /_astro/06_30_03.Cr80VxBi_Z10oIGs.webp 1668w, /_astro/06_30_03.Cr80VxBi_Y20fK.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. リアクターのコイルをロックするためのボタンをONにする。&lt;a href=&quot;#5-リアクターのコイルをロックするためのボタンをonにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターのサポートリングで、リアクターのコイルをロックするためのボタンをONにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_31_01.DnxdAGPt_I5pC6.webp&quot; srcset=&quot;/_astro/06_31_01.DnxdAGPt_Z1reV5e.webp 640w, /_astro/06_31_01.DnxdAGPt_1fyxHH.webp 750w, /_astro/06_31_01.DnxdAGPt_FgkQ.webp 828w, /_astro/06_31_01.DnxdAGPt_Z1WAEuz.webp 1080w, /_astro/06_31_01.DnxdAGPt_Zm5nXk.webp 1280w, /_astro/06_31_01.DnxdAGPt_Z1gljk7.webp 1668w, /_astro/06_31_01.DnxdAGPt_I5pC6.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;チャンバーと同じく10箇所あるので全てONにします。これで、リアクター起動の条件の1つがクリアです。条件はあと2つあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_31_02.BYfoUPQe_Z1NNOQL.webp&quot; srcset=&quot;/_astro/06_31_02.BYfoUPQe_1zRGgx.webp 640w, /_astro/06_31_02.BYfoUPQe_ZMuWJs.webp 750w, /_astro/06_31_02.BYfoUPQe_Z22of7j.webp 828w, /_astro/06_31_02.BYfoUPQe_zGdOu.webp 1080w, /_astro/06_31_02.BYfoUPQe_2bculJ.webp 1280w, /_astro/06_31_02.BYfoUPQe_1gVyYW.webp 1668w, /_astro/06_31_02.BYfoUPQe_Z1NNOQL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. リアクターコアを搬入する。&lt;a href=&quot;#6-リアクターコアを搬入する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;同じくリアクターのサポートリングで、リアクターコアを搬入します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_32_01.DARO5rDW_20Fnpq.webp&quot; srcset=&quot;/_astro/06_32_01.DARO5rDW_ZzFkje.webp 640w, /_astro/06_32_01.DARO5rDW_2789tH.webp 750w, /_astro/06_32_01.DARO5rDW_ReR6Q.webp 828w, /_astro/06_32_01.DARO5rDW_ZF0GHf.webp 1080w, /_astro/06_32_01.DARO5rDW_UuyO0.webp 1280w, /_astro/06_32_01.DARO5rDW_1eDsd.webp 1668w, /_astro/06_32_01.DARO5rDW_20Fnpq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;搬入経路は、手動でも自動でも構いません。まあでも、自動化させる方がベターですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_32_02.CsgRGPXD_Z101s1b.webp&quot; srcset=&quot;/_astro/06_32_02.CsgRGPXD_1hsSeY.webp 640w, /_astro/06_32_02.CsgRGPXD_Z15TKL1.webp 750w, /_astro/06_32_02.CsgRGPXD_Z2kN38R.webp 828w, /_astro/06_32_02.CsgRGPXD_1otAF5.webp 1080w, /_astro/06_32_02.CsgRGPXD_Z25cgBB.webp 1280w, /_astro/06_32_02.CsgRGPXD_25IVPx.webp 1668w, /_astro/06_32_02.CsgRGPXD_Z101s1b.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リアクターコアの搬入口は内側にあるので、上か下からでないとベルトコンベアを通すことが出来ません。&lt;/p&gt;&lt;p&gt;これで、リアクター起動の条件のもう1つがクリアです。あと1つです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_32_03.Cqkmessc_18tAT2.webp&quot; srcset=&quot;/_astro/06_32_03.Cqkmessc_cCWhk.webp 640w, /_astro/06_32_03.Cqkmessc_Z2aJGIF.webp 750w, /_astro/06_32_03.Cqkmessc_1Ey9Hp.webp 828w, /_astro/06_32_03.Cqkmessc_Z1xctdD.webp 1080w, /_astro/06_32_03.Cqkmessc_3iMiB.webp 1280w, /_astro/06_32_03.Cqkmessc_ZPW83b.webp 1668w, /_astro/06_32_03.Cqkmessc_18tAT2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. 初期電力として、100MW（2024-11-09時点）を用意する。&lt;a href=&quot;#7-初期電力として100mw2024-11-09時点を用意する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターを動かすためには、リアクターコアとは別に何らかの形で電力を供給する必要があります。&lt;/p&gt;&lt;p&gt;これで、リアクター起動の条件の3つ全てがクリアされました！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_33_01.sa6KLsue_Z26Shut.webp&quot; srcset=&quot;/_astro/06_33_01.sa6KLsue_UgykE.webp 640w, /_astro/06_33_01.sa6KLsue_Z1s75Fl.webp 750w, /_astro/06_33_01.sa6KLsue_2nbKKJ.webp 828w, /_astro/06_33_01.sa6KLsue_hBLbM.webp 1080w, /_astro/06_33_01.sa6KLsue_1S82I2.webp 1280w, /_astro/06_33_01.sa6KLsue_XR7mf.webp 1668w, /_astro/06_33_01.sa6KLsue_Z26Shut.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. リアクター操作盤の値を「25%」に設定する。&lt;a href=&quot;#8-リアクター操作盤の値を25に設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターの土台で、リアクター操作盤を操作できるので、スライドして値を設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_34_01.BxYbUdXx_Z1PufNr.webp&quot; srcset=&quot;/_astro/06_34_01.BxYbUdXx_1zOnIc.webp 640w, /_astro/06_34_01.BxYbUdXx_ZMyghN.webp 750w, /_astro/06_34_01.BxYbUdXx_Z22rxEE.webp 828w, /_astro/06_34_01.BxYbUdXx_y0MRO.webp 1080w, /_astro/06_34_01.BxYbUdXx_29w4p4.webp 1280w, /_astro/06_34_01.BxYbUdXx_1fg93h.webp 1668w, /_astro/06_34_01.BxYbUdXx_Z1PufNr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_34_02.7YNArle-_Z21MJe7.webp&quot; srcset=&quot;/_astro/06_34_02.7YNArle-_ApMBD.webp 640w, /_astro/06_34_02.7YNArle-_Z1LWQom.webp 750w, /_astro/06_34_02.7YNArle-_23l02I.webp 828w, /_astro/06_34_02.7YNArle-_mHjs9.webp 1080w, /_astro/06_34_02.7YNArle-_1XdzYo.webp 1280w, /_astro/06_34_02.7YNArle-_13WECB.webp 1668w, /_astro/06_34_02.7YNArle-_Z21MJe7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. リアクターを初期チャージする。&lt;a href=&quot;#9-リアクターを初期チャージする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、リアクターのサポートリングに戻って、リアクターの初期チャージを開始します。緑の範囲に至るまで「Prime Charge」ボタンを押しっぱなしにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_35_01.DBmsRvqP_1pkcET.webp&quot; srcset=&quot;/_astro/06_35_01.DBmsRvqP_Z6OFrF.webp 640w, /_astro/06_35_01.DBmsRvqP_Z2udksF.webp 750w, /_astro/06_35_01.DBmsRvqP_1l5vXp.webp 828w, /_astro/06_35_01.DBmsRvqP_Z1glRrL.webp 1080w, /_astro/06_35_01.DBmsRvqP_k9o4t.webp 1280w, /_astro/06_35_01.DBmsRvqP_Zz6whj.webp 1668w, /_astro/06_35_01.DBmsRvqP_1pkcET.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これでリアクターの稼働が開始しました！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_35_02.CYUn0Q5E_ZIUHc0.webp&quot; srcset=&quot;/_astro/06_35_02.CYUn0Q5E_ZF58G5.webp 640w, /_astro/06_35_02.CYUn0Q5E_21Il6Q.webp 750w, /_astro/06_35_02.CYUn0Q5E_LP3J0.webp 828w, /_astro/06_35_02.CYUn0Q5E_1Ezlug.webp 1080w, /_astro/06_35_02.CYUn0Q5E_Z1O6vMq.webp 1280w, /_astro/06_35_02.CYUn0Q5E_2lOGEI.webp 1668w, /_astro/06_35_02.CYUn0Q5E_ZIUHc0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし・・・、これで終わりではありません！
「Reactor Triggered EStop - Reason: No Water Or Coolant!」
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_35_03.BCaHbdV2_ZXvYBb.webp&quot; srcset=&quot;/_astro/06_35_03.BCaHbdV2_ZbwFPP.webp 640w, /_astro/06_35_03.BCaHbdV2_2vgMW6.webp 750w, /_astro/06_35_03.BCaHbdV2_1gnvzf.webp 828w, /_astro/06_35_03.BCaHbdV2_1pY455.webp 1080w, /_astro/06_35_03.BCaHbdV2_Z23GNcB.webp 1280w, /_astro/06_35_03.BCaHbdV2_27epfx.webp 1668w, /_astro/06_35_03.BCaHbdV2_ZXvYBb.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. リアクターの稼働を維持するために冷却材を搬入する。&lt;a href=&quot;#10-リアクターの稼働を維持するために冷却材を搬入する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターを稼働させ続けるためには、「冷却材」を搬入し続けなければなりません。先程、研究で開放していたのは、冷却材のレシピと、冷却材をリアクターに搬入するための設備でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_36_01.Bd9qePLV_Z1TWTVo.webp&quot; srcset=&quot;/_astro/06_36_01.Bd9qePLV_Z21s1wO.webp 640w, /_astro/06_36_01.Bd9qePLV_Flsg7.webp 750w, /_astro/06_36_01.Bd9qePLV_ZywO6J.webp 828w, /_astro/06_36_01.Bd9qePLV_tx8JR.webp 1080w, /_astro/06_36_01.Bd9qePLV_253ph7.webp 1280w, /_astro/06_36_01.Bd9qePLV_1aMtUk.webp 1668w, /_astro/06_36_01.Bd9qePLV_Z1TWTVo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リアクターの冷却材を別途製造して、リアクターIOを経由して搬入します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_36_02.AGYObEEn_ZGiSxj.webp&quot; srcset=&quot;/_astro/06_36_02.AGYObEEn_2r7rON.webp 640w, /_astro/06_36_02.AGYObEEn_3IMNN.webp 750w, /_astro/06_36_02.AGYObEEn_Z1b9ty3.webp 828w, /_astro/06_36_02.AGYObEEn_1Hca8W.webp 1080w, /_astro/06_36_02.AGYObEEn_Z1LtH8J.webp 1280w, /_astro/06_36_02.AGYObEEn_2orvjp.webp 1668w, /_astro/06_36_02.AGYObEEn_ZGiSxj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;冷却材を搬入すると、何か緑色に光るボタンが出てくるので、ONにしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_36_03.Bm6JVA7w_ZyvIEE.webp&quot; srcset=&quot;/_astro/06_36_03.Bm6JVA7w_ti53G.webp 640w, /_astro/06_36_03.Bm6JVA7w_Z1T5yWj.webp 750w, /_astro/06_36_03.Bm6JVA7w_1VdhtL.webp 828w, /_astro/06_36_03.Bm6JVA7w_1OYk1B.webp 1080w, /_astro/06_36_03.Bm6JVA7w_Z1DGxg5.webp 1280w, /_astro/06_36_03.Bm6JVA7w_2weFc4.webp 1668w, /_astro/06_36_03.Bm6JVA7w_ZyvIEE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、リアクターを冷却するためには、冷却材に加えて「水」も必要です。併せてリアクターIO経由で搬入しましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_36_04.azQUS1xA_ZwwjY9.webp&quot; srcset=&quot;/_astro/06_36_04.azQUS1xA_Z1tHGNI.webp 640w, /_astro/06_36_04.azQUS1xA_1d5LYd.webp 750w, /_astro/06_36_04.azQUS1xA_Z1MunD.webp 828w, /_astro/06_36_04.azQUS1xA_1QXIH7.webp 1080w, /_astro/06_36_04.azQUS1xA_Z1BH8zz.webp 1280w, /_astro/06_36_04.azQUS1xA_Z2vX3Vm.webp 1668w, /_astro/06_36_04.azQUS1xA_ZwwjY9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. リアクターコアを消費し切ると、「空の」リアクターコアを排出するので再利用するなり処理する。&lt;a href=&quot;#11-リアクターコアを消費し切ると空のリアクターコアを排出するので再利用するなり処理する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターコアは、ウラン燃料坊やプルトニウム燃料棒と同じように寿命があります。&lt;/p&gt;&lt;p&gt;そして、寿命に至ると「空の」リアクターコアを排出するので、リアクター内部で「空のリアクターコア」が溜まらないようにどこかに搬出しましょう。&lt;/p&gt;&lt;p&gt;再利用してリアクターコアにするも良し、破棄してしまうも良し。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_37_01.DvbK7-e9_Z11fCaq.webp&quot; srcset=&quot;/_astro/06_37_01.DvbK7-e9_8nI3p.webp 640w, /_astro/06_37_01.DvbK7-e9_Z2eYUWA.webp 750w, /_astro/06_37_01.DvbK7-e9_1AiUtu.webp 828w, /_astro/06_37_01.DvbK7-e9_1nfqvP.webp 1080w, /_astro/06_37_01.DvbK7-e9_Z26qqKQ.webp 1280w, /_astro/06_37_01.DvbK7-e9_24uLGi.webp 1668w, /_astro/06_37_01.DvbK7-e9_Z11fCaq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. リアクターの発電の余剰分を蓄電装置で充電する。&lt;a href=&quot;#12-リアクターの発電の余剰分を蓄電装置で充電する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このリアクターという設備は、工場からの電力需要が無くても、リアクターコアを無駄に消費して発電してしまう仕様になっています。なので、リアクターの生産電力の余剰分を蓄電装置に充電させた方が良いでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_38_01.DjCI_PB1_28UFgi.webp&quot; srcset=&quot;/_astro/06_38_01.DjCI_PB1_Z14qgE6.webp 640w, /_astro/06_38_01.DjCI_PB1_1Cnd8P.webp 750w, /_astro/06_38_01.DjCI_PB1_ntUKY.webp 828w, /_astro/06_38_01.DjCI_PB1_ZwKoQn.webp 1080w, /_astro/06_38_01.DjCI_PB1_13JQER.webp 1280w, /_astro/06_38_01.DjCI_PB1_9tVj5.webp 1668w, /_astro/06_38_01.DjCI_PB1_28UFgi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. リアクターのコイルの数を増やす。&lt;a href=&quot;#13-リアクターのコイルの数を増やす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;余裕があれば、リアクターのコイルの数を増やして、発電量をさらに増やしましょう。&lt;/p&gt;&lt;p&gt;コイル1つあたりの発電量は5,000MW（2024-11-09時点）ですが、リアクターの土台のリアクター操作盤では、最大で5つまでのコイルを操作することが出来ますので、最大25,000MWの電力を生産することが可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_39_01.CAGe1q3T_1FoQQ9.webp&quot; srcset=&quot;/_astro/06_39_01.CAGe1q3T_Z2oowkl.webp 640w, /_astro/06_39_01.CAGe1q3T_ioWsA.webp 750w, /_astro/06_39_01.CAGe1q3T_ZVtjTg.webp 828w, /_astro/06_39_01.CAGe1q3T_Z10hdgw.webp 1080w, /_astro/06_39_01.CAGe1q3T_Ae3fI.webp 1280w, /_astro/06_39_01.CAGe1q3T_Zj1R64.webp 1668w, /_astro/06_39_01.CAGe1q3T_1FoQQ9.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;コイルが5つあると、操作盤はこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_39_02.h2BSD5R1_2t5Tc1.webp&quot; srcset=&quot;/_astro/06_39_02.h2BSD5R1_ZeJCoj.webp 640w, /_astro/06_39_02.h2BSD5R1_2s3QoC.webp 750w, /_astro/06_39_02.h2BSD5R1_1daz1L.webp 828w, /_astro/06_39_02.h2BSD5R1_ZcAaUE.webp 1080w, /_astro/06_39_02.h2BSD5R1_1nU5AA.webp 1280w, /_astro/06_39_02.h2BSD5R1_tEaeN.webp 1668w, /_astro/06_39_02.h2BSD5R1_2t5Tc1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;コイルが5つあると、大きいリアクターの外観はこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_39_03.C0sL8phQ_1Hnduh.webp&quot; srcset=&quot;/_astro/06_39_03.C0sL8phQ_nL0JG.webp 640w, /_astro/06_39_03.C0sL8phQ_Z1YBDgj.webp 750w, /_astro/06_39_03.C0sL8phQ_1PGdaL.webp 828w, /_astro/06_39_03.C0sL8phQ_ZXiQCo.webp 1080w, /_astro/06_39_03.C0sL8phQ_CcoSQ.webp 1280w, /_astro/06_39_03.C0sL8phQ_Zh3vrV.webp 1668w, /_astro/06_39_03.C0sL8phQ_1Hnduh.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;動画で確認したい場合はこちら。&lt;a href=&quot;#動画で確認したい場合はこちら-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リアクターの使い方はなかなかに道程が長いです。動画の方で確認してみたい方はこちらをどうそ。44話あたりからリアクターの材料づくりが始まっています。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fjuidiBdgqg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;太陽帆（ソーラーセイル）の使い方&lt;a href=&quot;#太陽帆ソーラーセイルの使い方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そしていよいよ、発電のレベルは宇宙クラスに進出します。&lt;/p&gt;&lt;p&gt;太陽帆（ソーラーセイル）を使って太陽からエネルギーを採取、そのソーラーセイルから発電するための熱を手に入れることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_14.CD3CEYvd_Z1JC2HF.webp&quot; srcset=&quot;/_astro/04_14.CD3CEYvd_mGsWs.webp 640w, /_astro/04_14.CD3CEYvd_17GwnW.webp 750w, /_astro/04_14.CD3CEYvd_u8x08.webp 828w, /_astro/04_14.CD3CEYvd_Z1h2oSI.webp 1080w, /_astro/04_14.CD3CEYvd_luCrv.webp 1280w, /_astro/04_14.CD3CEYvd_DwFhx.webp 1668w, /_astro/04_14.CD3CEYvd_Z1JC2HF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽帆を使う流れは、以下の通りです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;4種類のイカロスリペアキットを作る。&lt;/li&gt;
&lt;li&gt;リペアキットをレールガンで太陽帆に送る。&lt;/li&gt;
&lt;li&gt;イカロス受光器を設置して、大量の水を搬入する。&lt;/li&gt;
&lt;li&gt;イカロス受光器で生み出される高圧蒸気を、タービンに送る。&lt;/li&gt;
&lt;li&gt;タービンを動かして、ジェネレーターで発電する。&lt;/li&gt;
&lt;li&gt;低圧蒸気を排出する。&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;1. 4種類のイカロスリペアキットを作る。&lt;a href=&quot;#1-4種類のイカロスリペアキットを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、4種類の「イカロスリペアキット」を作り続けるラインを作る必要があります。いずれもイニシャルコストとして必要な個数は1000個以上で、そのラインでイカロスリペアキットは作られ続けなければなりません。&lt;/p&gt;&lt;p&gt;つまり、ソーラーセイルを稼働させ続けるためには、ソーラーセイルの補修材（リペアキット）を補充し続ける必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_15.DTVwVycE_GCyDX.webp&quot; srcset=&quot;/_astro/04_15.DTVwVycE_Z2aA5Ra.webp 640w, /_astro/04_15.DTVwVycE_Z1pA2qF.webp 750w, /_astro/04_15.DTVwVycE_Z2391Ou.webp 828w, /_astro/04_15.DTVwVycE_1adcsU.webp 1080w, /_astro/04_15.DTVwVycE_Z2hqSYM.webp 1280w, /_astro/04_15.DTVwVycE_Z1YoQ9K.webp 1668w, /_astro/04_15.DTVwVycE_GCyDX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. リペアキットをレールガンで太陽帆に送る。&lt;a href=&quot;#2-リペアキットをレールガンで太陽帆に送る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして頭数を揃えたイカロスリペアキットを、「イカロスレールガン」の中に搬入して、太陽帆の方に送ってもらいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_06_00.riWIGc38_ZqvwDk.webp&quot; srcset=&quot;/_astro/07_06_00.riWIGc38_9x2TB.webp 640w, /_astro/07_06_00.riWIGc38_Z2dPB6o.webp 750w, /_astro/07_06_00.riWIGc38_1BsfkG.webp 828w, /_astro/07_06_00.riWIGc38_1WYw2V.webp 1080w, /_astro/07_06_00.riWIGc38_Z1vGleK.webp 1280w, /_astro/07_06_00.riWIGc38_Z2pWgAx.webp 1668w, /_astro/07_06_00.riWIGc38_ZqvwDk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_06_01.DPlBBBgT_1G2k2x.webp&quot; srcset=&quot;/_astro/07_06_01.DPlBBBgT_Z1fkxmt.webp 640w, /_astro/07_06_01.DPlBBBgT_1rsVqs.webp 750w, /_astro/07_06_01.DPlBBBgT_czE3B.webp 828w, /_astro/07_06_01.DPlBBBgT_ZYDK58.webp 1080w, /_astro/07_06_01.DPlBBBgT_AQvr7.webp 1280w, /_astro/07_06_01.DPlBBBgT_ZiooTF.webp 1668w, /_astro/07_06_01.DPlBBBgT_1G2k2x.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際にリペアキットが太陽帆に送られるのは一瞬です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_06_02.K3-9IRh5_Z2w10jg.webp&quot; srcset=&quot;/_astro/07_06_02.K3-9IRh5_Z1HD90O.webp 640w, /_astro/07_06_02.K3-9IRh5_YakM7.webp 750w, /_astro/07_06_02.K3-9IRh5_ZfHVzJ.webp 828w, /_astro/07_06_02.K3-9IRh5_Z7uVC0.webp 1080w, /_astro/07_06_02.K3-9IRh5_1t0jTf.webp 1280w, /_astro/07_06_02.K3-9IRh5_yJoxs.webp 1668w, /_astro/07_06_02.K3-9IRh5_Z2w10jg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. イカロス受光器を設置して、大量の水を搬入する。&lt;a href=&quot;#3-イカロス受光器を設置して大量の水を搬入する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程の、太陽からビームを食らっていた（食らわせているのではなく食らっているのです。）設備は、「イカロス受光器（イカロスライトレシーバー）」という設備です。設置する場面を見ると、とても大きな設備であることが分かります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_02.DlOpIL3T_Z2in4y7.webp&quot; srcset=&quot;/_astro/07_02.DlOpIL3T_Z17rsKf.webp 640w, /_astro/07_02.DlOpIL3T_ZmrpjK.webp 750w, /_astro/07_02.DlOpIL3T_Z100oHz.webp 828w, /_astro/07_02.DlOpIL3T_Z1OMqJa.webp 1080w, /_astro/07_02.DlOpIL3T_ZcfonV.webp 1280w, /_astro/07_02.DlOpIL3T_5LDr6.webp 1668w, /_astro/07_02.DlOpIL3T_Z2in4y7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのイカロス受光器にエネルギービームを食らわせているのが、上述の太陽帆（ソーラーセイル）です。&lt;/p&gt;&lt;p&gt;そしてイカロスリペアキット（補修材）が充分に届いたソーラーセイルは、イカロス受光器に向かって強力なエネルギービームを食らわせて、イカロス受光器の中で、莫大な熱を生み出します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_07.CUkmtyOw_9uXId.webp&quot; srcset=&quot;/_astro/07_07.CUkmtyOw_Z1mCjnk.webp 640w, /_astro/07_07.CUkmtyOw_ZBCfVP.webp 750w, /_astro/07_07.CUkmtyOw_Z1fbfkE.webp 828w, /_astro/07_07.CUkmtyOw_C5Bxa.webp 1080w, /_astro/07_07.CUkmtyOw_2fCDSo.webp 1280w, /_astro/07_07.CUkmtyOw_Z2wwr5v.webp 1668w, /_astro/07_07.CUkmtyOw_9uXId.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしてそこに加えて、大量の水が必要になってきます。揚水機から水を汲み上げて複数本のパイプラインで水をイカロス受光器の方に搬出します。&lt;/p&gt;&lt;p&gt;イカロス受光器は1分間に最大2100の水を消費しますので、パイプラインMk.2は「4本」必要になってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_09.4LAcjzTl_Z1oHHlS.webp&quot; srcset=&quot;/_astro/07_09.4LAcjzTl_Z6Dycz.webp 640w, /_astro/07_09.4LAcjzTl_DludU.webp 750w, /_astro/07_09.4LAcjzTl_MuP6.webp 828w, /_astro/07_09.4LAcjzTl_ZV84wV.webp 1080w, /_astro/07_09.4LAcjzTl_GoWNi.webp 1280w, /_astro/07_09.4LAcjzTl_Yr0Dk.webp 1668w, /_astro/07_09.4LAcjzTl_Z1oHHlS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. イカロス受光器で生み出される高圧蒸気を、タービンに送る。&lt;a href=&quot;#4-イカロス受光器で生み出される高圧蒸気をタービンに送る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;イカロス受光器が受け取った莫大な熱は、イカロス受光器に搬入された大量の水を「高圧」蒸気へと加工します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_08.xfMYWuHG_1UGlQE.webp&quot; srcset=&quot;/_astro/07_08.xfMYWuHG_ZE6QTX.webp 640w, /_astro/07_08.xfMYWuHG_5Sbvw.webp 750w, /_astro/07_08.xfMYWuHG_ZwEMRi.webp 828w, /_astro/07_08.xfMYWuHG_2ogYFB.webp 1080w, /_astro/07_08.xfMYWuHG_Z13n6M6.webp 1280w, /_astro/07_08.xfMYWuHG_ZKl3W4.webp 1668w, /_astro/07_08.xfMYWuHG_1UGlQE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして・・・、「高圧」蒸気という単語に見覚えはありませんでしょうか？&lt;/p&gt;&lt;p&gt;そうです、火力発電の時に、ジェネレーターを稼働させるためのタービンを動かすための材料です。これをタービン
へと搬出します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_08_01.Cx_8ldIX_Z2tnMwu.webp&quot; srcset=&quot;/_astro/07_08_01.Cx_8ldIX_ZIvCn4.webp 640w, /_astro/07_08_01.Cx_8ldIX_1XhQpR.webp 750w, /_astro/07_08_01.Cx_8ldIX_Ioz31.webp 828w, /_astro/07_08_01.Cx_8ldIX_Z4RIPe.webp 1080w, /_astro/07_08_01.Cx_8ldIX_1vCwG1.webp 1280w, /_astro/07_08_01.Cx_8ldIX_BmBke.webp 1668w, /_astro/07_08_01.Cx_8ldIX_Z2tnMwu.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. タービンを動かして、ジェネレーターで発電する。&lt;a href=&quot;#5-タービンを動かしてジェネレーターで発電する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、火力発電の時と同じ要領で、イカロスライトレシーバーから生み出される高圧蒸気でタービンを動かしてジェネレーターを回します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_08_02.DG2EQQim_26JgMX.webp&quot; srcset=&quot;/_astro/07_08_02.DG2EQQim_Z23wUwX.webp 640w, /_astro/07_08_02.DG2EQQim_DgyfX.webp 750w, /_astro/07_08_02.DG2EQQim_ZABI6S.webp 828w, /_astro/07_08_02.DG2EQQim_ZyVNjH.webp 1080w, /_astro/07_08_02.DG2EQQim_11yscx.webp 1280w, /_astro/07_08_02.DG2EQQim_7iwPK.webp 1668w, /_astro/07_08_02.DG2EQQim_26JgMX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_08_03.CtpAz1sa_1AckcH.webp&quot; srcset=&quot;/_astro/07_08_03.CtpAz1sa_ZAushF.webp 640w, /_astro/07_08_03.CtpAz1sa_26j1vg.webp 750w, /_astro/07_08_03.CtpAz1sa_QpJ8p.webp 828w, /_astro/07_08_03.CtpAz1sa_Z15tJTX.webp 1080w, /_astro/07_08_03.CtpAz1sa_v1vBh.webp 1280w, /_astro/07_08_03.CtpAz1sa_ZoeoJv.webp 1668w, /_astro/07_08_03.CtpAz1sa_1AckcH.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画面の奥の方から、イカロス受光器、タービン、ジェネレーター、蒸気冷却タワーが並んでいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_08_04.DgSaqXKd_2b1ean.webp&quot; srcset=&quot;/_astro/07_08_04.DgSaqXKd_ZfkcaA.webp 640w, /_astro/07_08_04.DgSaqXKd_2rthCl.webp 750w, /_astro/07_08_04.DgSaqXKd_1cA0fu.webp 828w, /_astro/07_08_04.DgSaqXKd_ZuEPWi.webp 1080w, /_astro/07_08_04.DgSaqXKd_15PpyW.webp 1280w, /_astro/07_08_04.DgSaqXKd_bzuda.webp 1668w, /_astro/07_08_04.DgSaqXKd_2b1ean.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. 低圧蒸気を排出する。&lt;a href=&quot;#6-低圧蒸気を排出する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;タービンを回したことで排出された低圧蒸気は、もちろん外気へ逃がす必要があります。
蒸気冷却タワー（Steam Cooling Tower）を設置して、低圧蒸気を逃がしましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_11.hwK6cWqL_1slyXD.webp&quot; srcset=&quot;/_astro/07_11.hwK6cWqL_1W4CCT.webp 640w, /_astro/07_11.hwK6cWqL_Z2n7rJx.webp 750w, /_astro/07_11.hwK6cWqL_24vGFz.webp 828w, /_astro/07_11.hwK6cWqL_1UVcMA.webp 1080w, /_astro/07_11.hwK6cWqL_Z1vHSF7.webp 1280w, /_astro/07_11.hwK6cWqL_Z1dFPP5.webp 1668w, /_astro/07_11.hwK6cWqL_1slyXD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;太陽光発電同様に、太陽が出ていない間は動かない。&lt;a href=&quot;#太陽光発電同様に太陽が出ていない間は動かない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この太陽帆を使った発電方式は太陽光発電とは違ったものですが、太陽が出ていない夜間には同様に動きません。（太陽帆も夜間には隠れてしまうからですかね多分。）&lt;/p&gt;&lt;p&gt;なので、蓄電装置も併せて設置しておくと、発電量を常に安定させられるかもしれません。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;864&quot; src=&quot;/_astro/07_21.BnYJuXb__fYjFi.webp&quot; srcset=&quot;/_astro/07_21.BnYJuXb__Z1JJzxs.webp 640w, /_astro/07_21.BnYJuXb__WONXc.webp 750w, /_astro/07_21.BnYJuXb__y527s.webp 828w, /_astro/07_21.BnYJuXb__1AClG7.webp 1080w, /_astro/07_21.BnYJuXb__Z5eXkK.webp 1280w, /_astro/07_21.BnYJuXb__fYjFi.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事では、Satisfactoryの発電用Mod「Refined Power」の使い方を解説しました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;風力発電は、置いたらすぐに開始できる。しかし設置するスパンには気を付けること。&lt;/li&gt;
&lt;li&gt;太陽光発電も、置いたらすぐに開始できる。しかし周りに建物が無いかどうかに気を付けること。&lt;/li&gt;
&lt;li&gt;水力発電も、置いたらすぐに開始できる。しかしスポットを探す前に建材を忘れないこと。&lt;/li&gt;
&lt;li&gt;火力発電は、発電するまでが大変。&lt;/li&gt;
&lt;li&gt;原子炉（リアクター）は、発電するまでがかなーり大変。&lt;/li&gt;
&lt;li&gt;太陽帆（ソーラーセイル）は、発電するまでがとてーも大変。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;バニラの時とは一味違った発電施設を作ることが出来ますので、興味が湧いたらぜひ建設してみて下さい。ここまで長い記事を読んで下さいましてありがとうございました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、発電が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Satisfactoryまとめ</title><link>https://endorphinbath.com/posts/satisfactory-recap/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-recap/</guid><description>Satisfactoryに関する今までの記事を一つの場所に一覧にしました。</description><pubDate>Sat, 02 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;Satisfactory&lt;a href=&quot;#satisfactory&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Satisfactory」とは、生産性、意匠性をほぼ限りなく追求することが出来る、工場建設サンドボックスオープンワールドゲームです。&lt;/p&gt;&lt;a href=&quot;https://www.satisfactorygame.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.satisfactorygame.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.satisfactorygame.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Home - Satisfactory Game&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.satisfactorygame.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを始める&lt;a href=&quot;#satisfactoryを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-something-to-prioritize/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】ゲームを進める上ではじめに優先的に行っておくべきこと7選&lt;/div&gt;&lt;div&gt;Satisfactoryを進める上で優先的に取り組んでおいたほうが良いことを紹介します。自分の工場を効率的に自動化していきましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/10/20220322_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Mod&lt;a href=&quot;#mod&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-mods-in-2024/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-refinedpower/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】Refined Powerの使い方&lt;/div&gt;&lt;div&gt;Satisfactoryで利用できるMod「Refined Power」の使い方を網羅的に紹介します。バニラとはまた違った発電方式で楽しいです。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241103_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;資源を探すシリーズ&lt;a href=&quot;#資源を探すシリーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item1/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（ウラン、SAM）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、ウラン、SAMを入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220302_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（石英）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、石英を入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220314_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item3/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（硫黄）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、硫黄を入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220316_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item4/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（窒素ガス）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、窒素ガスを入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220317_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCのスペックは足りていますか？&lt;a href=&quot;#pcのスペックは足りていますか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-for-the-first-time/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241018_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-assembly/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241111_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-os-setting/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（OS設定編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCのOSの設定をする際の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241112_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他&lt;a href=&quot;#その他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-goodbye-doggo-paradise/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/documentiai-satisfactory-options-management/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud、Document AI】Satisfactoryというゲームの設定のスクショをOCRして管理したいのだが上手くいかない&lt;/div&gt;&lt;div&gt;Document AIを使用して、ゲーム「Satisfactory」の設定をOCRで管理する方法に関する記事です。標準プロセッサの検証およびカスタムプロセッサの学習方法などを探求していきます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/04/20240217_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動画も出しています。&lt;a href=&quot;#動画も出しています&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;YouTubeでSatisfactoryに関する動画も出しています。良ければ工場建設のご参考にどうぞ。&lt;/p&gt;&lt;p&gt;シーズン1（ほぼバニラ版）&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GOvJhLmDiXc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;シーズン2（Mod増量版）&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fixiznZhgis/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以上まとめです。&lt;a href=&quot;#以上まとめです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Google Apps Scriptまとめ</title><link>https://endorphinbath.com/posts/googleappsscript-recap/</link><guid isPermaLink="true">https://endorphinbath.com/posts/googleappsscript-recap/</guid><description>Google Apps Scriptに関する今までの記事を一つの場所に一覧にしました。</description><pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;GAS&lt;a href=&quot;#gas&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Google Apps Script」は、個人的に最も使いやすいプログラミング言語だと思っています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptって何？&lt;a href=&quot;#google-apps-scriptって何&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script（GASと巷では略されます）は、Googleアカウントを持っていれば誰でも利用することが出来る、JavaScriptベースのプログラミング言語です。&lt;/p&gt;&lt;p&gt;このGASを使えば、様々なGoogleサービスで行う作業を自動化することが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Googleスプレッドシート&lt;/li&gt;
&lt;li&gt;Googleドキュメント&lt;/li&gt;
&lt;li&gt;Googleスライド&lt;/li&gt;
&lt;li&gt;Googleドライブ&lt;/li&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Googleカレンダー&lt;/li&gt;
&lt;li&gt;・・・&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらのツールは、Google Workspaceに加入している方であれば、使い倒していることでしょう。加入していなくても、日常生活で使うことはたまにあると思います。特にGoogleカレンダーは、Androidスマホを使っている方は殆どの方が使っているのではないでしょうか。&lt;/p&gt;&lt;p&gt;そんな日々の生活に密接なものとなっているこれらのGoogleのツールで、もっと楽に作業が出来ることは疎か、他にも様々なことが出来るようになるのです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最も使いやすい理由&lt;a href=&quot;#最も使いやすい理由&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「最も使いやすい」と言う理由を挙げていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;気軽に触りやすい&lt;a href=&quot;#気軽に触りやすい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;他のプログラミング言語ではその言語をインストールして、色々と設定をしてからやっと使い始めることが出来ます。この使い始めるようにするまでの作業が面倒な方は多いのではないでしょうか。&lt;/p&gt;&lt;p&gt;しかしGASは、Googleドライブ上で右クリックして、GAS用のファイルを作成すればすぐにGASのコーディングを始めることが出来ます。また、GoogleスプレッドシートやGoogleドキュメントの「拡張機能」のメニューをクリックして「Apps Script」をクリックしても同様に、すぐ始めることが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PCが汚くならない&lt;a href=&quot;#pcが汚くならない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GASは、ブラウザ上で全て完結してしまうプログラミング言語なので、PCに開発用のファイルをインストールする必要性は皆無です。&lt;/p&gt;&lt;p&gt;そのため、インストールした後にアンインストールに失敗して、何かしらの残り香をPCの中に残してしまうことはありません。バージョンアップ、アップデートをする必要も無いので、セットアップ作業に時間を掛ける必要がありません。そのセットアップ作業が発生しないということは、PC内のフォルダを汚すこともありません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;実行状況が見やすい。&lt;a href=&quot;#実行状況が見やすい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PC上で動かすプログラミング言語は、基本的にシェル上で動かします。その時に、見づらいCLIで状況を確認しながら、自分が作った処理の動作を確認する必要があります。基本的には、黒い画面に白い文字が映っているだけです。視認性は良くないですね。&lt;/p&gt;&lt;p&gt;しかし、GASのコードを実行する際には、シェルで実行する必要はありません。GAS用のスクリプトエディタ上にある実行ボタンを押すか、Ctrl + Rキーを押せば処理を始めることが出来ます。&lt;/p&gt;&lt;p&gt;また、実行中に自分が仕込んだログも、スクリプトエディタ上のログ出力パネルで確認することが出来ます。このパネルの視認性は、さすがにシェルの画面に負けるはずがありません。ログを仕込んだ行ごとにログが区切られて表示されて、どの変数がいつどんな値になったかをすぐに見つけられます。&lt;/p&gt;&lt;p&gt;Google Cloudのプロジェクトと、GASのプロジェクトを紐付ければ、Google Cloudのコンソール上でもログを確認することが出来ます。なおかつログを一定期間残しておくことも可能です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サーバをタダで立てられる。&lt;a href=&quot;#サーバをタダで立てられる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんと、このGASは、サーバを立ててWebアプリとして動かすことも可能なのです。&lt;/p&gt;&lt;p&gt;GASのスクリプトエディタでは、編集者は「GASコード用のファイル」と、「HTMLファイル」を作成することが出来ます。そして、HTTPリクエストを受け取ることも出来るので、Webアプリを作れるのです。
そして、そのデプロイと、デプロイの運用にお金は掛かりません。（2024-11-08時点。）&lt;/p&gt;&lt;p&gt;他のプログラミング言語を使ってWebアプリを動かす場合、お金が微かながらでも掛かってしまうものです。しかし、GASでWebアプリを作れば、「制限の範囲内では」無料で稼働させ続けることが可能です。
そのGASを使用するに当たっての制限は、公式より以下の通りになっています。（2024-11-08時点。）&lt;/p&gt;






























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;機能&lt;/th&gt;&lt;th&gt;一般ユーザー向け&lt;/th&gt;&lt;th&gt;Google Workspaceアカウント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;スクリプト ランタイム&lt;/td&gt;&lt;td&gt;6 分 / 実行&lt;/td&gt;&lt;td&gt;6 分 / 実行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カスタム関数ランタイム&lt;/td&gt;&lt;td&gt;30 秒 / 実行&lt;/td&gt;&lt;td&gt;30 秒 / 実行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Workspace アドオン ランタイム&lt;/td&gt;&lt;td&gt;30 秒 / 実行&lt;/td&gt;&lt;td&gt;30 秒 / 実行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ユーザーあたりの同時実行数&lt;/td&gt;&lt;td&gt;30 / ユーザー&lt;/td&gt;&lt;td&gt;30 / ユーザー&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スクリプトあたりの同時実行数&lt;/td&gt;&lt;td&gt;1,000&lt;/td&gt;&lt;td&gt;1,000&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メール添付ファイル&lt;/td&gt;&lt;td&gt;250 / メッセージ&lt;/td&gt;&lt;td&gt;250 / メッセージ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メール本文のサイズ&lt;/td&gt;&lt;td&gt;200 KB / メッセージ&lt;/td&gt;&lt;td&gt;400 KB / メッセージ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メール 1 通あたりのメール受信者数&lt;/td&gt;&lt;td&gt;50 個 / メッセージ&lt;/td&gt;&lt;td&gt;50 個 / メッセージ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メールの添付ファイルの総サイズ&lt;/td&gt;&lt;td&gt;25 MB / メッセージ&lt;/td&gt;&lt;td&gt;25 MB / メッセージ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プロパティ値のサイズ&lt;/td&gt;&lt;td&gt;9 KB / 値&lt;/td&gt;&lt;td&gt;9 KB / 値&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プロパティの合計保存容量&lt;/td&gt;&lt;td&gt;500 KB / 物件&lt;/td&gt;&lt;td&gt;500 KB / 物件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;トリガー&lt;/td&gt;&lt;td&gt;20 / ユーザー / スクリプト&lt;/td&gt;&lt;td&gt;20 / ユーザー / スクリプト&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL 取得のレスポンス サイズ&lt;/td&gt;&lt;td&gt;50 MB / 呼び出し&lt;/td&gt;&lt;td&gt;50 MB / 呼び出し&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL 取得ヘッダー&lt;/td&gt;&lt;td&gt;100 / 呼び出し&lt;/td&gt;&lt;td&gt;100 / 呼び出し&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL 取得のヘッダーサイズ&lt;/td&gt;&lt;td&gt;8 KB / 呼び出し&lt;/td&gt;&lt;td&gt;8 KB / 呼び出し&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL 取得の POST サイズ&lt;/td&gt;&lt;td&gt;50 MB / 呼び出し&lt;/td&gt;&lt;td&gt;50 MB / 呼び出し&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;URL 取得の URL の長さ&lt;/td&gt;&lt;td&gt;2 KB / 呼び出し&lt;/td&gt;&lt;td&gt;2 KB / 呼び出し&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href=&quot;https://developers.google.com/apps-script/guides/services/quotas?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google サービスの割り当て | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;Apps Script 内の Google サービスの 1 日の割り当てと制限を確認して、スクリプトが中断なく実行されるようにします。&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートをデータベースにできる&lt;a href=&quot;#googleスプレッドシートをデータベースにできる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;前述した制限の範囲で問題ないのであれば、データを格納する場所は何もデータベースでは無くても、Googleスプレッドシートで十分なのではないでしょうか。Read処理は&lt;code&gt;getValues()&lt;/code&gt;、Write処理は&lt;code&gt;setValues()&lt;/code&gt;でも大丈夫ではないでしょうか。&lt;/p&gt;&lt;p&gt;また、データベースからデータを見る時、面倒な作業があったりはしないでしょうか。SQLをわざわざ発行するのが面倒くさくはないでしょうか？ しかし、Googleスプレッドシートであれば、Where句で絞りたいことはフィルターを掛ければ大丈夫ですし、Order句で並び替えたいことはフィルターのソート機能を使えば大丈夫です。特定のデータを編集したい時も、わざわざUpdate文を発行する必要はありません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleサービスと連携しやすい。&lt;a href=&quot;#googleサービスと連携しやすい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらは冒頭でも述べました。
GASを使えば、面倒なスプレッドシートやドキュメントの作業を自動化したり、大量のメールを一括送信したり、カレンダーに同じような予定を一気に入力できたり、業務効率化は無限大です。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GASを始める。&lt;a href=&quot;#gasを始める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-lets-get-started/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Google Apps Scriptの基本的な使い方・始め方&lt;/div&gt;&lt;div&gt;GASの基本的な使い方を紹介します。Googleの各種サービスを利用するためにGoogle Cloudと紐付ける方法も紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241029_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GASを使う。&lt;a href=&quot;#gasを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-shortcutkey-for-script-editor-mac/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】まとめ：Google Apps Scriptのスクリプトエディタで使用できるショートカットキー（Mac版）&lt;/div&gt;&lt;div&gt;Google Apps Scriptのスクリプトエディタで使用できるショートカットキーをまとめました。このショートカットキーで作業を効率化してみて下さい。Mac版です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220125_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-make-factory-method-to-call-outer-class/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】クラスを作って外部ライブラリとして呼び出したい場合は、ファクトリメソッドを作ろう&lt;/div&gt;&lt;div&gt;Google Apps Scriptで、ライブラリ化したクラスメソッドを外部のライブラリから呼べなくなってしまっている場合に、「ファクトリメソッド」を使って解決するかもしれません。本記事の方法をお試し下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220127_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-testgas-test-code-for-user-defined-functions/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました！&lt;/div&gt;&lt;div&gt;Google Apps Scriptで作った関数に対して、テストコードを使って動作を検証するためのツール「TestGAS」を作成および公開しました。初めて作ったテストツールですが、個人的にかなり便利なものになったので、ぜひ使ってみて下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220123_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-setup-to-publish-github/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Google Apps Scriptで書いたコードをGiitHubで公開するための段取り&lt;/div&gt;&lt;div&gt;Google Apps Scriptを、Gitで管理して公開するための方法を紹介します。PublicリポジトリでTokenやIDを公開せずにソースとして管理できる方法になっています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220306_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-management-of-id-frequently-used/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん&lt;/div&gt;&lt;div&gt;Google Apps Scriptで記述したフォルダやファイルのIDを一括管理するためのアイデアを掲載します。これで、どのフォルダとファイルがスクリプトで使用されているかどうかを管理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220305_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-files-are-used-in-script/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】GoogleドライブにあるフォルダとファイルがGoogle Apps Scriptに使用されているかどうかを確認する&lt;/div&gt;&lt;div&gt;IDを入力して、そのGoogleドライブにあるフォルダとファイルがGASスクリプト上で使用されているかどうかを確認できるツールを作りました。これで、フォルダやファイルを削除したことが原因でスクリプトが動かなくなる事故を防ぎます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20211208_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-dropped-managing-token-with-sheet/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Apps Script】自分がGASで使うIDとかトークンを1つのシートで管理するライブラリを作ろうとしたけど、断念した話&lt;/div&gt;&lt;div&gt;Google Apps Scriptで使うフォルダIDやスプレッドシートIDなどを一括管理するライブラリをスプレッドシート上で作ろうと思ったのですが、とある理由により頓挫しました。貴方もお気を付け下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2023/02/20230209_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-error-code-not-found/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】「We’re sorry, a server error occurred while reading from storage. Error code NOT_FOUND.」というエラーメッセージが出てきた時。&lt;/div&gt;&lt;div&gt;Google Apps Scriptを使用した時に、「Error code NOT_FOUND」エラーに直面したときの体験談になります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/03/20240208_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-scope-settings-to-skip-oauth-process/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】「承認が必要です：このプロジェクトがあなたのデータへのアクセス権限を必要としています。」の表示工程を省くようにするスコープ設定&lt;/div&gt;&lt;div&gt;GAS実行時のOAuth承認プロセスを省くために必要なappsscript.jsonのスコープ設定について紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/03/20240213_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;JavaScriptとしてのGAS&lt;a href=&quot;#javascriptとしてのgas&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/js-number-zero-padding/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【JavaScript】数値を0埋めされた文字列として加工する&lt;/div&gt;&lt;div&gt;JavaScriptで、IDなどを採番する時に0埋めした数値が欲しい時があります。その時に利用できるスニペットを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20231011_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-error-invalid-augument-id/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】「Exception: Invalid argument: id」が出た時の対処方法&lt;/div&gt;&lt;div&gt;Google Apps Scriptで開発を行っている際に、たまに遭遇するエラー文です。シートとかファイルのオブジェクトに関係してきます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240204_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleスプレッドシート&lt;a href=&quot;#googleスプレッドシート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-display-image-in-drive/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-selected-area-to-html-table/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Googleスプレッドシート、GAS】選択した範囲をHTMLのtableタグとしてテキスト出力する&lt;/div&gt;&lt;div&gt;Googleスプレッドシートで編集したセルをそのままHTMLのtableタグとして出力するツールを作りました。HTMLの編集は面倒ですが、これを使えば編集はGoogle Spreadsheetで管理することが出来ます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220228_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-selected-area-to-html-table-2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Googleスプレッドシート、GAS】選択した範囲をcsvやtsvとして画面上に出力する&lt;/div&gt;&lt;div&gt;Googleスプレッドシートで編集したセルをそのままCSVやTSVとして出力するツールを作りました。この機能を導入することによって、データの受け渡しが楽になるかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220307_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-onopne-auth-error/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Apps Script】onOpen時に「Spreadsheet.openByIdを呼び出す権限がありません」となり、メニューが追加されない&lt;/div&gt;&lt;div&gt;onOpenなどのSImple Triggerを使ったスクリプト実行時に、「Spreadsheet.openByIdを呼び出す権限がありません」みたいな権限エラーが発生した時に試したことを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2023/02/20230208_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-spreadsheet-themecolor/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleドライブ&lt;a href=&quot;#googleドライブ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-get-list-googledrive-in-root/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleドライブのルートフォルダに有るフォルダを一覧で取得するスクリプトです&lt;/div&gt;&lt;div&gt;GoogleDriveのルートフォルダにあるフォルダを一覧で取得します。Googleドライブを整理したい時に役立つツールになるかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211127_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-get-list-googledrive-in-folder/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleドライブのフォルダに有るファイルを一覧で取得するスクリプトです&lt;/div&gt;&lt;div&gt;GoogleDriveの指定のフォルダにあるファイルを一覧で取得します。Googleドライブを整理したい時に役立つツールになるかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211128_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-copy-file-into-folder/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleドライブ内の指定したフォルダに所定のファイルをコピーするスクリプトです&lt;/div&gt;&lt;div&gt;GoogleDriveの指定のフォルダにファイルをコピーするツールを作りました。何かWebの記事をGoogleドキュメントにクリップしたり、指定のフォルダにメモ書きやシートを作成したい場合に役立つかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211129_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-rename-file-at-once/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleドライブ内の指定したファイルをそれぞれ好みの名前に一気にリネームするスクリプトです&lt;/div&gt;&lt;div&gt;GoogleDriveの指定のファイルを一括でリネームできるツールを作りました。既に沢山作ってしまったファイルの命名規則を変えたいときなどにご活用下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211130_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-webclip-to-gss/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Google Driveに共有したWebサイトのURLをGoogleスプシに転記する。&lt;/div&gt;&lt;div&gt;Googleドライブに共有したWebサイトのURLが載ったテキストファイルを読み込んで、Googleスプシに転記するツールを作りました。後で読みたいと思った記事を一元管理できて便利に使えています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20211231_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-manage-images-googledrive/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】ブログに使用した画像をGoogleドライブで管理するために書いたスクリプト&lt;/div&gt;&lt;div&gt;僕は既に公開した記事で使用したファイルをGoogleドライブの所定のフォルダに保存しています。その画像を完了済みのフォルダに定期的に移動してくれるスクリプトを作りました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211217_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-search-to-save-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】スプレッドシートに入力したキーワードで検索してヒットした画像をGoogleドライブに保存する&lt;/div&gt;&lt;div&gt;Google Apps ScriptでGoogle Spreadsheetに入力した文字で画像検索し、結果をGoogleドライブに保存する処理を書きます。Custom Search APIを使います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/03/20240212_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleドキュメント&lt;a href=&quot;#googleドキュメント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-copy-googledoc/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleドキュメントで日記を付けるために毎日Docファイルを作ってくれるスクリプトです&lt;/div&gt;&lt;div&gt;GoogleDriveにあるファイルを毎日決まった時間にコピーしてくれるスクリプトを書きました。日記をつける場合に毎回ファイルをコピーしてレイアウトを変えて・・・といった作業を効率化してしまいましょう！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211126_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleカレンダー&lt;a href=&quot;#googleカレンダー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-scheduling-googlecalendar/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Googleカレンダーにスケジュールを登録するためのスクリプトです&lt;/div&gt;&lt;div&gt;GoogleCalendarにスケジュールを登録する時にSpreadsheetから入力できるスクリプトを造りました。カレンダーからも連続した予定を入力できますが、それを何度も繰り返すのも大変なので、このツールで時短してみて下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211125_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-export-from-article/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-date-diff-over-the-month/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、JavaScript】月末や月またぎも考慮した日付の計算をする&lt;/div&gt;&lt;div&gt;JavaScriptで日付を扱う際に、月またぎを考慮した計算も入れなければならないことがあります。その場合にどのような関数で取れるかどうかを紹介します。結局はタイムスタンプを使う方法に帰着するもんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240203_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-scheduling-googlecalendar-02/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Googleカレンダーに曜日を指定してスケジュールを登録するスプレッドシートの構築&lt;/div&gt;&lt;div&gt;Google Apps Scriptを使い、スプレッドシートからGoogleカレンダーに曜日指定でスケジュールを追加するシステムを作りました。繰り返し入力する版と個別に入力する版があります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240207_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Gmail&lt;a href=&quot;#gmail&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-record-gamil-with-openai/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、GPT-4】OpenAI APIでGmailに届くエラーメールをスプレッドシートに記録する&lt;/div&gt;&lt;div&gt;Google Apps Scirptを使っていると、Gmailにそのエラー情報が送られてきたりします。そこで、OpenAI APIのGPT-4とParserで情報を抽出しましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240206_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notion&lt;a href=&quot;#notion&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-notion-api-retrieve-pages/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Notion API】Google Apps Scriptでデータベースからページの中身を取得する&lt;/div&gt;&lt;div&gt;NotionのDatabase API、Page API、Block APIでページの内容を取得する方法を紹介します。ベースはJavaScriptなのでNode.js、Deno、Bunでも流用できるかと。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241028_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-notion-api-richtext-automation/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Notion API】Google Apps Scriptでリッチテキストの編集を自動化する&lt;/div&gt;&lt;div&gt;NotionのAPIを使って、ページ内のブロックのリッチテキストを自動的に編集する方法を紹介します。日々の日記用のページを自動作成したり、自動更新することが出来るようになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241031_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Discord&lt;a href=&quot;#discord&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-discord-webhook-weather/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Apps Script】DiscordのWebhookを使って毎朝天気を通知する（Discord Bot改良：第1回）&lt;/div&gt;&lt;div&gt;DiscordのWebhookをGoogle Apps Scriptで叩いて、天気を通知するツールを作りました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2023/02/20230212_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-discord-bot-enhance-2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-discord-webhook-habit/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Apps Script】DiscordのWebhookを使って行動を習慣化する&lt;/div&gt;&lt;div&gt;DiscordのWebhookをGoogle Apps Scriptで叩いて、行動を習慣化するためのツールを作りました。指定した時間帯は通知をオフにします。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2023/07/20230226_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;X / Twitter&lt;a href=&quot;#x--twitter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-twitter-bot-authorize/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】TwitterのBotを作成するために認証を行う。&lt;/div&gt;&lt;div&gt;Googleスプレッドシートを利用したGASから実行するTwitterのBotを作りました。今回は、そのTwitterに投稿するための認証周りの設定に関する紹介記事になります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20211229_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-twitter-bot-random-tweet/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他の外部サービス&lt;a href=&quot;#その他の外部サービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/how-to-use-google-ai-studio/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google AI Studioの使い方。Geminiと比較してみた。&lt;/div&gt;&lt;div&gt;Google AI Studioで利用できるAIモデルおよびプロンプトの過程を紹介しています。Geminiプラットフォームとの比較、APIキー経由でGASを使ってプロンプトしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241020_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-anilist-graphql-error/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google Apps ScriptでAniList GraphQL APIv2を叩くと、’No query or mutation provided…’のエラー400が返ってくる&lt;/div&gt;&lt;div&gt;GASのUrlFetchApp.fetchの仕様がJavaScriptのfetchと少し違うのかも。調べても調べても沼ってたので解決してよかった。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/01/20231005_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-interpolation-for-appsheet/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】AppSheetでグラフを描くために数値データを線形補間する&lt;/div&gt;&lt;div&gt;AppSheetで折れ線チャートを描くと、空欄の値は0に判定されてしまいます。場合によってはグラフが見にくくなる原因にもなります。そこで、値がないセルにデータを補間する方法を書きました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20231007_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-gcs-auth-error-in-doc/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Cloud StorageのOAuth認証時に「Google ドキュメント内でエラーが発生しました。このページを・・・」が出てくる&lt;/div&gt;&lt;div&gt;Google Apps ScriptでCloud Storageへの認証を行う時にエラーが発生して先に進めなくなりました。その原因を調べていると・・・&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20231008_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以上がまとめです。&lt;a href=&quot;#以上がまとめです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これから始まるGAS生活です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;可能性が深い。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion API】Google Apps Scriptでリッチテキストの編集を自動化する</title><link>https://endorphinbath.com/posts/gas-notion-api-richtext-automation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-notion-api-richtext-automation/</guid><description>NotionのAPIを使って、ページ内のブロックのリッチテキストを自動的に編集する方法を紹介します。日々の日記用のページを自動作成したり、自動更新することが出来るようになります。</description><pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、Notionへの投稿は自動化できたけど・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この文章の編集も自動化したくなってくるな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ページの中身の編集も自動化しよう！&lt;a href=&quot;#ページの中身の編集も自動化しよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前に下記の記事で、NotionのAPIを使ってNotionのページのプロパティや中身を取得する方法を照会しました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-notion-api-retrieve-pages/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Notion API】Google Apps Scriptでデータベースからページの中身を取得する&lt;/div&gt;&lt;div&gt;NotionのDatabase API、Page API、Block APIでページの内容を取得する方法を紹介します。ベースはJavaScriptなのでNode.js、Deno、Bunでも流用できるかと。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241028_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで今回は、Google Apps Script（以降、GAS）を使って、Notionのページの中身を更新する方法を紹介していきます。そこで今回は主に、リッチテキストの更新の仕方を中心に見ていきましょう。&lt;/p&gt;&lt;p&gt;GASは、JavaScriptベースのプログラミング言語なので、今回のコードの殆どの部分は、Node.js、Deno、Bun等のランタイムでも利用できるかと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使うNotion APIエンドポイント&lt;a href=&quot;#今回使うnotion-apiエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回使うNotion APIのエンドポイントは、&lt;code&gt;Create a page&lt;/code&gt;エンドポイントと、&lt;code&gt;Append block children&lt;/code&gt;エンドポイントです。
一定の頻度でNotionのページを自動で投稿したい場合に&lt;code&gt;Create a page&lt;/code&gt;エンドポイント、決まったページを定期的に更新したい場合に&lt;code&gt;Append block children&lt;/code&gt;エンドポイントが役に立つことでしょう。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Create a page&lt;/code&gt;エンドポイント&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/post-page&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Create a page - Notion Docs&lt;/div&gt;&lt;div&gt;Use this API to create a new page as a child of an existing page or data source.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;code&gt;Append block children&lt;/code&gt;エンドポイント&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/patch-block-children&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Append block children - Notion Docs&lt;/div&gt;&lt;div&gt;Creates and appends new children blocks to the parent block_id specified. Blocks can be parented by other blocks, pages, or databases.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionのリッチテキストで編集できる事柄&lt;a href=&quot;#notionのリッチテキストで編集できる事柄&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notionのページを新規作成および更新する時に、リッチテキストを更新したいケースが出てくると思います。&lt;/p&gt;&lt;p&gt;そこで、Notion上で表示するリッチテキストを、APIで更新するためにこの公式ドキュメントが役に立ちます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/rich-text&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Rich text - Notion Docs&lt;/div&gt;&lt;div&gt;Notion uses rich text to allow users to customize their content. Rich text refers to a type of document where content can be styled and formatted in a variety of customizable ways. This includes styling decisions, such as the use of italics, font size, and font color, as well as formatting, such as the use of hyperlinks or code blocks.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リッチテキストで編集できる事柄は、以下のとおりです。&lt;/p&gt;






















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;bold&lt;/td&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;太字にするかどうか。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;italic&lt;/td&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;イタリック体にするかどうか。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;strikethrough&lt;/td&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;打ち消し線を付けるかどうか。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;underline&lt;/td&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;下線を入れるかどうか。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;code&lt;/td&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;コードスタイルにするかどうか。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;color&lt;/td&gt;&lt;td&gt;string (enum)&lt;/td&gt;&lt;td&gt;色を塗りたければ、塗る色を決める。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;mention&lt;/td&gt;&lt;td&gt;string (enum) or object&lt;/td&gt;&lt;td&gt;メンションする。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Equation&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;LaTeXで数式を記述する。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Linked text&lt;/td&gt;&lt;td&gt;object&lt;/td&gt;&lt;td&gt;テキストにリンクを貼れる。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h3&gt;bold（太字）&lt;a href=&quot;#bold太字&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;太字にするかどうかを制御します。boolean型なので、true / falseで設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;302&quot; src=&quot;/_astro/11.BbWEs_Sz_1eSu7c.webp&quot; srcset=&quot;/_astro/11.BbWEs_Sz_1eSu7c.webp 622w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;italic（イタリック体）&lt;a href=&quot;#italicイタリック体&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;イタリック体にするかどうかを制御します。boolean型なので、true / falseで設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;304&quot; src=&quot;/_astro/12.CGkYg_lr_sVa3s.webp&quot; srcset=&quot;/_astro/12.CGkYg_lr_sVa3s.webp 638w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;strikethrough（打ち消し線）&lt;a href=&quot;#strikethrough打ち消し線&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打ち消し線を付けるかどうかを制御します。boolean型なので、true / falseで設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;303&quot; src=&quot;/_astro/13.Dd03J-kZ_1U83FT.webp&quot; srcset=&quot;/_astro/13.Dd03J-kZ_Z1ddyAu.webp 640w, /_astro/13.Dd03J-kZ_1U83FT.webp 668w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;underline（下線、アンダーライン）&lt;a href=&quot;#underline下線アンダーライン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;下線を入れるかどうかを制御します。boolean型なので、true / falseで設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;300&quot; src=&quot;/_astro/14.1QW9__yN_Z1dF6kQ.webp&quot; srcset=&quot;/_astro/14.1QW9__yN_2qoP7k.webp 640w, /_astro/14.1QW9__yN_Z1dF6kQ.webp 674w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;code（コードスタイル）&lt;a href=&quot;#codeコードスタイル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;コードスタイルにするかどうかを制御します。boolean型なので、true / falseで設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/15.D_G5YoYf_2iH3zu.webp&quot; srcset=&quot;/_astro/15.D_G5YoYf_1qSGm3.webp 640w, /_astro/15.D_G5YoYf_2iH3zu.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;color（色を塗る）&lt;a href=&quot;#color色を塗る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そのブロックに色を塗りたければ、塗る色を決めることも出来ます。
塗ることが出来る色の種類は以下の通りです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&quot;blue&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;blue_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;brown&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;brown_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;default&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;gray&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;gray_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;green&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;green_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;orange&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;orange_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;pink&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;pink_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;purple&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;purple_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;red&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;red_background”&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;yellow&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;yellow_background&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1830&quot; height=&quot;813&quot; src=&quot;/_astro/16.Cy-SDYf3_Z2rw1Pd.webp&quot; srcset=&quot;/_astro/16.Cy-SDYf3_Z1Oelsg.webp 640w, /_astro/16.Cy-SDYf3_ZbKJtA.webp 750w, /_astro/16.Cy-SDYf3_qqSlA.webp 828w, /_astro/16.Cy-SDYf3_Z1EjqSx.webp 1080w, /_astro/16.Cy-SDYf3_ZxgoYG.webp 1280w, /_astro/16.Cy-SDYf3_1zPsRv.webp 1668w, /_astro/16.Cy-SDYf3_Z2rw1Pd.webp 1830w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;mention（メンション）&lt;a href=&quot;#mentionメンション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notionのメンションは、色々なものにメンションすることが出来ます。&lt;/p&gt;&lt;p&gt;ユーザー、日時、他のページ、データベース、リンクを貼ってメンション、などなど・・・。&lt;/p&gt;&lt;p&gt;タスクを忘れないようにするための様々なメンションを利用できます。
&lt;img loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;328&quot; src=&quot;/_astro/17.CBPaCXmI_1deXBy.webp&quot; srcset=&quot;/_astro/17.CBPaCXmI_Z1VuTm9.webp 640w, /_astro/17.CBPaCXmI_1deXBy.webp 717w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Equation（数式）&lt;a href=&quot;#equation数式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;LaTex形式で、数式を記述することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;483&quot; height=&quot;148&quot; src=&quot;/_astro/18.9mFmVGos_Z2sViwz.webp&quot; srcset=&quot;/_astro/18.9mFmVGos_Z2sViwz.webp 483w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Linked text（リンク付きテキスト）&lt;a href=&quot;#linked-textリンク付きテキスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;テキストにリンクを追加できます。追加したリンクおよびリンクされているテキストは後で編集できます。
&lt;img loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;289&quot; src=&quot;/_astro/19.SItNyzFW_lgKIy.webp&quot; srcset=&quot;/_astro/19.SItNyzFW_lgKIy.webp 638w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;APIでリッチテキストで編集するサンプル集&lt;a href=&quot;#apiでリッチテキストで編集するサンプル集&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;基本的には前述のリファレンスを見ながらJSONを組み立てていけば作れると思います。&lt;/p&gt;&lt;p&gt;しかし、JSONを組み立てるのは煩雑な作業ですので、この記事でJSONのサンプルを紹介していきたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;日記のテンプレートを作る。&lt;a href=&quot;#日記のテンプレートを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではまずは、日記のテンプレートを作ってみましょう。毎日、日記用のページがNotionに作成されるという想定のものになります。&lt;/p&gt;&lt;p&gt;ここで使うNotion APIのエンドポイントは、&lt;code&gt;Create a page&lt;/code&gt;エンドポイントで、指定したデータベースの中に新しいページを追加します。&lt;/p&gt;&lt;p&gt;そして、下記のコードの&lt;code&gt;createDiaryPage()&lt;/code&gt;を実行すると日記用のページが出来上がります。（200行以上あります・・・。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;NOTION_INTEGRATION_TOKEN&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/pages&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;🥬&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenForDiary&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;heading_1&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;JST&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy年MM月dd日の日記&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;paragraph&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;天気：&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;晴れ、&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;orange_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;曇り、&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gray_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;雨、&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blue_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;雷&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;yellow_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;heading_2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;今日の出来事&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;green_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;出来事その1：&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;default&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;出来事その2：&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;default&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;heading_2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;感想&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;yellow_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;paragraph&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;heading_2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;明日の目標&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;pink_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;paragraph&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;heading_2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;過去の記録&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;default&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createDiaryPage&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_database_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;日記を作るためのテストですよ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Tags&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;multi_select&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Diary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenForDiary&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;createPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;createChildrenForDiary()&lt;/code&gt;でページの内容を取得して、&lt;code&gt;createPage()&lt;/code&gt;でページを実際に作ります。実際に上記のコードが走ると、下記のような日記が作成されます。&lt;/p&gt;&lt;p&gt;たったこれだけのボリュームで200行以上必要なんですね・・・。でもJSONの形を崩したら訳が分からなくなりそう・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;921&quot; height=&quot;831&quot; src=&quot;/_astro/31.Dk_MtqIv_2gVXOe.webp&quot; srcset=&quot;/_astro/31.Dk_MtqIv_jb5sU.webp 640w, /_astro/31.Dk_MtqIv_Z18NQkO.webp 750w, /_astro/31.Dk_MtqIv_Z10tgB5.webp 828w, /_astro/31.Dk_MtqIv_2gVXOe.webp 921w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ページの中に新しいブロックを追加する。&lt;a href=&quot;#ページの中に新しいブロックを追加する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次は、その作成したページに、新しいブロックを追加してみましょう。
ここでは、Notion APIの&lt;code&gt;Append block children&lt;/code&gt;エンドポイントを使っていきます。&lt;/p&gt;&lt;p&gt;そして、下記のコードの&lt;code&gt;appendChildrenOfDiary()&lt;/code&gt;を実行すると、先程の日記用のページにブロックが追加されます。（100行ぐらいです。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appendBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/blocks/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/children&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;patch&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenToAppend&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;シン・仮面ライダーを見た！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;シン・ゴジラは見られなかった・・・&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gray&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;いや、きっとシン・ゴジラを見てやるんだ・・・！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;orange&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appendChildrenOfDiary&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_block_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenToAppend&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;appendBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記のコードを実行すると、下記の画像のように「過去の記録」の下に新しいブロックが追加されました。
ちなみに、「過去の記録」のブロックと、今追加したブロックは「親子」の関係ではありません。言うなれば「兄弟」の関係です。今追加したブロックの親は、ページになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1034&quot; height=&quot;696&quot; src=&quot;/_astro/33.B5s_4s9x_1OJW0U.webp&quot; srcset=&quot;/_astro/33.B5s_4s9x_Z17AsRY.webp 640w, /_astro/33.B5s_4s9x_Z2mnrPs.webp 750w, /_astro/33.B5s_4s9x_Z1eocv.webp 828w, /_astro/33.B5s_4s9x_1OJW0U.webp 1034w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、childrenを持つことが出来ないブロックを指定すると、以下のようなエラーレスポンスが返ってきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;error&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;validation_error&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Block&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;does&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;support&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children.&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;request_id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ページの中に新しいブロックを、位置を指定して追加する。&lt;a href=&quot;#ページの中に新しいブロックを位置を指定して追加する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;新しいブロックを、ページ内の任意の位置に指定して追加することも可能です。&lt;/p&gt;&lt;p&gt;そこで、ブロックIDを取得する必要があります。ブロックIDを取得するためには、目当てのブロックを選択した状態にすると、浮かび上がるナビゲーションメニューの右側に横3点リーダーが表示されますので、それをクリックして開かれたコンテキストメニュー内の&lt;code&gt;Copy link to block&lt;/code&gt;をクリックすると、目当てのブロックIDが含まれたURLを取得できます。
&lt;img loading=&quot;lazy&quot; width=&quot;890&quot; height=&quot;301&quot; src=&quot;/_astro/36.DzQO-EVt_pfdqH.webp&quot; srcset=&quot;/_astro/36.DzQO-EVt_PesOt.webp 640w, /_astro/36.DzQO-EVt_ZErj5f.webp 750w, /_astro/36.DzQO-EVt_Z20Avg0.webp 828w, /_astro/36.DzQO-EVt_pfdqH.webp 890w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その取得したURLで、&lt;code&gt;https://www.notion.so/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?pvs=y#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&lt;/code&gt;の形式のものが取得できます。それぞれのプロパティは以下の情報を持っています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/code&gt;・・・ページID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y&lt;/code&gt;・・・分かりません。（0～4まで調べてみましたが違いが分かりませんでした。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&lt;/code&gt;・・・ブロックID&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ページ内の任意の位置に、新しいブロックを追加する際には、同じく&lt;code&gt;Append block children&lt;/code&gt;エンドポイントを使って、&lt;code&gt;after&lt;/code&gt;プロパティを設定して追加します。&lt;/p&gt;&lt;p&gt;下記のコードの&lt;code&gt;appendChildrenOfDiary()&lt;/code&gt;を実行すると日記用のページが出来上がります。（100行ぐらいです。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appendBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;brotherBlockId&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/blocks/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/children&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;patch&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;children&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;after&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;brotherBlockId&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenToAppend&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;シン・仮面ライダーを見た！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;red_background&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;シン・ゴジラは見られなかった・・・&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gray&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;bulleted_list_item&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;rich_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;いや、きっとシン・ゴジラを見てやるんだ・・・！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;link&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%B3%E3%83%BB%E3%82%B4%E3%82%B8%E3%83%A9&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;&quot;annotations&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;bold&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;italic&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;strikethrough&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;underline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;code&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;orange&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mention&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;mention&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;start&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2024-11-08&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;end&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2024-11-09&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;plain_text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@2024-11-09&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appendChildrenOfDiary&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_block_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createChildrenToAppend&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;brotherId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_target_block_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;appendBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;brotherId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;先程とは違う場所にブロックが追加されていることが確認できます。&lt;/p&gt;&lt;p&gt;「明日の目標」として掲げたので、シン・ゴジラのWikipediaの記事のリンクを貼って、さらに日付のメンションまで追加しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;659&quot; src=&quot;/_astro/38.4oBq8lbE_1Q7XSI.webp&quot; srcset=&quot;/_astro/38.4oBq8lbE_Z17uFKG.webp 640w, /_astro/38.4oBq8lbE_ZwQXEY.webp 750w, /_astro/38.4oBq8lbE_Zbbl6p.webp 828w, /_astro/38.4oBq8lbE_1Q7XSI.webp 1008w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、NotionのAPIにリクエストして、ページ内のリッチテキストブロックを更新する方法を紹介しました。&lt;/p&gt;&lt;p&gt;以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Notion APIでNotionのページを更新できる。&lt;/li&gt;
&lt;li&gt;Notionのリッチテキストでは、以下の書式が利用できる。
&lt;ul&gt;
&lt;li&gt;太字&lt;/li&gt;
&lt;li&gt;イタリック体&lt;/li&gt;
&lt;li&gt;打ち消し線&lt;/li&gt;
&lt;li&gt;下線（アンダーライン）&lt;/li&gt;
&lt;li&gt;コードスタイル&lt;/li&gt;
&lt;li&gt;文字の色、背景色の設定&lt;/li&gt;
&lt;li&gt;メンション&lt;/li&gt;
&lt;li&gt;数式&lt;/li&gt;
&lt;li&gt;リンク付きテキスト&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Create a page&lt;/code&gt;エンドポイントで、毎日の日記のテンプレートを作れたりする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Append block children&lt;/code&gt;エンドポイントで、ページの中に新しいブロックを追加できる。&lt;code&gt;after&lt;/code&gt;プロパティで追加する位置も設定できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Notionは、沢山のメモを管理することが出来るツールです。&lt;/p&gt;&lt;p&gt;その沢山のメモをするのにNotion APIを使って、楽にたっぷりメモをしていきましょう！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Notionのページを自動で編集できるぞ～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いつものページを自動投稿できますね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Google Apps Scriptの基本的な使い方・始め方</title><link>https://endorphinbath.com/posts/gas-lets-get-started/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-lets-get-started/</guid><description>GASの基本的な使い方を紹介します。Googleの各種サービスを利用するためにGoogle Cloudと紐付ける方法も紹介します。</description><pubDate>Tue, 29 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そういえば基本的な使い方の記事を書いていない。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;書くか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptとは？&lt;a href=&quot;#google-apps-scriptとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script（GAS）は、Googleの様々なサービスと連携して自動化を実現するためのスクリプト作成ツールです。例えば、以下に挙がるような様々なGoogleサービスと楽に連携することが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Googleスプレッドシート&lt;/li&gt;
&lt;li&gt;Googleドキュメント&lt;/li&gt;
&lt;li&gt;Googleスライド&lt;/li&gt;
&lt;li&gt;Googleドライブ&lt;/li&gt;
&lt;li&gt;Gmail&lt;/li&gt;
&lt;li&gt;Googleカレンダー&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;などなど、これだけのサービスで行う作業を自動化することが出来ますので、GASはかなり強力なツールです。&lt;/p&gt;&lt;p&gt;以下にGASのリファレンスのページを載せておきます。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/workspace?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google Workspace | Google for Developers&lt;/div&gt;&lt;div&gt;Google Workspace アプリを拡張して接続します。&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;YouTube、Googleアナリティクスなども操作できますね。本当に門戸が広いです。
それではその便利なGoogle Apps Scriptを始めていきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptの始め方&lt;a href=&quot;#google-apps-scriptの始め方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、Google Apps Scriptの始めるための記事をスタートさせていきたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Googleアカウントの準備&lt;a href=&quot;#googleアカウントの準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、Googleアカウントが無いと何も始まらないので、準備しておきましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Apps Scriptのプロジェクトの作成&lt;a href=&quot;#google-apps-scriptのプロジェクトの作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GASを使うために、GASのプロジェクトを作成する必要があります。&lt;/p&gt;&lt;p&gt;以下の手順で作っていきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;スプレッドシート、ドキュメント、スライドの編集画面から、&lt;code&gt;拡張機能&lt;/code&gt;＞&lt;code&gt;Apps Script&lt;/code&gt;の順で、スクリプトエディタを起動します。（GASのトップ画面から新規作成したり、Googleドライブから新規作成すると、スプレッドシート等のファイルに紐付かなくなるので、編集画面から作成します。）&lt;/li&gt;
&lt;li&gt;スクリプトエディタが開いたら、プロジェクト名を入力し、&lt;code&gt;OK&lt;/code&gt;ボタンをクリックします。&lt;/li&gt;
&lt;li&gt;デフォルトで&lt;code&gt;コード.gs&lt;/code&gt;というファイルが作成されます。このファイルにJavaScriptコードを記述していきます。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コードの実行&lt;a href=&quot;#コードの実行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、スクリプトエディタに、JavaScriptのコードを記述します。
コードを少し書いたら、スクリプトエディタのツールバーにある&lt;code&gt;実行&lt;/code&gt;ボタンをクリックするか、ショートカットキー（&lt;code&gt;Ctrl + Enter&lt;/code&gt;）を押してコードを実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;hello, world.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;無事に実行が完了して、下方にログが表示されたことが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;904&quot; src=&quot;/_astro/02.rkjGPEKL_ZEKnLx.webp&quot; srcset=&quot;/_astro/02.rkjGPEKL_Z1WcWqa.webp 640w, /_astro/02.rkjGPEKL_vF4qE.webp 750w, /_astro/02.rkjGPEKL_Z1jg26O.webp 828w, /_astro/02.rkjGPEKL_1SWx1K.webp 1080w, /_astro/02.rkjGPEKL_Z27mwk6.webp 1280w, /_astro/02.rkjGPEKL_H8s3H.webp 1668w, /_astro/02.rkjGPEKL_ZEKnLx.webp 1917w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleサービスとの連携&lt;a href=&quot;#googleサービスとの連携&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Apps Scriptでは、Google Apps Scriptのサービス（&lt;code&gt;ScriptProperties&lt;/code&gt;や&lt;code&gt;HtmlService&lt;/code&gt;）や、Google Apps Scriptがサポートする他のGoogleのサービス（Gmail、Googleスプレッドシートなど）のオブジェクトを使用して、様々な操作を行うことができます。&lt;/p&gt;&lt;p&gt;そして、それらのGoogleのサービスを使用するためには、Google Cloudにもプロジェクトを作成した方が良いです。作成しないでコードの作成を進めていくと、いずれ途中で権限に引っ掛かってコードを実行することが出来なくなります。&lt;/p&gt;&lt;p&gt;まだGoogle Cloudにプロジェクトを作成していない場合は、プロジェクトを作成したいGoogleアカウントでログインしている状態で、下記のサイトから右上の&lt;code&gt;コンソール&lt;/code&gt;をクリックしてプロジェクトを作成します。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;AI とクラウド コンピューティング サービス&lt;/div&gt;&lt;div&gt;セキュリティ、データ管理、ハイブリッド クラウドとマルチクラウドなど、Google の AI とクラウド コンピューティング サービスを活用して、ビジネス上の課題に正面から取り組みましょう。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Google Cloudのコンソールに移動したら、新しいプロジェクトを作成していきます。&lt;/p&gt;&lt;p&gt;以下のような画面が表示されたら、プロジェクト名およびプロジェクトIDを設定していきます。何かしらの組織に属しているアカウントであれば、組織も設定できるでしょう。（上のタスクバーはデフォルトは白色です。拡張機能を入れているため白色ではありません。）
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;833&quot; src=&quot;/_astro/06.CgSqSV0__1DE1o6.webp&quot; srcset=&quot;/_astro/06.CgSqSV0__Z9QLyN.webp 640w, /_astro/06.CgSqSV0__22CjYY.webp 750w, /_astro/06.CgSqSV0__1lJdCJ.webp 828w, /_astro/06.CgSqSV0__ZX75Hc.webp 1080w, /_astro/06.CgSqSV0__Z2ppTug.webp 1280w, /_astro/06.CgSqSV0__2hr3Yz.webp 1668w, /_astro/06.CgSqSV0__1DE1o6.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;プロジェクトが作成できると、以下のようなプロジェクトのトップ画面が表示されます。ここで表示されている、&lt;code&gt;プロジェクト番号&lt;/code&gt;をメモしておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;909&quot; src=&quot;/_astro/08.b6D9p0mQ_qGLRm.webp&quot; srcset=&quot;/_astro/08.b6D9p0mQ_W5qfc.webp 640w, /_astro/08.b6D9p0mQ_Z1EdFGU.webp 750w, /_astro/08.b6D9p0mQ_110PXq.webp 828w, /_astro/08.b6D9p0mQ_Z25T2jW.webp 1080w, /_astro/08.b6D9p0mQ_1wrWMC.webp 1280w, /_astro/08.b6D9p0mQ_ZJG5mO.webp 1668w, /_astro/08.b6D9p0mQ_qGLRm.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、そのプロジェクト番号を、GASのスクリプトエディタ画面内のサイドバーにある&lt;code&gt;プロジェクトの設定&lt;/code&gt;をクリックして、表示された画面内の&lt;code&gt;Google Cloud Platform（GCP）プロジェクト&lt;/code&gt;のセクションで、&lt;code&gt;プロジェクトを変更&lt;/code&gt;をクリックして先程メモしたプロジェクト番号を入力します。
&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;904&quot; src=&quot;/_astro/09.B6QdSd0H_1tvDAA.webp&quot; srcset=&quot;/_astro/09.B6QdSd0H_Z2cYhsg.webp 640w, /_astro/09.B6QdSd0H_fSJoy.webp 750w, /_astro/09.B6QdSd0H_Z293QJ2.webp 828w, /_astro/09.B6QdSd0H_Z13lnWF.webp 1080w, /_astro/09.B6QdSd0H_1XzeI.webp 1280w, /_astro/09.B6QdSd0H_Z2dHzbp.webp 1668w, /_astro/09.B6QdSd0H_1tvDAA.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、他の各種Googleサービスを利用しやすくなりました！&lt;/p&gt;&lt;p&gt;これからのコード実行時に、Googleサービス利用するようにコーディングしていると、権限の認証をするウインドウが表示されることがあると思います。この権限の認証をすれば、Googleサービスを使えるようになるというわけです。&lt;/p&gt;&lt;p&gt;ちなみに、先程実行したコードではログを表示する処理を行いましたが、Google Cloudのプロジェクトに紐付けることで、そのログをそのプロジェクト内の&lt;code&gt;ロギング&lt;/code&gt;という機能で、いつでも確認することが出来るようになります。そして、この後に紹介する&lt;code&gt;トリガー&lt;/code&gt;機能で自分が見ていない時に実行された関数のログを後で確認することが可能なわけです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleサービスの利用&lt;a href=&quot;#googleサービスの利用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは試しに、Googleスプレッドシート内のセルに任意の文字列を記入したいと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A1&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;コードを実行すると、権限の認証をすることになります。
表示されたウインドウ内の「詳細を表示」をクリックして、「（安全ではないページ）に移動」をクリックして、認証をします。
&lt;img loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;909&quot; src=&quot;/_astro/10_0.BB3pnEwz_1YLTzi.webp&quot; srcset=&quot;/_astro/10_0.BB3pnEwz_207aGv.webp 640w, /_astro/10_0.BB3pnEwz_Z2earWD.webp 750w, /_astro/10_0.BB3pnEwz_2h4VsN.webp 828w, /_astro/10_0.BB3pnEwz_ZVGQ28.webp 1080w, /_astro/10_0.BB3pnEwz_HQKSu.webp 1280w, /_astro/10_0.BB3pnEwz_Z1rpufh.webp 1668w, /_astro/10_0.BB3pnEwz_1YLTzi.webp 1912w&quot; /&gt;&lt;/p&gt;&lt;p&gt;権限が認証できると、コードが実行されて、Googleスプレッドシートに「Hello, World!」が入力されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1377&quot; height=&quot;906&quot; src=&quot;/_astro/10.B1tVOl6v_19mqBB.webp&quot; srcset=&quot;/_astro/10.B1tVOl6v_Z1SNg73.webp 640w, /_astro/10.B1tVOl6v_yVFLc.webp 750w, /_astro/10.B1tVOl6v_lANJE.webp 828w, /_astro/10.B1tVOl6v_5gjC3.webp 1080w, /_astro/10.B1tVOl6v_Z1uvHEJ.webp 1280w, /_astro/10.B1tVOl6v_19mqBB.webp 1377w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;関数のトリガーの設定&lt;a href=&quot;#関数のトリガーの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GASでは、特定のイベントが発生した時に自動的にスクリプトを実行したいと思った場合、そのトリガーを設定することが出来ます。
GASのスクリプトエディタ画面内のサイドバーにある&lt;code&gt;トリガー&lt;/code&gt;をクリックして、トリガー設定用の画面が表示されたら、右下にある&lt;code&gt;トリガーを追加&lt;/code&gt;でトリガーを追加することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;904&quot; src=&quot;/_astro/11.CC1GSM4N_BcGAM.webp&quot; srcset=&quot;/_astro/11.CC1GSM4N_1LrN5Q.webp 640w, /_astro/11.CC1GSM4N_ZOQiQg.webp 750w, /_astro/11.CC1GSM4N_2poIpc.webp 828w, /_astro/11.CC1GSM4N_BCWIs.webp 1080w, /_astro/11.CC1GSM4N_1GWUUQ.webp 1280w, /_astro/11.CC1GSM4N_1YiNpT.webp 1668w, /_astro/11.CC1GSM4N_BcGAM.webp 1912w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行する関数を選択して、デプロイバージョンを選択することも可能です。（GASはスクリプトをデプロイすることも可能なのです。）
トリガーを発火させるイベントのソースは、2024-11-06時点で以下のものになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;スプレッドシートから&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;時間主導型&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;カレンダーから&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;765&quot; height=&quot;646&quot; src=&quot;/_astro/12.DtQOGQTh_ZKUG8.webp&quot; srcset=&quot;/_astro/12.DtQOGQTh_wyHkY.webp 640w, /_astro/12.DtQOGQTh_5dFyh.webp 750w, /_astro/12.DtQOGQTh_ZKUG8.webp 765w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;スプレッドシートから&lt;/code&gt;関数を実行する場合、&lt;code&gt;起動時&lt;/code&gt;、&lt;code&gt;編集時&lt;/code&gt;、&lt;code&gt;変更時&lt;/code&gt;、&lt;code&gt;フォーム送信時&lt;/code&gt;の4種類があります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;カレンダーから&lt;/code&gt;関数を実行する場合、特定のアカウントのユーザーがカレンダーを更新した時に、関数を実行させることが可能です。&lt;/p&gt;&lt;p&gt;&lt;code&gt;時間主導型&lt;/code&gt;で関数を実行する場合、&lt;code&gt;特定の日時&lt;/code&gt;、もしくは&lt;code&gt;分 or 時間 or 日付 or 週 or 月ベース&lt;/code&gt;のタイマーで一定の頻度で実行することが可能です。例えば、&lt;code&gt;時間ベースのタイマー&lt;/code&gt;を選択した場合、&lt;code&gt;1 or 2 or 4 or 6 or 8 or 12時間おきに&lt;/code&gt;関数を実行することが出来ます。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;エラー通知設定&lt;/code&gt;を設定することで、実行した際にエラーが発生した時に、エラー通知のメールが自分のアカウントのGmailに送ることも可能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Apps Scriptを始める方法と、基本的な使い方に関するする方法を紹介しました。
以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Apps Script（GAS）は、Googleの様々なサービスと連携して自動化を実現できる。&lt;/li&gt;
&lt;li&gt;スクリプトエディタが用意されており、そこからコードを実行できる。&lt;/li&gt;
&lt;li&gt;Google Cloudのプロジェクトと連携しておくと、さらに便利になる。&lt;/li&gt;
&lt;li&gt;スクリプトの中の関数に、トリガーを割り当てることも可能である。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで、Google Apps Scriptの始まりです！
もっともっと色々なことが出来るので、興味がありましたらその他の記事を御覧ください。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定に関するその他の記事&lt;a href=&quot;#設定に関するその他の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-gss-setting-to-edit/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】Google Spreadsheetを編集するために初期設定からのまとめ&lt;/div&gt;&lt;div&gt;PythonからGoogle Spreadsheetを編集するために行った認証の設定を掲載します。最終的には、gspreadというモジュールで編集できるようになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/02/20220109_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これから始まるGAS生活です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スタートラインに立ったな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion API】Google Apps Scriptでデータベースからページの中身を取得する</title><link>https://endorphinbath.com/posts/gas-notion-api-retrieve-pages/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-notion-api-retrieve-pages/</guid><description>NotionのDatabase API、Page API、Block APIでページの内容を取得する方法を紹介します。ベースはJavaScriptなのでNode.js、Deno、Bunでも流用できるかと。</description><pubDate>Mon, 28 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、遅い・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ページが増えてくると、表示するのがな・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionのページが増えてくると表示が重くなる・・・。&lt;a href=&quot;#notionのページが増えてくると表示が重くなる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notionでは、データベース上に沢山ページを作成することが出来ます。&lt;/p&gt;&lt;p&gt;しかし、どんどんページが増えてくると、そのページをブラウザ上で表示する処理が重たくなってきます・・・。&lt;/p&gt;&lt;p&gt;そこで今回は、Notionのページの情報をGoogleスプレッドシートで表示する方法を紹介します。&lt;/p&gt;&lt;p&gt;Googleスプレッドシートで情報を表示する方が、Notionのサイトでページを表示するよりも速く表示できます。そのために、「Notion API」を「Google Apps Script（以下、GAS）」で叩いて、Notionのページを取得していきたいと思います。&lt;/p&gt;&lt;p&gt;その他、Notionのページを新規作成、更新をGASで行う方法も取り扱います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notion APIとは&lt;a href=&quot;#notion-apiとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notion APIは、Notionのデータをプログラムから操作するためのインターフェースです。&lt;/p&gt;&lt;p&gt;これを使うことで、JavaScriptなどのプログラミング言語から、Notionのページを作成・更新・削除したり、情報を取得したりすることができます。例えば、Googleフォームの回答を自動でNotionのデータベースに転記したり、Notionの情報を元にスプレッドシートを更新したり、その日に登録されたNotionのページの一覧を自分のGmailに送ったり、といったことが可能になります。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/guides/get-started/overview&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Overview - Notion Docs&lt;/div&gt;&lt;div&gt;Discover what Notion connections are, when to use each type, and what you can build.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;準備するもの&lt;a href=&quot;#準備するもの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Apps Script（以降、GAS）を使って、NotionのAPIを利用していきます。&lt;/p&gt;&lt;p&gt;GASは、JavaScriptベースのプログラミング言語なので、今回のコードの殆どの部分は、Node.js、Deno、Bun等のランタイムでも利用できるかと思います。
以下のものが、今回のプログラムの実行に必要になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Notionのアカウント:&lt;/strong&gt; APIを利用するためには、Notionのアカウントが必要です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notion Integration:&lt;/strong&gt; Notionのワークスペースで、APIを利用するためのIntegrationを作成し、トークンを取得します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Apps Scriptのプロジェクト:&lt;/strong&gt; 新規プロジェクトを作成するか、既存のプロジェクトを使用します。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;Notionのアカウント&lt;a href=&quot;#notionのアカウント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;アカウントを持っていない場合は、以下から作ります。&lt;/p&gt;&lt;a href=&quot;https://www.notion.com/ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;あなたのニーズを叶えるAIワークスペース。| Notion (ノーション)&lt;/div&gt;&lt;div&gt;カスタムエージェントの構築や、すべてのアプリを横断する情報検索、面倒な作業の自動化を行えるAIワークスペースなど、チームはより多くの作業をスピーディにこなせます。&lt;/div&gt;&lt;div&gt;www.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/meta/custom-agents-og.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Notion Integration&lt;a href=&quot;#notion-integration&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自分のNotionアカウント内にあるページを、外部からプログラミング言語で操作するためには、Notionのワークスペースで&lt;code&gt;Integration&lt;/code&gt;というものを作成し、トークンを取得する必要があります。このトークンが、APIへの認証に利用されます。&lt;/p&gt;&lt;p&gt;まずは、Notionの開発者向けページにアクセスします。&lt;/p&gt;&lt;a href=&quot;https://www.notion.so/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.so/images/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Notion | Where teams and agents work together&lt;/div&gt;&lt;div&gt;A collaborative AI workspace, built on your company context. Build and orchestrate agents right alongside your team&apos;s projects, meetings, and connected apps.&lt;/div&gt;&lt;div&gt;www.notion.so&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.so/images/meta/default.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;上記の開発者向けページが切れている場合、以下の手順で開発者向けページにアクセスしてみて下さい。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Notionのワークスペースでサイドバーを開いて、&lt;code&gt;Settings&lt;/code&gt;をクリック。&lt;/li&gt;
&lt;li&gt;表示されたウインドウ内のサイドバーにある&lt;code&gt;Connections&lt;/code&gt;をクリック。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connections&lt;/code&gt;の下方にある、&lt;code&gt;Develop or manage integrations&lt;/code&gt;をクリック。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;New Integration&lt;/code&gt;からIntegrationを追加していきます。&lt;/li&gt;
&lt;li&gt;自分が使っているNotionのワークスペースを選んだりして、Integrationを追加します。&lt;/li&gt;
&lt;li&gt;Integrationが作成されたら、そのIntegrationの&lt;code&gt;Internal Integration Secret&lt;/code&gt;をメモします。これをGASのコード内で使います。&lt;/li&gt;
&lt;li&gt;Notionのワークスペースに戻って、先程の&lt;code&gt;Connections&lt;/code&gt;のウインドウを開いて、自分が先程作成したIntegrationが追加されていることを確認します。&lt;/li&gt;
&lt;li&gt;次に、データベースの画面を開きます。すると、画面右上の横3点リーダーをクリックして開かれるメニューの下方に、自分が先程作成したIntegrationが追加されていることが確認できます。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;code&gt;Connections&lt;/code&gt;のウインドウを開いて、自分が先程作成したIntegrationが追加されている場合、そのIntegrationの横3点リーダーをクリックすると、&lt;code&gt;Copy internal integration token&lt;/code&gt;やら&lt;code&gt;Manage in developer portal&lt;/code&gt;といった選択肢が追加されているConnectionを確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;722&quot; src=&quot;/_astro/06.DdRy4pO9_Za1CtC.webp&quot; srcset=&quot;/_astro/06.DdRy4pO9_1kMRp8.webp 640w, /_astro/06.DdRy4pO9_Z2r18sw.webp 750w, /_astro/06.DdRy4pO9_Z1IUd5O.webp 828w, /_astro/06.DdRy4pO9_Z15tjvv.webp 1080w, /_astro/06.DdRy4pO9_Za1CtC.webp 1233w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上記の手順でも辿り着けなかったら以下のNotion公式ページから、手順を参照してみて下さい。（僕が2024-11-05時点で以下のページの手順で辿り着けなかったので、上記の手順を残しました・・・のですが・・・。）&lt;/p&gt;&lt;a href=&quot;https://www.notion.com/help/create-integrations-with-the-notion-api&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.com/front-static/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Notion API connections – Notion Help Center&lt;/div&gt;&lt;div&gt;With Notion&apos;s API, you&apos;ll be able to create custom internal connections. Some of our partners may also require an internal connection token in order to link their platform to your Notion workspace - below, we&apos;ll walk you through how to set this up 🏗️&lt;/div&gt;&lt;div&gt;www.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://images.ctfassets.net/spoqsaf9291f/12hDHQuwwWB60tA3rEbJ1c/7c76c8059fe7e69e02c82992de113d39/Create_integrations_with_the_Notion_API_-_hero.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Apps Scriptのプロジェクト&lt;a href=&quot;#google-apps-scriptのプロジェクト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GASを使うために、GASのプロジェクトを作成する必要があります。&lt;/p&gt;&lt;p&gt;プロジェクト作成の手順は以下の記事をご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-lets-get-started/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】Google Apps Scriptの基本的な使い方・始め方&lt;/div&gt;&lt;div&gt;GASの基本的な使い方を紹介します。Googleの各種サービスを利用するためにGoogle Cloudと紐付ける方法も紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241029_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notion APIの基本&lt;a href=&quot;#notion-apiの基本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これで、Notion APIを使う準備は出来たので使っていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;アクセストークンで認証する&lt;a href=&quot;#アクセストークンで認証する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程、Notionのワークスペースなどで&lt;code&gt;Internal Integration Secret&lt;/code&gt;や&lt;code&gt;Copy internal integration token&lt;/code&gt;をクリックしてメモしたトークンを使います。&lt;/p&gt;&lt;p&gt;トークンをコード内に貼るのは良くないですが、これで一応コードを試すことは可能です。出来れば、アクセストークンがそのまま書いてあるコードをGitなどに載せたくないですね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Notion Integrationで取得したトークンをここに設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_access_token&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Git等に載せる時はコッチ。トークンはスクリプトプロパティに入れる。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;NOTION_API_ACCESS_TOKEN&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リクエストの構造&lt;a href=&quot;#リクエストの構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notion APIへリクエストを送る時は基本的にこんな感じの形で送ります。エンドポイントによって、メソッド等が違ったりしますが、それは後述します。
これは、&lt;code&gt;Create a page&lt;/code&gt;エンドポイントへのリクエストの例です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/pages&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;リクエストして返ってきたレスポンス&lt;code&gt;response&lt;/code&gt;を解析する際に、&lt;code&gt;response.getContentText()&lt;/code&gt;でJSONを取得して、&lt;code&gt;JSON.parse(response.getContentText())&lt;/code&gt;だとオブジェクトを取得できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ページやデータベースのID&lt;a href=&quot;#ページやデータベースのid&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;参照するページやデータベースのIDを知りたい時は、そのページやデータベースをブラウザ上で開いてURLを確認します。そしたら、以下の部分がそれぞれのIDに当たります。&lt;/p&gt;&lt;p&gt;例：URLが&lt;code&gt;https://www.notion.so/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?v=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy&amp;amp;p=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&amp;amp;pm=s&lt;/code&gt;だった場合。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ページID：&lt;code&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;データベースID：&lt;code&gt;zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ちなみに、&lt;code&gt;yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy&lt;/code&gt;は、データベースのビューIDです。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;さらにちなみに、&lt;code&gt;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;/code&gt;という風にハイフンが付いているIDは、「UUID」というものになります。ソッチを使ってリクエストしなければならない場合もあります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionのページ周りの構造に関して&lt;a href=&quot;#notionのページ周りの構造に関して&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Notion APIを触る前に、Notionで利用する「データベース」、「ページ」、「ブロック」という要素を知っておきましょう。Notionにおけるデータ構造はそれらの要素で構成されています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;データベース&lt;a href=&quot;#データベース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;データベースは、Notionにおける最も基本的な構造の1つです。Excelのスプレッドシートのような役割を果たし、複数のページをまとめ、特定のテーマやプロジェクトに関する情報を一元管理する場所です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;プロパティ:&lt;/strong&gt; 各ページに共通する属性（例えば、タイトル、作成日、ステータスなど）を定義します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ビュー:&lt;/strong&gt; データベース内のページを様々な角度から表示するための仕組みです。一覧表示、カレンダー表示、ボード表示など、様々なビューを切り替えることができます。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ページ&lt;a href=&quot;#ページ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ページは、データベース内の個々のレコードです。データベースの行に相当し、具体的な情報が記述されます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;プロパティ値:&lt;/strong&gt; データベースで定義されたプロパティに対応する値を持ちます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ブロック:&lt;/strong&gt; ページの内容を構成する最小単位です。テキスト、画像、リスト、コードブロックなど、様々な種類のブロックを組み合わせて、ページを作成します。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ブロック&lt;a href=&quot;#ブロック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ブロックは、ページの内容を構成する最小単位です。テキスト、画像、リスト、コードブロックなど、様々な種類のブロックがあります。ブロックは、ページ内で自由に配置したり、入れ子にしたりすることができます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;テキストブロック:&lt;/strong&gt; 文章を入力するブロックです。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;見出しブロック:&lt;/strong&gt; 見出しを作成するブロックです。Heading 1～Heading 3まであります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;リストブロック:&lt;/strong&gt; リストを作成するブロックです。Bulleted ListやNumbered Listが該当します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;コードブロック:&lt;/strong&gt; コードを記述するブロックです。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;画像ブロック:&lt;/strong&gt; 画像を挿入するブロックです。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;データベースブロック:&lt;/strong&gt; 別のデータベースを埋め込むブロックです。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;その他:&lt;/strong&gt; ToDoリスト、チェックボックス、分割線など、様々な種類のブロックがあります。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;データ構造の全体像&lt;a href=&quot;#データ構造の全体像&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notionのデータ構造は、これらの要素が組み合わさって構成されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;データベース:&lt;/strong&gt; 複数のページをまとめる容器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ページ:&lt;/strong&gt; データベース内の個々のレコード&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ブロック:&lt;/strong&gt; ページの内容を構成する最小単位&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;例えば、「タスク管理」というデータベースを作成し、各タスクをページとして作成します。各ページには、「タスク名」、「担当者」、「期限」などのプロパティを設定し、テキストブロックやチェックボックスブロックを使ってタスクの詳細を記述します。&lt;/p&gt;&lt;p&gt;また、「ページ」は「ルートブロック」と同義です。つまりは「ページ」は「ブロック」でもあるのです。このことを知っておくと、Notion APIの&lt;code&gt;Retrieve block children&lt;/code&gt;エンドポイントを使用する際に役に立ちます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;データベースの中にあるページの内容を取得する&lt;a href=&quot;#データベースの中にあるページの内容を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、基本的な部分を押さえた上で、Notionのデータベースの中にある任意のページの内容を取得していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;「Query a database」エンドポイント&lt;a href=&quot;#query-a-databaseエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、Notion APIの&lt;code&gt;Query a database&lt;/code&gt;のエンドポイントで、データベースの中にあるページの一覧を取得します。APIの公式リファレンスは下記のリンクから見れます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/post-database-query&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Overview - Notion Docs&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リクエストの構造はこんな感じです。&lt;code&gt;muteHttpExceptions&lt;/code&gt;を&lt;code&gt;true&lt;/code&gt;にすると、レスポンスがエラーで帰ってきた時に原因を見つけやすくなります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queryDatabase&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/databases/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/query&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;filter&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;or&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;property&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;contains&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;タスク&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;sorts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;property&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Created time&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;direction&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;descending&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;page_size&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;DATABASE_ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;queryDatabase&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この&lt;code&gt;Query a database&lt;/code&gt;のエンドポイントで取得できるページは、1回のリクエストごとに100ページまでの上限が定められています。&lt;/p&gt;&lt;p&gt;そのため、101個以上のページを取得するためには、直前のリクエストから返ってきたレスポンスの中にある&lt;code&gt;has_more&lt;/code&gt;フィールドを見て、&lt;code&gt;true&lt;/code&gt;になっているかどうかを確認します。&lt;code&gt;true&lt;/code&gt;になっていれば更にリクエストして追加のページを取得できますので、&lt;code&gt;next_cursor&lt;/code&gt;フィールドの中にあるページIDをメモして、次のリクエスト時に&lt;code&gt;start_cursor&lt;/code&gt;フィールドを追加して、追加のページを取得します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queryDatabase&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/databases/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/query&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;filter&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;or&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;property&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;contains&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;タスク&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;sorts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;property&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Created time&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;direction&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;descending&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;page_size&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;start_cursor&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;DATABASE_ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;queryDatabase&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、受け取れるレスポンスは、JSON形式だとこんな感じになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;list&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;your_page_id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;created_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:14:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;last_edited_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:15:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;in_trash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// 各プロパティの値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;public_url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// ... 他のページ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ページネーションに関する情報&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;各プロパティの値は、例えば下記のように格納されています。長いJSONは読みにくいので、上記のものと見比べて確認してみて下さい。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;list&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;your_page_id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;created_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;&quot;2023-02-15T21:07:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;last_edited_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:15:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;in_trash&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;タスク1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;              &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Status&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;select&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;完了&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;public_url&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;next_cursor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;has_more&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「Retrieve a page」エンドポイント&lt;a href=&quot;#retrieve-a-pageエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Notion APIの&lt;code&gt;Retrieve a page&lt;/code&gt;のエンドポイントで、先程データベースから取得したページの一つからプロパティを取得します。このエンドポイントは、ページの &lt;strong&gt;中身だけ&lt;/strong&gt; を取得する場合は不要です。&lt;/p&gt;&lt;p&gt;APIの公式リファレンスは下記のリンクから見れます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/retrieve-a-page&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Retrieve a page - Notion Docs&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リクエストの構造はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrievePage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/pages/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;get&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;PAGE_ID&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;retrievePage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、受け取れるレスポンスはこんな感じになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;pageId&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;created_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-04-05T13:34:26.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;last_edited_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-04-05T13:34:26.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;has_children&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;archived&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// プロパティの定義&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// その他の属性&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「Retrieve block children」エンドポイント&lt;a href=&quot;#retrieve-block-childrenエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Notion APIの&lt;code&gt;Retrieve block children&lt;/code&gt;のエンドポイントで、先程データベースから取得したページの一つから内容を取得します。このエンドポイントは、ページの &lt;strong&gt;プロパティだけ&lt;/strong&gt; を取得する場合は不要です。&lt;/p&gt;&lt;p&gt;APIの公式リファレンスは下記のリンクから見れます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/get-block-children&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Retrieve block children - Notion Docs&lt;/div&gt;&lt;div&gt;Returns a paginated array of child block objects contained in the block using the ID specified. In order to receive a complete representation of a block, you may need to recursively retrieve the block children of child blocks.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リクエストの構造はこんな感じです。コード内で&lt;code&gt;blockId&lt;/code&gt;と記述している理由は、「ブロックID」は「ルートブロック（ページ）のID」を指しているためです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieveBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/blocks/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/children&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;get&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;PAGE_ID&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;retrieveBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、受け取れるレスポンスはこんな感じになります。ブロックもページの時と同様に、一度のリクエストで100個までしか取得できません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;list&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;results&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ { &lt;/span&gt;&lt;span&gt;&quot;object: &quot;&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;62b4bdff-571a-4be9-823f-e6f8a12f420e&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;&quot;parent: [Object],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;created_time&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;2023-04-05T13&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;34&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;26.000&lt;/span&gt;&lt;span&gt;Z&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;last_edited_time&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;2023-04-05&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;34&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;26.000&lt;/span&gt;&lt;span&gt;Z&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;created_by&lt;/span&gt;&lt;span&gt;&quot;: [Object],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;last_edited_by&lt;/span&gt;&lt;span&gt;&quot;: [Object],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;has_children&lt;/span&gt;&lt;span&gt;&quot;: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;archived&lt;/span&gt;&lt;span&gt;&quot;: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;in_trash&lt;/span&gt;&lt;span&gt;&quot;: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;: &apos;paragraph&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;paragraph&lt;/span&gt;&lt;span&gt;&quot;: [Object]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;next_cursor&lt;/span&gt;&lt;span&gt;&quot;: null,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;has_more&lt;/span&gt;&lt;span&gt;&quot;: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;block&lt;/span&gt;&lt;span&gt;&quot;: {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// その他の属性&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;なので、&lt;code&gt;has_more&lt;/code&gt;が&lt;code&gt;true&lt;/code&gt;であれば、次のリクエストにクエリパラメータ&lt;code&gt;start_cursor&lt;/code&gt;を含めて、レスポンス「&lt;code&gt;next_cursor&lt;/code&gt;のブロックIDを記載します。この時のブロックIDは、UUIDである必要があるので、ハイフンを含めなければなりません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieveBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startId&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/blocks/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/children&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/blocks/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blockId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/children?start_cursor=&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;get&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;PAGE_ID&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;BLOCK_UUID&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;retrieveBlockChildren&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他のAPIエンドポイント&lt;a href=&quot;#その他のapiエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程は、データベースからページのプロパティおよび内容を取得するまでに必要なエンドポイントを並べましたが、それ以外の処理を行うエンドポイントもあります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;「Create a page」エンドポイント&lt;a href=&quot;#create-a-pageエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notion APIの&lt;code&gt;Create a page&lt;/code&gt;のエンドポイントで、指定したデータベースの中に新しいページを追加できます。APIの公式リファレンスは下記のリンクから見れます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/post-page&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Create a page - Notion Docs&lt;/div&gt;&lt;div&gt;Use this API to create a new page as a child of an existing page or data source.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リクエストの構造はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/pages&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;parent&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;database_id&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;🥬&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_database_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;テストですよ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Tags&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;multi_select&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GoogleAppsScript&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;createPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;databaseId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、受け取れるレスポンスはこんな感じになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;your_page_id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;created_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:14:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;last_edited_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:14:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;cover&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;icon&quot;&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;emoji&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;🥬&quot;&lt;/span&gt;&lt;span&gt; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 作成したページのプロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ページの作成に失敗した場合のレスポンスは下記のような感じになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;error&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Invalid request&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「Update page properties」エンドポイント&lt;a href=&quot;#update-page-propertiesエンドポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Notion APIの&lt;code&gt;Update page properties&lt;/code&gt;のエンドポイントで、ページのプロパティの値を変更することが出来ます。APIの公式リファレンスは下記のリンクから見れます。&lt;/p&gt;&lt;a href=&quot;https://developers.notion.com/reference/patch-page&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://developers.notion.com/mintlify-assets/_mintlify/favicons/notion-demo/1PaJq9z3waub4TpE/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Update page - Notion Docs&lt;/div&gt;&lt;div&gt;Use this API to modify attributes of a Notion page, such as its properties, icon, or cover.&lt;/div&gt;&lt;div&gt;developers.notion.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://notion-demo.mintlify.app//images/og-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リクエストの構造はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;patchPageProperties&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.notion.com/v1/pages/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;patch&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Notion-Version&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2022-06-28&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;properties&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your_page_id&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;タスクなのですよ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;Tags&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;multi_select&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GoogleAppsScript&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;JavaScript&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;patchPageProperties&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pageId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、受け取れるレスポンスはこんな感じになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;id&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;your_page_id&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;created_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:14:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;last_edited_time&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;2023-11-22T03:14:00.000Z&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 更新されたページの他のプロパティ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ページの更新に失敗した場合のレスポンスは下記のようになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;object&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;error&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;400&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Invalid request&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Notionページの一覧をスプレッドシートに載せたらこうなる。&lt;a href=&quot;#notionページの一覧をスプレッドシートに載せたらこうなる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notionのページの一覧を、Googleスプレッドシートに載せたらこんな感じになります。この状態からまたさらに色々と出来そうな感じがしてきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1607&quot; height=&quot;875&quot; src=&quot;/_astro/61.BHCUtoYJ_KRwMD.webp&quot; srcset=&quot;/_astro/61.BHCUtoYJ_R7BQQ.webp 640w, /_astro/61.BHCUtoYJ_ZBAnDl.webp 750w, /_astro/61.BHCUtoYJ_1Nz2uH.webp 828w, /_astro/61.BHCUtoYJ_mbaIl.webp 1080w, /_astro/61.BHCUtoYJ_Z19mfj5.webp 1280w, /_astro/61.BHCUtoYJ_KRwMD.webp 1607w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、NotionのAPIにリクエストして、ページを一覧で取得してページの内容を取得する方法を紹介しました。
以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Notion APIでNotionのページを取得したり更新できる。&lt;/li&gt;
&lt;li&gt;Notion APIを使うためには、&lt;code&gt;Integration&lt;/code&gt;というものを作成して、&lt;code&gt;Integration Token&lt;/code&gt;を取得する必要がある。&lt;/li&gt;
&lt;li&gt;Notionにおけるデータ構造は、「データベース」、「ページ」、「ブロック」という要素で構成されている。&lt;/li&gt;
&lt;li&gt;Notionのページを取得するためには、以下の流れで行う。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Query a database&lt;/code&gt; エンドポイントからページIDを取得する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Retrieve a page&lt;/code&gt; エンドポイントで、ページIDを使って、ページのプロパティを取得できる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Retrieve block children&lt;/code&gt; エンドポイントで、ページIDを使って、ページの中身を取得できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Create a page&lt;/code&gt; エンドポイントでページを新規作成したり、&lt;code&gt;Update page properties&lt;/code&gt; エンドポイントでページを更新することが出来る。&lt;/li&gt;
&lt;li&gt;Google Apps ScriptでNotion APIを叩けば、Googleスプレッドシートに一覧表示できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで、Notionのページに対する作業を、Google Apps Scriptで自動化出来るようになりました。Notionで日記を付けていれば毎日同じページを追加したり、Notionのページを日々バックアップすることが出来るようになります。自分の中のデータベースをどんどん大きくしていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Notionのページをスプレッドシートで管理できるぞ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ページのプロパティを俯瞰できますね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】ただ画像をPDFとして結合したいだけなのに沼った話</title><link>https://endorphinbath.com/posts/powershell-image-merging-into-pdf/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-image-merging-into-pdf/</guid><description>ディスクフラグメンテーションをなくすために、PowerShellで.NET FrameworkのiTextSharpを使った、webp等の小さい画像を1つのPDFにまとめるツールを紹介します。</description><pubDate>Sun, 27 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだこれ生成AIに聞いても全然わからないよぉぉ！？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;複数ページのPDFを作るのがこんなに大変だとは・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;事の発端はこんなところから。&lt;a href=&quot;#事の発端はこんなところから&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にこの記事で、自分がHDDに溜めていた画像ファイルをwebp形式に変換するツールを作りました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このツールを使うことで、確かに一つ一つのファイルのサイズはかなり小さくなったのです。&lt;/p&gt;&lt;p&gt;しかしその代わりに、新品のHDDを使っているくせに、「ディスクフラグメンテーション」的な現象が起きるようになっていきました。&lt;/p&gt;&lt;p&gt;この画像は、大量のwebp画像を格納したフォルダのプロパティを表示したものです。
ここで、「ディスク上のサイズ」が「サイズ」よりも遥かに大きい数値になっていることが確認できます。1.8GBぐらい無駄になってますよ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;861&quot; height=&quot;664&quot; src=&quot;/_astro/01.B-EIqYzy_1pOs9H.webp&quot; srcset=&quot;/_astro/01.B-EIqYzy_Z2svlYM.webp 640w, /_astro/01.B-EIqYzy_Z2bWpmJ.webp 750w, /_astro/01.B-EIqYzy_Z1kHQef.webp 828w, /_astro/01.B-EIqYzy_1pOs9H.webp 861w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCで使うディスクの中身は、トラックの中にセクタがあって、セクタがクラスタでまとまってたりしますよね。&lt;/p&gt;&lt;p&gt;webpのようにサイズが小さいファイルでデータを保存すると、そのクラスタの中にデータが入り切らず、かなりのスペースが使われないまま放置される状態が出来上がってしまうわけですね。&lt;/p&gt;&lt;p&gt;ディスクをフォーマットしてクラスタのサイズを小さくすれば、このディスクの無駄遣い、デッドスペースは減らせそうですが・・・。&lt;/p&gt;&lt;p&gt;実はこの画像で使っているディスクはSSDです。それなのに、なんだかせっかく速く動けるSSDに対して、変にフォーマットして動きが遅くなったりしても困ってしまいます・・・。なのでなるべくディスクはこのままで使っていきたい・・・。（トラックとセクタとクラスタ、そしてシリンダも一度に確認できる素晴らしい図解ですね。ソースは&lt;a href=&quot;https://3adata.jp/blog/data-restoration&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;。）
&lt;img loading=&quot;lazy&quot; width=&quot;460&quot; height=&quot;155&quot; src=&quot;/_astro/03.Dl4KYVBe_27I9YL.webp&quot; srcset=&quot;/_astro/03.Dl4KYVBe_27I9YL.webp 460w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小さくて細かい画像はPDFで一纏めにする&lt;a href=&quot;#小さくて細かい画像はpdfで一纏めにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、小さい沢山のwebp形式の画像を、複数ページを持ったPDFとしてまとめようと考えました。そうすれば、ディスクのフラグメンテーションは起こらないはず。&lt;/p&gt;&lt;p&gt;そのPDFを一つに結合するためのツールとして、「iLovePDF」というWebアプリを使ってみます。&lt;/p&gt;&lt;a href=&quot;https://www.ilovepdf.com/ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.ilovepdf.com/img/app-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;iLovePDF – PDF用オンラインツール&lt;/span&gt;&lt;/div&gt;&lt;div&gt;iLovePDF | PDFファンのためのオンラインツール&lt;/div&gt;&lt;div&gt;iLovePDFは完全無料のPDFの為のオンラインサービス。使い方はとても簡単。PDFの結合、分割、圧縮、officeファイルのPDF変換、PDFからJPGへの変換など他にも多くの機能があります！&lt;/div&gt;&lt;div&gt;www.ilovepdf.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.ilovepdf.com/img/ilovepdf/social/ja/ilovepdf.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このiLovePDFは、PDFの結合、分割、Excel⇔PDFでの変換などを行うことが出来ます。そしてその多様な機能の中で、「JPG PDF 変換」の機能を使って、大量のwebp画像をまとめていきたいと思います。（webpはiLovePDFに使えないので、「dwebp」を使ったりしてJPGやPNG形式に変換しておきます。PNGはいけるんですよね。）&lt;/p&gt;&lt;p&gt;そうすると・・・・・・アレッ・・・？？
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/11.Co4GzEQ8_21mNJH.webp&quot; srcset=&quot;/_astro/11.Co4GzEQ8_zAgMR.webp 640w, /_astro/11.Co4GzEQ8_Z17IVuj.webp 750w, /_astro/11.Co4GzEQ8_2l8iy8.webp 828w, /_astro/11.Co4GzEQ8_1EwdU3.webp 1080w, /_astro/11.Co4GzEQ8_aOVxE.webp 1280w, /_astro/11.Co4GzEQ8_21mNJH.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まさかのプレミアムプランに加入しないと21枚以上の画像をまとめられないパターン。&lt;/p&gt;&lt;p&gt;それに加えて、プレミアムプランに加入したとしても、80枚までの画像しか一つのPDFにまとめられないみたいですね。それだと話が違ってくるな・・・。他になんか良いツールは無いか・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Windows標準の印刷アプリでは設定項目が粗い。&lt;a href=&quot;#windows標準の印刷アプリでは設定項目が粗い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、「Windows標準の印刷アプリで一気にPDFとして印刷する」作戦に打って出ました。&lt;/p&gt;&lt;p&gt;エクスプローラ上で画像ファイルを複数選択した状態で右クリックをすると、コンテキストメニューが表示されますので「その他のオプションを表示」をクリックすると、また違ったコンテキストメニューが表示されますので、そこ「印刷」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;592&quot; src=&quot;/_astro/21.CUjl5UCi_QyeDX.webp&quot; srcset=&quot;/_astro/21.CUjl5UCi_Z1S78t9.webp 640w, /_astro/21.CUjl5UCi_ZjCHQe.webp 750w, /_astro/21.CUjl5UCi_2peGpm.webp 828w, /_astro/21.CUjl5UCi_QyeDX.webp 993w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、この印刷ツールのUIを見渡してみると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;933&quot; height=&quot;585&quot; src=&quot;/_astro/22.YzEU74J6_1BKr2U.webp&quot; srcset=&quot;/_astro/22.YzEU74J6_Z20DrD.webp 640w, /_astro/22.YzEU74J6_1XiFtR.webp 750w, /_astro/22.YzEU74J6_3oRuL.webp 828w, /_astro/22.YzEU74J6_1BKr2U.webp 933w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんか設定できる項目が少なくないか・・・？
用紙サイズは変えられるみたいですが、縦で見たいものを縦向きには出来なさそうだし、余白とかも消せないのか・・・。縦と横の混合とかも出来ない？
&lt;img loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;591&quot; src=&quot;/_astro/23.KUVNNNDc_Z1zs27g.webp&quot; srcset=&quot;/_astro/23.KUVNNNDc_I4eNs.webp 640w, /_astro/23.KUVNNNDc_GnQ8M.webp 750w, /_astro/23.KUVNNNDc_1G1uqt.webp 828w, /_astro/23.KUVNNNDc_Z1zs27g.webp 960w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像ファイルを複数選択した状態で、右クリック→「その他のオプションを表示」→印刷をクリック。&lt;/p&gt;&lt;p&gt;この操作では、プリンターの設定が十分に行えないみたいです。実際に紙に印刷したいわけではなく、フラグメンテーションを無くしたいだけだから、紙のサイズは元画像のものにしたいな・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;じゃあもうPowerShell使うしかないじゃん。&lt;a href=&quot;#じゃあもうpowershell使うしかないじゃん&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;残念ながら、GUIを使ってシャカシャカとPDFへと結合することが出来なさそう感じがしてきました。&lt;/p&gt;&lt;p&gt;なので、PowerShellでPDF結合ツールを作ることにしました。PowerShellであれば別途ランタイムをインストールし直す必要とかありませんしね。&lt;/p&gt;&lt;p&gt;そこで最初に、「Microsoft Print to PDF」の仮想プリンターでPDFを出力できるようにしたいと思います。&lt;/p&gt;&lt;p&gt;そこで書いたのがこのコード。しかし、イイ感じに動きません・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge-ImagesIntoPdfWithPrinter&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Load assembly of .NET Framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Printing.PrintDocument&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$isPdfNamed&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$itemCount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$printPageEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;#[System.Drawing.Printing.PrintPageEventArgs]$_&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$m&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.MarginBounds&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$m.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$m.Height&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;$m.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$m.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;$m.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$m.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$_&lt;/span&gt;&lt;span&gt;.Graphics.DrawImage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$m&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;:printedCount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;:itemCount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$_&lt;/span&gt;&lt;span&gt;.HasMorePages&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$isPdfNamed&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;io.path&lt;/span&gt;&lt;span&gt;]::Combine(&lt;/span&gt;&lt;span&gt;$path.DirectoryName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$path.BaseName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$isPdfNamed&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.add_PrintPage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$printPageEvent&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Printing.PrinterSettings;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.PrinterName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Microsoft Print to PDF&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.PrintToFile&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.FromPage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.ToPage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.PrintFileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}{1}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.MinimumPage&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.MaximumPage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.MaximumPage&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$doc.PrinterSettings.ToPage&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Print&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg, &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.png &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude PDFsharp&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Merge-ImagesIntoPdfWithPrinter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;何が問題なのかと言うと、出力されるPDFが1ページしかないからです。&lt;code&gt;Read-Host&lt;/code&gt;が現れる回数はページの数と合っているはずなのに、なぜなのやら・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;951&quot; src=&quot;/_astro/26.BRmKXR0a_t2Gvc.webp&quot; srcset=&quot;/_astro/26.BRmKXR0a_1KgCWN.webp 640w, /_astro/26.BRmKXR0a_ZGSPdw.webp 750w, /_astro/26.BRmKXR0a_Z2i78Uz.webp 828w, /_astro/26.BRmKXR0a_t2Gvc.webp 863w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うーん・・・一体何がいけないんでしょう・・・。&lt;code&gt;PrintDocument&lt;/code&gt;クラスやら、&lt;code&gt;PageSettings&lt;/code&gt;クラスやら、&lt;code&gt;PrinterSettings&lt;/code&gt;クラスやら&lt;code&gt;PrinterSettings.PrintRange&lt;/code&gt;プロパティやら・・・、色々試しましたが、どうやっても1ページしか出力されません。&lt;/p&gt;&lt;p&gt;参考にしたコードは以下の記事になりますが、このコードに出てくる&lt;code&gt;add_PrintPage&lt;/code&gt;メソッドが一体どういう動きをするのかどうかが全く分からないんですよね。その名前空間のクラスのそのメソッドでググっても全然引っ掛からない・・・。&lt;/p&gt;&lt;a href=&quot;https://winactor.com/questions/question/%E7%94%BB%E5%83%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92pdf%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8Bpowershell%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/?order_by=oldest&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;winactor.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;winactor.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;winactor.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ググっても分からなければ、生成AIに頼ってみたりもするのですが、彼ら、&lt;code&gt;add_PrintPage&lt;/code&gt;メソッドを使った殆ど同じような実装案しか出してこなかったりして、「Microsoft Print to PDF」を使った解決策を見出すことが出来ませんでした・・・。&lt;/p&gt;&lt;p&gt;なので、この方法での実装はスキップしました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;.ps1&lt;/code&gt;ファイル一つで簡潔する方法なので、なるべくこの方法にしたかったですが仕方がありません・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PDFsharpライブラリで実装する。&lt;a href=&quot;#pdfsharpライブラリで実装する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結局、iTestSharpライブラリで実装することになるんですけど、そのiTextSharpで一度躓いて、「PDFsharp」による実装を試したので、このライブラリでの過程も書いておきます。そうです、この方法でも失敗しました。&lt;/p&gt;&lt;p&gt;PdfSharpライブラリのNupkgをWeb上から手に入れて、7-Zipとかで解答すると&lt;code&gt;PdfSharp.dll&lt;/code&gt;が手に入るので、そのDLLを色々叩いてはみるんですけど、どうしてもDLLをインポートするところでエラーになってしまうんですよね。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge-ImagesIntoPdfWithPdfSharp&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $pdfsharpFileName = &quot;PdfSharp.dll&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfsharpFileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;pdfsharp.6.1.1\lib\net6.0\PdfSharp.dll&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $pdfsharpFileName = &quot;pdfsharp.6.1.1\lib\netstandard2.0\PdfSharp.dll&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].DirectoryName, &lt;/span&gt;&lt;span&gt;$pdfsharpFileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -Path $pdfsharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -LiteralPath $pdfsharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span&gt;]::LoadFrom(&lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $error[0].Exception.GetBaseException().LoaderExceptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].DirectoryName, &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].BaseName, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfDocument&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; PdfSharp.Pdf.PdfDocument;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imagePath.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 画像の読み込み&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ページの作成とサイズの設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfPage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pdfDocument.AddPage&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfPage.Width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;PdfSharp.PageSize&lt;/span&gt;&lt;span&gt;]::A4.Width&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pdfPage.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;PdfSharp.PageSize&lt;/span&gt;&lt;span&gt;]::A4.Height&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# XGraphics オブジェクトで画像を描画&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$gfx&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;PdfSharp.Drawing.XGraphics&lt;/span&gt;&lt;span&gt;]::FromPdfPage(&lt;/span&gt;&lt;span&gt;$pdfPage&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$xImage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;PdfSharp.Drawing.XImage&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$imagePath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 画像をページサイズに合わせてスケーリング&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$gfx.DrawImage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$xImage&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$pdfPage.Width&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$pdfPage.Height&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# リソースの解放&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$xImage.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# PDF ドキュメントを保存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfDocument.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$outputPdfPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfDocument.Close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg, &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.png &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude PDFsharp&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Merge-ImagesIntoPdfWithPdfSharp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージ。フォルダパス内のユーザー名は伏せています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“1” 個の引数を指定して “LoadFrom” を呼び出し中に例外が発生しました: “ファイルまたはアセンブリ ‘file:///C:\Users\xxxxxxxxxxxxx\Downloads\新しいフォルダー\新しいフォルダー\pdfsharp.6.1.1\lib\netstandard2.0\PdfSharp.dll’、またはその依存関係の 1 つが読み込めませんでした。操作はサポートされません。 (HRESULT からの例外:0x80131515)”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;DLLのインポートの手段が2種類ぐらいありますが、どちらでやっても同じようなエラーになります。一体どこの依存関係が欠けているのか、ちょっとそれを調べるのには時間が惜しいですよね・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 方法1-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 方法1-2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;LiteralPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 方法2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span&gt;]::LoadFrom(&lt;/span&gt;&lt;span&gt;$pdfsharpPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;iTestSharpライブラリで実装する。&lt;a href=&quot;#itestsharpライブラリで実装する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、別の方法で実装しましたとさ。&lt;/p&gt;&lt;p&gt;「iTextSharp」でググれば沢山の情報が引っ掛かります。僕がiTextSharpを知ったのは、そもそも生成AIの回答からでした。それほど、ありふれたPDF編集ライブラリなのでしょう。&lt;/p&gt;&lt;p&gt;しかし、そんな恵まれた情報環境でしたが、iTextSharpライブラリで実装に持っていくのに、かなりの時間が掛かってしまいました・・・。一体なぜ時間が掛かったのでしょう？&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ライブラリの依存問題で時間が掛かった。&lt;a href=&quot;#ライブラリの依存問題で時間が掛かった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;iTextSharpでも、PDFsharpと同じように依存関係のエラーメッセージが表示されました。先程と同じインポートの仕方で進めていくわけですけど、こんな感じのエラーメッセージが表示されます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“0” 個の引数を指定して “Close” を呼び出し中に例外が発生しました: “ファイルまたはアセンブリ ‘BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938’、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;はい、ここで出てくるのが&lt;code&gt;BouncyCastle.Cryptography&lt;/code&gt;というライブラリです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;BouncyCastleの表示バージョンと実際に必要なバージョンは違う。&lt;a href=&quot;#bouncycastleの表示バージョンと実際に必要なバージョンは違う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「iTextSharp BouncyCastle.Cryptography」でググると、それに関する記事が色々と出てくるのですが、結局何をすると正解なのかがあんまり分かりませんでした。色々な方が困っているようすでした。&lt;/p&gt;&lt;p&gt;以下の記事のようなバージョンのiTextSharpライブラリに正しいバージョンの&lt;code&gt;BouncyCastle.Cryptography&lt;/code&gt;ライブラリを持ってくると上手く動きそうですが、なんで別のDLLを持ってこないと動かない仕様になっているんでしょうか？　いやそもそも仕様じゃなくてバグか？&lt;/p&gt;&lt;a href=&quot;https://qiita.com/AWtnb/items/215f77d97b7ea069a06a&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】iTextSharp で PDF を結合・ページ抽出する - Qiita&lt;/div&gt;&lt;div&gt;以前 pdftk による PDF の処理 について記事を書きましたが、今回はその中の結合処理とページ抽出処理を iTextSharp で実装してみました。処理エラーを正しくスクリプトのエラーとして受け取ることできるので挙動が予測しやすく安全です。 環境： PS&amp;amp;gt; $PSV...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRmF2YXRhcnMzLmdpdGh1YnVzZXJjb250ZW50LmNvbSUyRnUlMkY0NjgwNzIzOCUzRnYlM0Q0P2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz1hY2U5MzQwOWYzN2RiMzRkYTM1NGJjOGVkZjljY2QzYg%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Db26c54ed0424d8bd04b2880126529717?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgwJTkwUG93ZXJTaGVsbCVFMyU4MCU5MWlUZXh0U2hhcnAlMjAlRTMlODElQTclMjBQREYlMjAlRTMlODIlOTIlRTclQjUlOTAlRTUlOTAlODglRTMlODMlQkIlRTMlODMlOUElRTMlODMlQkMlRTMlODIlQjglRTYlOEElQkQlRTUlODclQkElRTMlODElOTklRTMlODIlOEImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz1kMzc1ZmQwYjI5MzQ2NzA3YzdlZTFmY2ZmNDNiNmJjMw&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBBV3RuYiZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTY0YmY2NDk3ODZkZmVhNzQ3OGM3NzRjZGExNzU1ODMx&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=9bf40f3636fc8b2c69520e2b17a629d5&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;code&gt;BouncyCastle.Crypto&lt;/code&gt;のバージョンは&lt;code&gt;2.0.0.0&lt;/code&gt;と表示されていたので、色々探して該当するバージョンを拾ってきたのですが、どうやら、この表示されているバージョンとは別のバージョンが動いていることもあるらしく・・・。（それは上記の記事に載っていました。）&lt;/p&gt;&lt;p&gt;そんな、実際に動いているバージョンの発掘までするのはスゴイ面倒だし、ああ、なんでこんなにも厄介な依存をしているのか全然意味が分からん・・・。&lt;/p&gt;&lt;p&gt;という風に、ネットサーフィンして眉を顰めてブー垂れながら色々と悪戦苦闘していたのですが、結局のところ、iTextSharpで動かすことに成功します。と言うか、こんなに&lt;code&gt;BouncyCastle.Crypto&lt;/code&gt;で困っている人がいる傍らで、その点には全く触れていない記事も散見されたのを不思議に思っていたんですよね。&lt;/p&gt;&lt;p&gt;そこで、そのiTextSharpに関して、さざ波の「さ」の字も感じさせないような記事の更新日時を見て、その頃に最新だった「iTextSharp」ライブラリのバージョンで動かしてみたところ、上手く動きました。&lt;/p&gt;&lt;p&gt;僕が実際に動かすことが出来たiTextSharpのバージョンは、&lt;code&gt;5.5.13&lt;/code&gt;です。（ちなみにポシャっていた時に使っていたバージョンは、&lt;code&gt;5.5.13.4&lt;/code&gt;でした。）&lt;/p&gt;&lt;a href=&quot;https://nuget.org/packages/iTextSharp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://nuget.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@nuget&lt;/span&gt;&lt;/div&gt;&lt;div&gt;iTextSharp 5.5.13&lt;/div&gt;&lt;div&gt;iText is a PDF library that allows you to CREATE, ADAPT, INSPECT and MAINTAIN documents in the Portable Document Format (PDF), allowing you to add PDF functionality to your software projects with ease. We even have documentation to help you get coding. We have two currently supported versions: iText 5 and iText 7. Both are available under AGPL and Commercial license. * iText 5 AGPL * iText 7 community: https://www.nuget.org/packages/itext7/ iText 5 is a one solution library that is complex, but well documented to help you create your solutions. iText 7 is a complete re-write of iText 5, allowing you to choose your adventure with add-ons, all based on a simple, modular code structure that is easy to use and well documented. Both versions allow you to: - Generate documents and reports based on data from an XML file or a database - Create maps and books, exploiting numerous interactive features available in PDF - Add bookmarks, page numbers, watermarks, and other features to existing PDF documents - Split or concatenate pages from existing PDF files - Fill out interactive forms - Serve dynamically generated or manipulated PDF documents to a web browser iText 7 includes pdfDebug, the first debugging tool that gives you a clear overview of your content streams and document structure as well as pdfCalligraph, allowing you to leverage advanced typography. iText is available for Java, .NET in both versions, and Android and GAE for iText 5 only. iTextSharp is the .NET port of iText 5. Several iText engineers are actively supporting the project on StackOverflow: http://stackoverflow.com/questions/tagged/itext&lt;/div&gt;&lt;div&gt;nuget.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://api.nuget.org/v3-flatcontainer/itextsharp/5.5.13/icon&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ドキュメントがFAQばかりで時間が掛かった。&lt;a href=&quot;#ドキュメントがfaqばかりで時間が掛かった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;良かったです。iTextSharpでPDFを結合することは出来るようになりました。&lt;/p&gt;&lt;p&gt;しかし、そこから自分の頭の中にあるツールの形に持っていくのに、また少し時間が掛かりました・・・。&lt;/p&gt;&lt;p&gt;その原因は、コードを直すための情報を満足に集めることが出来ていなかったからでした。&lt;/p&gt;&lt;p&gt;iTextSharpもとい、iTextライブラリのドキュメント（？）のURLはここだと思いますが・・・。（.NET FrameworkでiTextSharpを使ってPDFを作成するサンプルコードが載っています。）&lt;/p&gt;&lt;a href=&quot;https://kb.itextpdf.com/itext/itext-7-jump-start-tutorial-chapter-7&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://kb.itextpdf.com/__site/c5e1dc6d-2579-4eb3-8143-3ef7361eb691/favicon-itextpdf.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kb.itextpdf.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;iText Jump-Start Tutorial : Chapter 7 | iText Knowledge Base&lt;/div&gt;&lt;div&gt;iText 7: Complete getting started tutorial for iText 7 Java development. Latest PDF library for Java and .NET. Step-by-step beginner guide with examples.&lt;/div&gt;&lt;div&gt;kb.itextpdf.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://kb.itextpdf.com/__site/584e3a1c-0ce3-4780-a115-fe1c2521f119/ITSC-Logo-Horizontal-RGB-300dpi.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかしこのドキュメントを放浪してみて、クラスやメソッドの抽象的なリファレンスが見つけられず、主にFAQベースの資料や、「Let’s Start iText !」的なサンプルコードばかりでした。なので、特定のプロパティを変更する方法が分からず、徒に時間だけが過ぎていきました・・・。悲しかった・・・。&lt;/p&gt;&lt;p&gt;しかし、そこで役に立ったのが生成AIでした。&lt;/p&gt;&lt;p&gt;「PDFの用紙のサイズを変えたい。」「余白をなくしたい。」と要望を出せば、解決案をすぐさま出してくれます。開発者用の抽象的なドキュメントはあった方がベターだとは思いますが、今日のような生成AI時代では、FAQ満載のドキュメントでもAIにしっかり学習させれば、とても有用な生き字引になるわけですね。（おそらく種々のWeb記事と併せて学習されているんでしょう。）
&lt;img loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;482&quot; src=&quot;/_astro/41.DVAp7Gfs_Z22K943.webp&quot; srcset=&quot;/_astro/41.DVAp7Gfs_ZM1EaQ.webp 640w, /_astro/41.DVAp7Gfs_kOl09.webp 750w, /_astro/41.DVAp7Gfs_ZpkzfB.webp 828w, /_astro/41.DVAp7Gfs_Z22K943.webp 857w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いやあ、この時代に生きてて良かったああ。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;それではPDFを結合します。&lt;a href=&quot;#それではpdfを結合します&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ということで、「複数の画像をPDFに結合するだけ」のこんな単純なツールに多くの時間を使ってしまいましたが、自分の頭の中でイメージしていたものに合致しました。今回のPowerShell製ツールです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Merge-ImagesIntoPdfWithITextSharp&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# [System.Reflection.Assembly]::LoadFrom($iTextSharpPath);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Add-Type -Path $iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;LiteralPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$iTextSharpPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $error[0].Exception.GetBaseException().LoaderExceptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}{2}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].DirectoryName, &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].BaseName, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; iTextSharp.text.Document;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.pdf.PdfWriter&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$doc&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.IO.File&lt;/span&gt;&lt;span&gt;]::Create(&lt;/span&gt;&lt;span&gt;$pdfName&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Open&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Get image files to add into PDF.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$path.FullName.GetType&lt;/span&gt;&lt;span&gt;().FullName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::GetInstance(&lt;/span&gt;&lt;span&gt;$path.FullName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Scale images to each page size.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.SetPageSize&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.NewPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.SetAbsolutePosition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $image.ScaleToFit($doc.PageSize.Width, $doc.PageSize.Height);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$image.Alignment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iTextSharp.text.Image&lt;/span&gt;&lt;span&gt;]::ALIGN_CENTER;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$doc.Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$doc.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pdfWriter.Close&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Exclude PDFsharp&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$iTextFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\lib\itextsharp.dll&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$targetFolder&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Merge-ImagesIntoPdfWithITextSharp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgPathList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$iTextFilePath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;このツールで、こんな感じにPDFを結合することが出来ました。余白を作らず、画像そのままのアスペクト比でPDF化することが出来ました。これでディスクのセクタの無駄遣いは減らせそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;952&quot; src=&quot;/_astro/51.DEGJ2Ttk_1GrVIH.webp&quot; srcset=&quot;/_astro/51.DEGJ2Ttk_Z2iy4dD.webp 640w, /_astro/51.DEGJ2Ttk_2qGTjb.webp 750w, /_astro/51.DEGJ2Ttk_Z18SFIw.webp 828w, /_astro/51.DEGJ2Ttk_1GrVIH.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;他にも色々なPDFライブラリがあるみたいです。&lt;a href=&quot;#他にも色々なpdfライブラリがあるみたいです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この他にも、「PDFtk」というライブラリがありましたが、それはiTextSharpベースのライブラリみたいなので、自分には蛇足かなと思い、スキップしました。&lt;/p&gt;&lt;a href=&quot;https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.pdflabs.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;PDFtk - The PDF Toolkit&lt;/div&gt;&lt;div&gt;PDFtk is a simple tool for doing everyday things with PDF documents. It comes in three flavors: PDFtk Free, PDFtk Pro, and our original command-line tool PDFtk Server.&lt;/div&gt;&lt;div&gt;www.pdflabs.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;あと、「CubePDF」のPDF結合用のライブラリがあったりするみたいなのですが、これはちょっと情報が少なそうだったので、同様にスキップしました。&lt;/p&gt;&lt;a href=&quot;https://clown.cube-soft.jp/entry/2023/09/28/cubepdf-merge&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://clown.cube-soft.jp/icon/favicon&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Cube Lilac&lt;/span&gt;&lt;/div&gt;&lt;div&gt;コマンドラインから PDF ファイルを結合するプログラム - Cube Lilac&lt;/div&gt;&lt;div&gt;CubePDF シリーズ (CubePDF、CubePDF Utility、CubePDF Page) は GUI アプリケーションとして設計されているため、他のプログラムとの連携やコマンドラインからの利用は困難である事が予想されます。一方 CubePDF シリーズは、各種 GUI アプリケーションと並行して、CubePDF SDK と銘打って各種ライブラリも無償 (OSS) で公開しています。 NuGet Packages Cube.Pdf Cube.Pdf.Itext Cube.Pdf.Pdfium Cube.Pdf.Ghostscript Cube.Pdf.Converter ※ Cub…&lt;/div&gt;&lt;div&gt;clown.cube-soft.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.image.st-hatena.com/image/scale/299ae5613fda557d5266bda49afeff7112c4d2d5/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn.user.blog.st-hatena.com%2Fdefault_entry_og_image%2F301635%2F1634190545249972&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、生成AIから「ImageMagick」というソフトウェアを紹介されましたが、これが何とも言えないぐらいに凄惨な状態になっていて・・・、
2024-11-03時点で、報告されている脆弱性の件数が、645件だそうです・・・。　　これはマズイ・・・。&lt;/p&gt;&lt;a href=&quot;https://www.cvedetails.com/version-list/0/3034/1&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.cvedetails.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.cvedetails.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.cvedetails.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、PowerShellで複数枚の画像を1つのPDFファイルへと結合する方法を紹介しました。
以下、本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;画像ファイルのサイズを小さく出来たのは良かったが、ディスクフラグメンテーションが発生した。&lt;/li&gt;
&lt;li&gt;そのため、複数の画像ファイルをPDFとしてまとめることにした。&lt;/li&gt;
&lt;li&gt;PowerShellを使えば、大量のファイルをより細かい設定で、1つのPDFに変換することが可能。&lt;/li&gt;
&lt;li&gt;今回は、iTestSharp（ver. &lt;code&gt;5.5.13&lt;/code&gt;）ライブラリで実装した。それ以上のバージョンで実装すると、依存関係を解消する必要が出てくる可能性が高く、実装が大変になる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで、規定の用紙サイズに囚われずに、キレイなPDFを作るために課金をする必要は無くなります！&lt;/p&gt;&lt;p&gt;また、Macにあるアプリを使っても、規定の用紙サイズに囚われずにキレイなPDFを作れますが、PowerShellを使えば、Windows上でもそれが可能になりました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShell関連記事&lt;a href=&quot;#powershell関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のPowerShell関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-edit-exif-of-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルのExif情報を任意の日付に編集する&lt;/div&gt;&lt;div&gt;PowerShell上でExiftoolを使って、画像ファイルのExif情報を編集し日付を一括変更する方法を紹介します。友人と共有した写真の日付設定をGoogleフォトで行うのは面倒ですが、これで簡単に整理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240605_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-image-trimming-needs-marchaling/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】ただ画像をトリミングしたいだけなのにマーシャリングを知らなくて沼った話&lt;/div&gt;&lt;div&gt;.NETの構造体「System.Drawing.Rectangle」の引数の型で沼りました。更に、BitmapのDisposeでオブジェクトの破棄、LockBitsで処理を軽くしたりもしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241026_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、これで画像を整理できる！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もっと手早く終わらせるつもりだったのになあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】ただ画像をトリミングしたいだけなのにマーシャリングを知らなくて沼った話</title><link>https://endorphinbath.com/posts/powershell-image-trimming-needs-marchaling/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-image-trimming-needs-marchaling/</guid><description>.NETの構造体「System.Drawing.Rectangle」の引数の型で沼りました。更に、BitmapのDisposeでオブジェクトの破棄、LockBitsで処理を軽くしたりもしています。</description><pubDate>Sat, 26 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだこれ生成AIに聞いても全然わからないよぉぉ！？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;初見殺し的なところはあるな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;身に覚えのない型によるエラー&lt;a href=&quot;#身に覚えのない型によるエラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こんな感じのコードを実行した時に、最終行でとあるエラーが発生しました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;]::Round(&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$AspectRatioOfLegal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;MidpointRounding&lt;/span&gt;&lt;span&gt;]::AwayFromZero);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle (&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, ((&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージ&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;System.Object[]&quot; の値を &quot;System.Object[]&quot; 型から &quot;System.UInt32&quot; 型に変換できません。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;はて？&lt;/p&gt;&lt;p&gt;&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;の引数には数値型の変数しか入れていません。なのに&lt;code&gt;System.Object[]&lt;/code&gt;？&lt;/p&gt;&lt;p&gt;それともたった今&lt;code&gt;New-Object&lt;/code&gt;で変数を代入して出来上がったものに対してなんか言ってる？　果たしてどの部分が問題なのか全然わからない・・・。あー、PowerShell終わったなーと思いました。&lt;/p&gt;&lt;p&gt;よく分からないので、とりあえずキャストして再び実行してみます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]((&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;), [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージ&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;System.Object[]&quot; の値を &quot;System.Object[]&quot; 型から &quot;System.UInt32&quot; 型に変換できません。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;はぁぁ・・・？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解決法&lt;a href=&quot;#解決法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のバグは、&lt;code&gt;.NET Framework&lt;/code&gt;という外部ライブラリの作法に則っていないことが原因でした。このライブラリの&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体は、引数に&lt;code&gt;System.UInt32&lt;/code&gt;の型の数値を渡さなければなりません。&lt;/p&gt;&lt;p&gt;なので、引数を渡す時にこのようにキャストすれば直りました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記のように、外部モジュールの作法に則ってデータを整形して渡すことを、「マーシャリング」と呼ぶそうです。&lt;/p&gt;&lt;p&gt;マーシャリングは、「整形、整頓」といった意味を持つ単語です。（そういえば以前にGoを触っていた時に、&lt;code&gt;json.Marshal&lt;/code&gt;とか&lt;code&gt;json.Unmarshal&lt;/code&gt;とかいうメソッドがあったから、JSONを「シリアライズ」するのと似たような感じなのだろうか。）&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/dotnet/standard/native-interop/type-marshalling&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;型マーシャリング - .NET&lt;/div&gt;&lt;div&gt;.NETが型をネイティブ表現にマーシャリングする方法について説明します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/dotnet/media/dot-net-cross-platform.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;あー、良かったよぉぉぉ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ということで、トリミング処理を実装する。&lt;a href=&quot;#ということでトリミング処理を実装する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここを乗り越えればとりあえずは実装できそう。&lt;/p&gt;&lt;p&gt;と思ったんですけど、今回初めてPowerShellで画像のトリミング処理を実装するので、その後の処理もそれなりに調べて実装していきます。（以前にPythonの&lt;code&gt;Pillow&lt;/code&gt;ライブラリで、画像を生成する処理を書いた時はこんなに考えなかったような・・・。）&lt;/p&gt;&lt;p&gt;今回は以下のような、画像のトリミングツールを構成するコードが出来ました。この処理は、縦にとても長～い画像ファイルを任意の長さに切り分けるものになっています。イメージとしては、かまぼことか伊達巻を輪切りにしていくみたいな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Load assembly of .NET Framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcFile&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.LockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Drawing.Imaging.ImageLockMode&lt;/span&gt;&lt;span&gt;]::ReadOnly, &lt;/span&gt;&lt;span&gt;$srcBmp.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$isLast&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmpData.Width&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$AspectRatioOfLegal&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;356&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;216&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;]::Round(&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$AspectRatioOfLegal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;MidpointRounding&lt;/span&gt;&lt;span&gt;]::AwayFromZero);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: bbbbbbbbbbbbbbbbbbbbbbbbbbbbb&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: cccccccccccccccccccccccccccccc&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcFile.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ((&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$isLast&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: iiiiiiiiiiiiiiiiiiiiiiiiiiiii&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (((&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;).GetType().FullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$width.GetType&lt;/span&gt;&lt;span&gt;().FullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$heightUnit.GetType&lt;/span&gt;&lt;span&gt;().FullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Set an area to trim and clone an image.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $dstRect = New-Object System.Drawing.Rectangle ([int]0, [int]($increment) * $heightUnit, [int]$width, [int]$heightUnit);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;), [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Trim an image and save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}_{2:D2}{3}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path, &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;$srcFile.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Png);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$dstBmp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $dstRect.Dispose();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$isLast&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error occured.....&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;BackgroundColor DarkRed;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; to close this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.UnlockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;BitmapをDisposeする&lt;a href=&quot;#bitmapをdisposeする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;BitmapのDisposeを忘れるべからず&lt;a href=&quot;#bitmapのdisposeを忘れるべからず&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、画像のトリミング処理をするに当たって、&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing.Bitmap&lt;/code&gt;クラスを使っていきます。&lt;/p&gt;&lt;p&gt;さて、このクラスを使うに当たって、このクラスで新しいオブジェクトを作って何らかの処理で使った後にそのままスクリプトを終わらせてはいけません。なぜなら、この&lt;code&gt;System.Drawing.Bitmap&lt;/code&gt;によって出現したオブジェクト（GDI+）はプロセス終了後にもメモリの中に残ってしまうためです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# これでBitmapオブジェクトを作ったら、&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 破棄しなければならない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみにこの「GDI+」は、「グラフィックス デバイス インターフェイス」というヤツらしく、アプリとデバイスドライバーの間を取り次ぐ仕事をしてくれるそうです。しかし、トリミング処理が終わったら君には退散してもらわなければならない・・・。働かざるもの食うべからず。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/gdiplus/-gdiplus-gdi-start&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GDI+ - Win32 apps&lt;/div&gt;&lt;div&gt;Windows GDI+ は、C/C++ プログラマ向けのクラス ベースの API です。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GDI+ で汎用エラーが発生しました。？&lt;a href=&quot;#gdi-で汎用エラーが発生しました&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程のGDI+オブジェクトの破棄を忘れたり、実行中に割り込み終了をしたりすると、次回に同処理を実行した時にこんな感じのエラーメッセージが表示されるようになってしまいます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“1” 個の引数を指定して “UnlockBits” を呼び出し中に例外が発生しました: “GDI+ で汎用エラーが発生しました。”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;このエラーメッセージは、GDIオブジェクトの数がシステム上限の10,000個を超えたときに発生するものらしいです。一度、&lt;code&gt;Dispose()&lt;/code&gt;を忘れるとこれが表示され続けるのは煩わしいですね・・・。&lt;/p&gt;&lt;a href=&quot;https://support.mescius.jp/hc/ja/articles/360003982255%E2%80%93GDI-%E3%81%A7%E6%B1%8E%E7%94%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F-%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;support.mescius.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;support.mescius.jp&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;support.mescius.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;じゃあ、破棄されなかったGDIオブジェクトがどのプロセスで使われているかを確認したくなってきました。&lt;/p&gt;&lt;p&gt;そのために、タスクマネージャーを起動して、「詳細」→ヘッダーをクリック。→「列の選択」→「GDIオブジェクト」を選択してOK。の流れで・・・・・・確認できると思ったんですけど・・・、&lt;/p&gt;&lt;p&gt;と言うのも、タスクマネージャーを見ただけでは、PowerShellで起動したプロセスのどれが当てはまるのかを区別することが出来ませんでした。既にプロセスが存在しないとも言えそう・・・。（じゃあ、裏でGDIオブジェクトが10,000個以上あるってこと・・・？ ちょっと分からないなあ。）
&lt;img loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;498&quot; src=&quot;/_astro/11.CM1l9cSS_Z11CFti.webp&quot; srcset=&quot;/_astro/11.CM1l9cSS_Z1gej9.webp 640w, /_astro/11.CM1l9cSS_16zKQQ.webp 750w, /_astro/11.CM1l9cSS_cxmMs.webp 828w, /_astro/11.CM1l9cSS_Z11CFti.webp 884w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そういえば話は変わりますが、以前にPythonで書いた時は&lt;code&gt;img.save()&lt;/code&gt;みたいな感じで関数を書き終えた覚えがある・・・。その画像もちゃんとBitmap形式だったから破棄する必要が・・・うーんまあいいか・・・。一応ガベージコレクションあるし・・・。まあ、良くはなかったか・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;エラーハンドリングで、Disposeを忘れない。&lt;a href=&quot;#エラーハンドリングでdisposeを忘れない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんだか、&lt;code&gt;Bitmap&lt;/code&gt;クラスのオブジェクトの破棄を忘れると厭わしいことになる事が分かったので、途中で処理に失敗しても間違いなく&lt;code&gt;Dispose&lt;/code&gt;するようにしたいと思います。&lt;/p&gt;&lt;p&gt;そこで、&lt;code&gt;try-catch-finally&lt;/code&gt;ステートメントをちゃんと用意して処理を入れ込みます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Load assembly of .NET Framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcFile&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.LockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Drawing.Imaging.ImageLockMode&lt;/span&gt;&lt;span&gt;]::ReadOnly, &lt;/span&gt;&lt;span&gt;$srcBmp.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# トリミング処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Error occured.....&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;BackgroundColor DarkRed;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; to close this process......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.UnlockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;色々書きましたが、結局のところは&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing.Bitmap&lt;/code&gt;クラスを&lt;code&gt;Dispose()&lt;/code&gt;するのを忘れないように気を付けるということです。忘れたらPCを再起動で&lt;code&gt;GDI&lt;/code&gt;オブジェクトは消せるでしょう。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RectangleはDispose出来ない&lt;a href=&quot;#rectangleはdispose出来ない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なので、同じく&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing&lt;/code&gt;名前空間にいる&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体も&lt;code&gt;Dispose()&lt;/code&gt;する必要があるのかと言うと、おそらく必要なさそう。&lt;/p&gt;&lt;p&gt;なぜなら、&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体を作る時には、&lt;code&gt;GDI+&lt;/code&gt;を作らないからです。たぶん。以下の&lt;code&gt;Rectangle&lt;/code&gt;構造体に関するドキュメントには、&lt;code&gt;GDI&lt;/code&gt;の文字は存在しなかった。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.rectangle?view=netframework-4.8.1&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Rectangle 構造体 (System.Drawing)&lt;/div&gt;&lt;div&gt;四角形の位置とサイズを表す 4 つの整数のセットを格納します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ちなみに&lt;code&gt;Dispose()&lt;/code&gt;しようとすると、こんな感じのエラーメッセージが表示されます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[System.Drawing.Rectangle] に ‘Dispose’ という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Bitmap.LockBitsで処理を軽くする。&lt;a href=&quot;#bitmaplockbitsで処理を軽くする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それから、&lt;code&gt;System.Drawing.Bitmap&lt;/code&gt;クラスのオブジェクトをいちいち参照すると、処理が重くなるようです。こちらが参考記事です。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/Nuits/items/4a2fbc0f4e8583bd5531&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;.NETによる画像処理の高速化Tips：非unsafe編 - Qiita&lt;/div&gt;&lt;div&gt;はじめに .NETのBitmapオブジェクトを使って画像のフィルター処理や変換などの画像処理をする際、高速に処理するためにはいくつかのお作法的なTipsがあります。 ここでは、良く知られているTipsと、比較的汎用的に利用できるTipsを3つ紹介します。 なお本稿ではun...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGOTkyNjIlMkZwcm9maWxlLWltYWdlcyUyRjE0Nzc1NDQzMjQ_aXhsaWI9cmItNC4xLjEmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPWVhY2M5ZjJmZWNiODljYTVhMzAyMjhjNDE0NDk3MDdl%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D87aa893ce4ac1ddadc0220198194d7e1?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9Lk5FVCVFMyU4MSVBQiVFMyU4MiU4OCVFMyU4MiU4QiVFNyU5NCVCQiVFNSU4MyU4RiVFNSU4NyVBNiVFNyU5MCU4NiVFMyU4MSVBRSVFOSVBQiU5OCVFOSU4MCU5RiVFNSU4QyU5NlRpcHMlRUYlQkMlOUElRTklOUQlOUV1bnNhZmUlRTclQjclQTgmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz00MjM2ODFlMzc5MTkwNWZiZmY5MzZlZDc0ZTRmYzkwNQ&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBOdWl0cyZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTJhZTUxM2IyMzg0Y2I2NTZlYzllNmYzYzc2ZGI3MmY3&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=c862bb33fa0daabb316389b09c59d55e&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;どうやら、&lt;code&gt;Bitmap&lt;/code&gt;オブジェクトの&lt;code&gt;GetPixel()&lt;/code&gt;メソッドに紐づく処理を実行すると、動作が遅くなってしまうみたいなのです。そこで、この&lt;code&gt;Bitmap.LockBits()&lt;/code&gt;メソッドで、Bitmapのピクセルデータをバッファに一時保存して、そのデータから情報を参照することで処理が軽くなるみたいです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Bitmap(&lt;/span&gt;&lt;span&gt;$srcBmpAbsName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.LockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcRect&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;Drawing.Imaging.ImageLockMode&lt;/span&gt;&lt;span&gt;]::ReadOnly, &lt;/span&gt;&lt;span&gt;$srcBmp.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmpData.Width&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;]::Round(&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$AspectRatioOfLegal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;MidpointRounding&lt;/span&gt;&lt;span&gt;]::AwayFromZero);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; ((&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-gt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Height&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;$isLast&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Drawing.Rectangle ([&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$heightUnit&lt;/span&gt;&lt;span&gt;), [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$width&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.UInt32&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$clippingHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$srcBmp.Clone&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstRect&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$srcBmpData.PixelFormat&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}\{1}_{2:D2}{3}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;).Path, &lt;/span&gt;&lt;span&gt;$srcFile.BaseName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;$increment&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;$srcFile.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$dstBmpName&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Png);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$dstBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$isLast&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/windows/win32/api/gdiplusheaders/nf-gdiplusheaders-bitmap-lockbits&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Bitmap::LockBits (gdiplusheaders.h) - Win32 apps&lt;/div&gt;&lt;div&gt;Bitmap::LockBits メソッドは、このビットマップの四角形の部分をロックし、指定した形式でピクセル データの読み取りまたは書き込みに使用できる一時的なバッファーを提供します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、&lt;code&gt;Bitmap.LockBits()&lt;/code&gt;メソッドを使ったプロセスでは、&lt;code&gt;Bitmap.UnlockBits()&lt;/code&gt;メソッドで、メモリ上にロックされていたビットマップのロックを解除する必要があります。&lt;code&gt;Dispose()&lt;/code&gt;と同時期に書いておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.UnlockBits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$srcBmpData&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$srcBmp.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際にツールを実行してみますよ。&lt;a href=&quot;#実際にツールを実行してみますよ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際にこのトリミングツールを使用すると、この縦に長～い画像が・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;824&quot; src=&quot;/_astro/41.1QeymEZl_ZyRBWM.webp&quot; srcset=&quot;/_astro/41.1QeymEZl_1A3RGq.webp 640w, /_astro/41.1QeymEZl_FmmLl.webp 750w, /_astro/41.1QeymEZl_ttou7.webp 828w, /_astro/41.1QeymEZl_Z9Wp2T.webp 1080w, /_astro/41.1QeymEZl_QEgNq.webp 1280w, /_astro/41.1QeymEZl_ZyRBWM.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように輪切りされました。この画像の場合は5枚に分かれました。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;823&quot; src=&quot;/_astro/42.558-fQCX_Z2fJMPj.webp&quot; srcset=&quot;/_astro/42.558-fQCX_Z1jocW.webp 640w, /_astro/42.558-fQCX_ZV0T82.webp 750w, /_astro/42.558-fQCX_Z17SRpg.webp 828w, /_astro/42.558-fQCX_GcqYK.webp 1080w, /_astro/42.558-fQCX_ZOcT46.webp 1280w, /_astro/42.558-fQCX_Z2fJMPj.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PowerShellを使って、大きな画像を小分けにトリミングするツールを、実装する方法を紹介しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.NET Framework&lt;/code&gt;の&lt;code&gt;System.Drawing.Rectangle&lt;/code&gt;構造体の引数には、System.UInt32の型の数値を渡さなければならない。&lt;/li&gt;
&lt;li&gt;外部ライブラリ、ランタイム等に対して渡すデータを整形する作業を、「マーシャリング」と呼んだりする。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;System.Drawing.Bitmap&lt;/code&gt;クラスには、&lt;code&gt;Dispose()&lt;/code&gt;を忘れるべからず。忘れると、GDI+というオブジェクトがメモリに残る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Bitmap.LockBits()&lt;/code&gt;メソッドで、バッファにデータを一時保存することで、&lt;code&gt;Bitmap&lt;/code&gt;への処理が軽くなる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;PowerShellはWindows上にプリインストールされているので、誰でもこの画像トリミングの処理は実行できます。よければ試してみて下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PowerShell関連記事&lt;a href=&quot;#powershell関連記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その他のPowerShell関連の記事を貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-edit-exif-of-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルのExif情報を任意の日付に編集する&lt;/div&gt;&lt;div&gt;PowerShell上でExiftoolを使って、画像ファイルのExif情報を編集し日付を一括変更する方法を紹介します。友人と共有した写真の日付設定をGoogleフォトで行うのは面倒ですが、これで簡単に整理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240605_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-edit-exif-for-orientation/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】Webpに変換した画像ファイルの向きを直す&lt;/div&gt;&lt;div&gt;PowerShellとExiftoolを使用して、画像ファイルの向きを正す方法を解説します。Webpへの変換時に生じる回転の問題を修正し、複数画像の一括修正も実現します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241023_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、これで画像を整理できる！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もっと手早く終わらせるつもりだったのになあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Chrome】2024年版_個人的に使っている拡張機能を率直に書きます。</title><link>https://endorphinbath.com/posts/chrome-recap-of-extension-2024/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-recap-of-extension-2024/</guid><description>オススメのGoogle Chrome拡張機能を、情報収集、ライティング、プログラミング、その他のカテゴリーに分けて、Read AloudやNotion Boostなどの便利なツールを解説しています。</description><pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はChromeの設定と使い方を紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;新しい発見が出来たらいいなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Chromeの拡張機能&lt;a href=&quot;#google-chromeの拡張機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;毎日使っているGoogle Chromeで、個人的に使っている拡張機能について、忌憚のない紹介をしていきたいと思います。それではやっていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;情報収集・動画系&lt;a href=&quot;#情報収集動画系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. Read Aloud: テキスト読み上げ音声リーダー&lt;a href=&quot;#1-read-aloud-テキスト読み上げ音声リーダー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ニュースサイトなどのWeb上の記事を読んでいる時間が無い時に役立ちます。自分が現在のタブで開いているページの文章を読み上げてくれます。音量および読み上げ速度の調節、声質の設定なども可能です。&lt;/p&gt;&lt;p&gt;広告や開いている記事とは関係ない部分は、基本的に読み上げないので助かります。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/read-aloud-a-text-to-spee/hdhinadidafjejdhmfkjgnolgimiaplp&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Read Aloud: テキスト読み上げ音声リーダー - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;ワンクリックで現在のウェブページの記事を読み上げます。 40以上の言語をサポートします。&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/_l4UaD5Gwub2AwFZdomRpfMD2737y0Ow6k2sfVuWdm0fQ0iGSdEfhd9X77taeQ-0VM6Wi3HnpecLWUAI9uHq11TSktw=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. Video Speed Controller&lt;a href=&quot;#2-video-speed-controller&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;YouTubeや、プライムビデオや、はたまたWebサイトのデザインとして貼り付けられている動画まで、色々な動画の再生速度をいじることが出来るようになります。（例えば、Rhizomatiksの昔のトップページにあった幾何学的な動画とか。）&lt;/p&gt;&lt;p&gt;この拡張機能を使うと、YouTubeでいちいちプレイヤーの下端のメニューをクリックして再生速度を設定する操作が要らなくなり、キーボードだけで再生速度をいじることが出来るようになります。その機能が、YouTubeに限らず、プライムビデオやDアニメストアとかでも使えるようになるのが素晴らしいです。&lt;/p&gt;&lt;p&gt;その他、この拡張機能に関しては、以前に別の記事で紹介しましたのでそちらをご参照下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/chrome-ext-vsc/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Chrome】僕が唯一利用している拡張機能「Video Speed Controller」&lt;/div&gt;&lt;div&gt;僕がGoogle Chromeで唯一使っている拡張機能の「Video Speed Controller」の設定画面の詳細と画面での使い方を説明します。YouTubeとかでマウスを使って倍速設定するのがめんどくさかったら是非使ってみて下さい！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211110_03.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Video Speed Controller - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Speed up, slow down, advance and rewind HTML5 audio/video with shortcuts&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/5yY1QQ__b0c2ZLmmi6mcdjX-9V3LAgXhgUaZtsICFTjeQV0S6xkVncmV99oEtU-H8WN8dZpWh_cycXSXoyffADsoYg=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Youtubeからテキストへ&lt;a href=&quot;#3-youtubeからテキストへ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;YouTubeの動画で発せられている音声を、テキストに起こしてくれます。動画の内容を文字としてメモしたい場合などに役立ちます。&lt;/p&gt;&lt;p&gt;文字にすれば、後で検索するのが楽になりますよね。翻訳した文章も表示してくれるのでYouTubeからの情報収集にとても役立ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;753&quot; src=&quot;/_astro/03_01.3Y6CU8XQ_Zkv60y.webp&quot; srcset=&quot;/_astro/03_01.3Y6CU8XQ_Z1xpE0u.webp 640w, /_astro/03_01.3Y6CU8XQ_Z17yKwS.webp 750w, /_astro/03_01.3Y6CU8XQ_ZQ15bc.webp 828w, /_astro/03_01.3Y6CU8XQ_1DC9Sh.webp 1080w, /_astro/03_01.3Y6CU8XQ_1YO8sJ.webp 1280w, /_astro/03_01.3Y6CU8XQ_Zkv60y.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-to-text/apnedodbofogffiagpekmbeflilkcbgf&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Youtubeからテキストへ - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Youtubeテキスト化：Youtube動画をテキストに書き起こし、正確なYoutube書き起こしを生成する。簡単にyoutube動画をテキストに変換する&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/z86bPmacrdWFE3Wugs5DBPLxsARJliHnurt12qmfdWsxX-gQ-2KTqoe7XScrFGDTOHkYaUCPIie6I4vJXEpB-16jHrs=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. Google 翻訳&lt;a href=&quot;#4-google-翻訳&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;英語のサイトから情報を得たいのだがあまり読む時間が取れない時、日本語で大体のニュアンスで文章を咀嚼できるようになります。やはり日本語ネイティブからすると、日本の文字で読んだ方が速く読めます。この拡張機能をアクティブにすると、右クリックして出てくるコンテキストメニューの中に「日本語に翻訳」の機能を追加することが可能です。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google 翻訳 - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;閲覧しているウェブサイトを簡単に翻訳できます。&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/3ZU5aHnsnQUl9ySPrGBqe5LXz_z9DK05DEfk10tpKHv5cvG19elbOr0BdW_k8GjLMFDexT2QHlDwAmW62iLVdek--Q=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ライティング・執筆系&lt;a href=&quot;#ライティング執筆系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;5. Notion Boost&lt;a href=&quot;#5-notion-boost&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;メモ管理データベースサービス（予定管理？まあ色々管理できてメモできるサービス）である「Notion」を使っている場合は、この拡張機能がさらにNotionを使いやすくするでしょう。&lt;/p&gt;&lt;p&gt;特に、この「見出しをサイドバーに表示する」機能が便利です。長いページになった場合に見出しを付いている文章であれば、目当ての情報に到達しやすくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;702&quot; src=&quot;/_astro/05_02.BYKux4Nw_2pfyg1.webp&quot; srcset=&quot;/_astro/05_02.BYKux4Nw_2qGX8T.webp 640w, /_astro/05_02.BYKux4Nw_Z28dlnC.webp 750w, /_astro/05_02.BYKux4Nw_Z1JnXb4.webp 828w, /_astro/05_02.BYKux4Nw_ZnQlKn.webp 1080w, /_astro/05_02.BYKux4Nw_Z4UhuX.webp 1280w, /_astro/05_02.BYKux4Nw_2pfyg1.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Notion Boostでは、見出しに関する機能以外にも様々な拡張要素があります。「ページの先頭にスクロールして戻れるボタン」や、「ページの文字を常に小さくして表示させる」こと、「ページを限界幅で常に表示させる」ことが可能になります。プログラミング言語のコードをメモした場合には、「コードブロックに行番号を表示させる」ことも可能です。&lt;/p&gt;&lt;p&gt;他の機能の確認や、機能のオン/オフをする時は、Chromeのナビゲーションバーの拡張機能の部分からNotion Boostを右クリックして設定することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;881&quot; height=&quot;605&quot; src=&quot;/_astro/05_01.C2T6Mc7B_Z1qMjMO.webp&quot; srcset=&quot;/_astro/05_01.C2T6Mc7B_Z1s7Em6.webp 640w, /_astro/05_01.C2T6Mc7B_Z1MzDSU.webp 750w, /_astro/05_01.C2T6Mc7B_1qCGiz.webp 828w, /_astro/05_01.C2T6Mc7B_Z1qMjMO.webp 881w&quot; /&gt;&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/notion-boost/eciepnnimnjaojlkcpdpcgbfkpcagahd&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Notion Boost - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Boost Notion productivity with 20+ customizations like outline, small text full width for all, back to top button etc&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/zKiNFGswp6M4ajZo2ZS5caEyz59q6YbSU4e9JGQ7DMue1zbYc069lS1mIHsDneaVUcmrLTeqZ4Ii0WkDEm1XZeRCNQ=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. Markdown Viewer&lt;a href=&quot;#6-markdown-viewer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;MarkdownファイルをMarkdown形式としてレンダリング表示してくれます。&lt;/p&gt;&lt;p&gt;MarkdownのビュワーがPCに入っていない人はわざわざPCにMakrdown用にビュワーをインストールする必要がなくなります。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/markdown-viewer/ckkdlimhmcjmikdlpkmbgfkaikojcbjk&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Markdown Viewer - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Dark Mode • Themes • Autoreload • Mermaid Diagrams • MathJax • ToC • Syntax Highlighting&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/bw79vbR9aZiz6oGAQsBlzMhnd30Upr5DtPOhzdtgeSH6zKL2t4IOmyhshcW1wXh14XhmRwSr_MmLKM9HNZb7f8oUaQ=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プログラミング・開発系&lt;a href=&quot;#プログラミング開発系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;7. GCP console colorize&lt;a href=&quot;#7-gcp-console-colorize&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Cloudのプロジェクトを複数所有している場合に役立ちます。&lt;/p&gt;&lt;p&gt;現在、自分がどのプロジェクト用のコンソールを開いているのかが一目で分かるようになります。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/gcp-console-colorize/higjahjicmccalicmgfpokdmooopdhej&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GCP console colorize - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Change GCP console color&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/a72ecuvV8umOoy8VYI_0CzFKYza5oYR-BPP-x2Zldutln7CeI7pIldB0rAkT-04o7hPIX8S6Se3KXA7uRqYn6YPUzA=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. Google Apps Script GitHub アシスタント&lt;a href=&quot;#8-google-apps-script-github-アシスタント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Google Apps Script」で書いたコードを、GitHub上で管理できるようになる拡張機能です。ブランチを切ったり、コミット前に差分を確認することが出来ます。&lt;/p&gt;&lt;p&gt;ちなみに、「Google Apps Script」は、GoogleスプレッドシートやGoogleドライブを操作できる、JavaScriptベースのプログラミング言語です。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/google-apps-script-github/lfjcgcmkmjjlieihflfhjopckgpelofo&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google Apps Script GitHub アシスタント - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;GitHub/GitHub Enterprise/Bitbucket/GitLabでGASのインラインコードを管理&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/JQyTyCU3aXSfpzGXEYZDelP5ybdWSGiUk9ji6YW512-z3rHuyqaLizFmvf82tfGK3yNNtNmEagNnestoBypiYfWg=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他&lt;a href=&quot;#その他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;9. ChatGPT Ctrl+Enter Sender&lt;a href=&quot;#9-chatgpt-ctrlenter-sender&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ChatGPTに指示を出したり質問する時に、Enterキーではなく、Ctrl + Enterキーを押すことでチャットを送ることが出来るようになります。&lt;/p&gt;&lt;p&gt;しかし今日は色々な生成AIを使うので、この拡張機能がサポートされていないプラットフォームだと操作で混乱してしまいます。なので、色々なプラットフォームを使う人にはこの拡張機能は向いていないかも。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/chat-ai-ctrl+enter-sender/gbncgdhklmnckojlibfhdadpfbcdbnch&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Chat AI Ctrl+Enter Sender - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;ChatGPTなどのAIチャットサービスでのメッセージ送信を「Ctrl+Enter」に割り当て、誤送信を防ぎます。Enterキーで改行できるため直感的に操作可能です。&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/OnYQ43CMStMbo9lP4sEfSnBmsEo2XDSXCmxlV7IeswHAlQ9P8gZb3k-DLhiJOvh8pdnRft29GrnFP_vEYKd5wDMf=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. Bittorent For Chrome&lt;a href=&quot;#10-bittorent-for-chrome&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Torrentを使ってファイルを送受信できるようになる拡張機能です。&lt;/p&gt;&lt;p&gt;個人的には、「xAI」という会社から「Grok」という生成AIが登場した時に、そのWeightのデータ（100GBとか200GBあった記憶がある。）が配布されていたので、そのデータを手に入れようとした時にインストールしました。&lt;/p&gt;&lt;p&gt;まあ結局使わなかったんですけど。（メモリが100GBとか200GB無いとそもそも動かないんですよね。）&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/bittorent-for-chrome/aahnibhpidkdaeaplfdogejgoajkjgob&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Bittorent For Chrome - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;ChromeのBittorentへのリンクを送信&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/4dSeNWa0l4AS8KpEgodMn0Jqdwhpv8lhWV8n-KvkLosc6OWVp0t00paUP3fMSQQP78bx6VuPpLL8eQ1yHq9k7PWJ6Q=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. ColorZilla&lt;a href=&quot;#11-colorzilla&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Chromeブラウザ内で表示されている色のカラーコードを抽出できる、すなわちカラーピッカーです。&lt;/p&gt;&lt;p&gt;「ブラウザ内」と言いましたが、何ということでしょうか、実はブラウザより外に表示されている色も抽出することが出来てしまいます。何かデザインをする際に重宝しています。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/colorzilla/bhlhnicpbhignbdhedgjhgdocnmhomnp&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ColorZilla - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;高度なスポイトツール、カラーピッカー、グラデーション生成ツールなどの多彩で魅力的な機能&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/dqKrPk33LRO7ZFvKvSJv0q-rofymwBRJDiA3fuAZEXydo_tTS-959G0ZZKjLet9xVoVEWmD0FTYTZMEFx1mzbPzuOQ=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. GoFullPage - Full Page Screen Capture&lt;a href=&quot;#12-gofullpage---full-page-screen-capture&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在のタブで開いているページ全体をスクショしてくれます。つまり、とても細長い画像が出来上がるということです。実際にキャプチャさせてみるとこんな感じのプレビュー画面が表示されて、出力する形式を選択することが出来ます。プレビュー画面の右上から出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;676&quot; src=&quot;/_astro/12_01.Ccre1m_6_Z1iQrko.webp&quot; srcset=&quot;/_astro/12_01.Ccre1m_6_1Y4K5k.webp 640w, /_astro/12_01.Ccre1m_6_Z1YX23z.webp 750w, /_astro/12_01.Ccre1m_6_1XBBO9.webp 828w, /_astro/12_01.Ccre1m_6_5bOs7.webp 1080w, /_astro/12_01.Ccre1m_6_Z1HsdxT.webp 1280w, /_astro/12_01.Ccre1m_6_Z1iQrko.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出力形式は、&lt;code&gt;png&lt;/code&gt;もしくは&lt;code&gt;jpg&lt;/code&gt;形式、そしてPDF形式で出力することが出来ます。&lt;code&gt;png&lt;/code&gt;もしくは&lt;code&gt;jpg&lt;/code&gt;形式では縦方向の限界の長さまでで区切った画像ファイルが、1〜複数枚で出力されます。&lt;/p&gt;&lt;p&gt;PDF形式では、&lt;code&gt;Us legal portlait&lt;/code&gt;（アメリカのlegalというサイズで縦長）や&lt;code&gt;A4 landscape&lt;/code&gt;（A4で横長）などの用紙サイズで、1〜複数枚に出力することが可能です。プレビュー画面の右上から設定出来ます。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GoFullPage - Full Page Screen Capture - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;余分な権限を要求することなく、現在のページのスクリーンショットを完全に確実にキャプチャできます。&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/xkq24Y-hSgJHCOs7hskeMNfZatMQYRmybkMY8gGrzHTYVJiQR_2un6xgg9cXY93ShVNU5LdC7n5fddtbQxeNIV0hma8=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. Keepa - Amazon Price Tracker&lt;a href=&quot;#13-keepa---amazon-price-tracker&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Amazonでよく買い物をする場合は、入れておいた方が商品の買い時を判断するために役立ちます。&lt;/p&gt;&lt;p&gt;Amazonで検索した商品が、いつ安かったか、いつから高くなったのか、現在は最近の価格よりも安いのか、等々の情報を確認することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/keepa-amazon-price-tracke/neebplgakaahbhdphmkckjjcegoiijjo&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Keepa™ - Amazon Price Tracker - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;Adds price history charts and the option to be alerted on price drops to all supported Amazon sites.&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/zUc7eHFi6dIRS4Mednn9Q1aOZEP9lhjxXiMkAddWOc7pSEH5Xw4lbGpXdyCrZvfuL1IpN0FwFHwl5wX4WJtCbJXIbw=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Chromeで個人的に使っている拡張機能について紹介しました。どれも便利で日々助かっています。&lt;/p&gt;&lt;p&gt;以下の記事で、Chromeのオススメ設定と使い方についてまとめていますので、よければご参照下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/chrome-recap-of-settings-2024/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Chrome】2024年版_おすすめ設定と使い方&lt;/div&gt;&lt;div&gt;Google Chromeの設定方法を紹介し、ブックマークのインポート、起動時に表示するサイトの設定、ブックマークバーの管理、タブグループの活用方法など、利便性を高める各種設定について詳述しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241024_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;色々なヤツがいたなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おかげさまで毎日気持ちよくPCで作業できています。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Chrome】2024年版_おすすめ設定と使い方</title><link>https://endorphinbath.com/posts/chrome-recap-of-settings-2024/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-recap-of-settings-2024/</guid><description>Google Chromeの設定方法を紹介し、ブックマークのインポート、起動時に表示するサイトの設定、ブックマークバーの管理、タブグループの活用方法など、利便性を高める各種設定について詳述しています。</description><pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はChromeの設定と使い方を紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;新しい発見が出来たらいいなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Chromeの設定集&lt;a href=&quot;#google-chromeの設定集&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;やっぱり毎日使っているGoogle Chromeというブラウザがありますんで、
そのブラウザの設定できる事柄について紹介していきます。&lt;/p&gt;&lt;p&gt;それでは行きましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. ブックマークを他のブラウザからインポートする。&lt;a href=&quot;#1-ブックマークを他のブラウザからインポートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ブックマーク機能は便利だと思います。しかし、その所為で他のブラウザからChromeに引っ越したい、もしくは業務PCの関係でChromeから引っ越さなければならないけど移行が大変そうだ、とか、そんな時にブックマークはエクスポートが可能でインポートも可能であることを知っていると引っ越しが楽になります。&lt;/p&gt;&lt;p&gt;以下が&lt;strong&gt;インポート&lt;/strong&gt;の流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「ブックマークとリスト」をクリックする。&lt;/li&gt;
&lt;li&gt;「ブックマークバーと設定をインポート」をクリックする。&lt;/li&gt;
&lt;li&gt;すると、「ブックマークと設定のインポート」という画面が表示されるので、ブックマークのインポート元とするブラウザを決めて、インポートするデータを選択して「インポート」しましょう。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;639&quot; height=&quot;388&quot; src=&quot;/_astro/01_01.BnvZTcm5_Z1bUdJL.webp&quot; srcset=&quot;/_astro/01_01.BnvZTcm5_Z1bUdJL.webp 639w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして次に、以下が&lt;strong&gt;エクスポート&lt;/strong&gt;の流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「ブックマークとリスト」をクリックする。&lt;/li&gt;
&lt;li&gt;「ブックマークバー マネージャ」をクリックする。&lt;/li&gt;
&lt;li&gt;開かれたブックマークページの、右上の縦3点リーダーにある「ブックマークをエクスポート」をクリックする。（ちなみにこのページから「ブックマークをインポート」することも可能です。）&lt;/li&gt;
&lt;li&gt;ブックマークに関するデータが入ったファイルがダウンロードされて、PCのエクスプローラから確認できます。そのファイルを別のブラウザにインポートしましょう。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;662&quot; src=&quot;/_astro/01_02.BgflgWGk_2jwR2O.webp&quot; srcset=&quot;/_astro/01_02.BgflgWGk_Z1XS0Ie.webp 640w, /_astro/01_02.BgflgWGk_Z2nawbX.webp 750w, /_astro/01_02.BgflgWGk_1Ap7FK.webp 828w, /_astro/01_02.BgflgWGk_1qPOni.webp 1080w, /_astro/01_02.BgflgWGk_Z13EUIc.webp 1280w, /_astro/01_02.BgflgWGk_2jwR2O.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. Chromeの起動時に開くサイトを設定する。&lt;a href=&quot;#2-chromeの起動時に開くサイトを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PCの起動後、Chromeを開く時にいつも使うサイトが最初から表示されていると作業をスムーズに始められますよね。設定してしまいましょう。
以下が設定の流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「設定」をクリックする。&lt;/li&gt;
&lt;li&gt;開かれた設定ページの、左サイドバーにある「起動時」をクリックする。&lt;/li&gt;
&lt;li&gt;「特定のページまたはページセットを開く」を選択して、「新しいページを追加」もしくは「現在開いているページを使用」をクリックして設定する。&lt;/li&gt;
&lt;li&gt;「新しいページを追加」では設定したいサイトのURLを入力して設定します。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;「現在開いているページを使用」ではクリックした瞬間に、現在開いている全てのページが設定されます。
（※そのため、この時にタブが50個ある状態で設定してしまうと50個設定されてしまうので注意！）&lt;/p&gt;&lt;p&gt;ちなみに、PCの再起動後にChromeを起動すると、その起動時のサイトが開かれますが、&lt;code&gt;Ctrl + Shift + T&lt;/code&gt;キーを押すと、再起動前にChromeを閉じた時に開いていたページを全て復元することが可能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. ブックマークバーを表示もしくは非表示にする&lt;a href=&quot;#3-ブックマークバーを表示もしくは非表示にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ブックマーク機能は便利だと思います。そしてブックマークバーのおかげでさらに便利だと思います。しかし、そのブックマークバーが表示されていないと困ってしまいます。&lt;/p&gt;&lt;p&gt;その場合は、以下の流れで表示することが可能です。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「ブックマークとリスト」をクリックする。&lt;/li&gt;
&lt;li&gt;「ブックマークバーを表示」をクリックする。これで表示できます。&lt;/li&gt;
&lt;li&gt;さらに、キーボードショートカットとして、&lt;code&gt;Ctrl + Shift + B&lt;/code&gt;キーを押すことで表示することも可能です。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4. タブグループの有無を設定する。&lt;a href=&quot;#4-タブグループの有無を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近のChromeでは、タブをタブグループとしてまとめることで画面に表示するタブの数を視覚的に減らすことが可能です。&lt;/p&gt;&lt;p&gt;Chromeではデフォルトで、このタブグループを新規作成するボタンがブックマークバーの部分に表示されます。しかしながら、このタブグループが不要な人にとっては無用の長物です。不要な人は設定ページから非表示にすることが出来ます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「設定」をクリックする。&lt;/li&gt;
&lt;li&gt;開かれた設定ページの、左サイドバーにある「デザイン」をクリックする。&lt;/li&gt;
&lt;li&gt;「ブックマーク バーにタブグループを表示する」をクリックして、オン/オフできます。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;295&quot; src=&quot;/_astro/04_01.DcE463ls_2fcrPu.webp&quot; srcset=&quot;/_astro/04_01.DcE463ls_2fcrPu.webp 516w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5. ブラウザのテーマなどを装飾する。&lt;a href=&quot;#5-ブラウザのテーマなどを装飾する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chromeのテーマを自分の気分などに合わせて変えたりすることが出来ます。&lt;/p&gt;&lt;p&gt;ブラウザの右上の縦3点リーダーから、「拡張機能」を選び、「Chrome ウェブストアにアクセス」をクリックします。&lt;/p&gt;&lt;p&gt;Chrome ウェブストアのページが開いたら左上から「テーマ」を選び、自分のお気に入りのテーマをChromeに設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;739&quot; src=&quot;/_astro/05_01.C5IXpHbN_2h0Fkx.webp&quot; srcset=&quot;/_astro/05_01.C5IXpHbN_Z99aNf.webp 640w, /_astro/05_01.C5IXpHbN_ZfFImP.webp 750w, /_astro/05_01.C5IXpHbN_Z1WaJGF.webp 828w, /_astro/05_01.C5IXpHbN_1Gm7Ib.webp 1080w, /_astro/05_01.C5IXpHbN_qpzB2.webp 1280w, /_astro/05_01.C5IXpHbN_2h0Fkx.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6. 拡張機能をインストールする。&lt;a href=&quot;#6-拡張機能をインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Chromeは便利なブラウザですが、拡張機能をインストールするとさらに使いやすくなります。&lt;/p&gt;&lt;p&gt;例えば、Amazonでの商品の買い時を決める参考になる「Keepa - Amazon Price Tracker」、表示しているWebページの記事の内容をPodcastみたく読み上げてくれる「Read Aloud: テキスト読み上げ音声リーダー」等があります。&lt;/p&gt;&lt;p&gt;以下に個人的に使用している拡張機能を紹介していますので、良ければご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/chrome-recap-of-extension-2024/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Chrome】2024年版_個人的に使っている拡張機能を率直に書きます。&lt;/div&gt;&lt;div&gt;オススメのGoogle Chrome拡張機能を、情報収集、ライティング、プログラミング、その他のカテゴリーに分けて、Read AloudやNotion Boostなどの便利なツールを解説しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241025_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7. 拡張機能にショートカットキーを割り当てる。&lt;a href=&quot;#7-拡張機能にショートカットキーを割り当てる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chromeにインストールした拡張機能に対して、ショートカット機を作成することが可能です。&lt;/p&gt;&lt;p&gt;今使いたくない拡張機能をオフにして、5分後にやっぱり再度使いたいからオンにする、みたいなことがショートカットキーで可能になります。&lt;/p&gt;&lt;p&gt;例えば、Google Chromeではデフォルトで、&lt;code&gt;Ctrl + D&lt;/code&gt;キーを打つと表示中のページをブックマークすることが出来ますが、その感覚で拡張機能を動かすことが出来るわけです。
拡張機能にショートカットキーを作成する流れは次の手順になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「拡張機能」＞「拡張機能を管理」の順でクリックする。&lt;/li&gt;
&lt;li&gt;開かれた拡張機能の管理ページの、左サイドバーにある「キーボードショートカット」をクリックする。&lt;/li&gt;
&lt;li&gt;その開かれたページ内で拡張機能のオン/オフをするためのショートカットキーを設定できます。拡張機能によってはオン/オフをする以外の設定項目もあったりするので、よく使う拡張機能がある場合は確認しておくと良いでしょう。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;872&quot; src=&quot;/_astro/07_01.CkhQcL_H_Z1nVKTB.webp&quot; srcset=&quot;/_astro/07_01.CkhQcL_H_Z2nWaQY.webp 640w, /_astro/07_01.CkhQcL_H_1O45Mr.webp 750w, /_astro/07_01.CkhQcL_H_2nmJ3h.webp 828w, /_astro/07_01.CkhQcL_H_Z29SQad.webp 1080w, /_astro/07_01.CkhQcL_H_Z1VAarj.webp 1280w, /_astro/07_01.CkhQcL_H_Z1nVKTB.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8. 検索エンジンを変更する。&lt;a href=&quot;#8-検索エンジンを変更する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Chromeのデフォルトの検索エンジンはもちろんGoogleですが、その検索エンジンを変更することが可能です。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「設定」をクリックする。&lt;/li&gt;
&lt;li&gt;開かれた設定ページの、左サイドバーにある「検索エンジン」をクリックする。&lt;/li&gt;
&lt;li&gt;「検索エンジン」の部分を確認します。表示されている検索エンジンの中で使いたいものを決めます。&lt;/li&gt;
&lt;li&gt;利用したい検索エンジンの右横にある縦3点リーダーから、「デフォルトに設定」をクリックします。これで使えるようになるでしょう。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;2024年10月時点で利用できる検索エンジンは、Google、DuckDuckGo、Yahoo! JAPAN、Microsoft Bing、Cốc Cốcの5種類です。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;717&quot; src=&quot;/_astro/08_01.CzkXRpzn_2fy8YK.webp&quot; srcset=&quot;/_astro/08_01.CzkXRpzn_ZFN01e.webp 640w, /_astro/08_01.CzkXRpzn_MwfmK.webp 750w, /_astro/08_01.CzkXRpzn_ZSWKW5.webp 828w, /_astro/08_01.CzkXRpzn_MSG6j.webp 1080w, /_astro/08_01.CzkXRpzn_Z1Dl6Wb.webp 1280w, /_astro/08_01.CzkXRpzn_2fy8YK.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9. サイト内検索を変更する。&lt;a href=&quot;#9-サイト内検索を変更する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Chromeの検索窓で、&lt;code&gt;@gemini&lt;/code&gt;と打ち込んでスペースキーを押すとGoogleの生成AIである「Gemini」とのチャットを開始することが出来ます。そして、この&lt;code&gt;@&lt;/code&gt;を付けて検索する機能は他にもあります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;タブ内検索・・・&lt;code&gt;@タブ&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ブックマーク内検索・・・&lt;code&gt;@ブックマーク&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;履歴内検索・・・&lt;code&gt;@履歴&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そしてこのサイト内検索で設定することで、検索窓から検索エンジン以外の別のサイトで検索させることが出来るようになります。今回は試しに検索窓からYouTubeで検索できるようにしてみましょう。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「設定」をクリックする。&lt;/li&gt;
&lt;li&gt;開かれた設定ページの、左サイドバーにある「検索エンジン」をクリックする。&lt;/li&gt;
&lt;li&gt;「サイト内検索」の部分を確認します。これまで紹介した4種類のサイト内検索がデフォルトで設定されていますので、ここで「追加」ボタンをクリックして、YouTubeを検索できるようにします。&lt;/li&gt;
&lt;li&gt;それぞれの入力フィールドで、名前には「YouTube」、ショートカットには&lt;code&gt;@youtube&lt;/code&gt;、URL（&lt;code&gt;%s&lt;/code&gt;=検索語句）には&lt;code&gt;https://www.youtube.com/results?search_query=%s&lt;/code&gt;と入力して設定します。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1055&quot; height=&quot;549&quot; src=&quot;/_astro/09_01.lJWwgO6F_1q5unt.webp&quot; srcset=&quot;/_astro/09_01.lJWwgO6F_Z1p2Gk0.webp 640w, /_astro/09_01.lJWwgO6F_ZB0T8r.webp 750w, /_astro/09_01.lJWwgO6F_ZUkKan.webp 828w, /_astro/09_01.lJWwgO6F_1q5unt.webp 1055w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、サイト内検索に「YouTube」が追加されますので、試しに検索窓から検索してみましょう。&lt;/p&gt;&lt;p&gt;&lt;code&gt;@youtube&lt;/code&gt;と入力して、スペースキーを押すと「YouTube を検索」と表示されて、続けて「ガトーショコラ」と打ち込んでEnterキーを押します。
&lt;img loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;188&quot; src=&quot;/_astro/09_02.qBI8720u_ZEhv6H.webp&quot; srcset=&quot;/_astro/09_02.qBI8720u_ZEhv6H.webp 400w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、ガトーショコラに関する動画がYouTubeのページ内で表示されました！
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;761&quot; src=&quot;/_astro/09_03.B8v0UeNj_gjXSG.webp&quot; srcset=&quot;/_astro/09_03.B8v0UeNj_YVhWM.webp 640w, /_astro/09_03.B8v0UeNj_Z1bTE8c.webp 750w, /_astro/09_03.B8v0UeNj_ZUlXLv.webp 828w, /_astro/09_03.B8v0UeNj_PIOBz.webp 1080w, /_astro/09_03.B8v0UeNj_1bUNc2.webp 1280w, /_astro/09_03.B8v0UeNj_gjXSG.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いちいちYouTubeのページをトップ画面から開いて、検索窓に移動して入力するという手間が省けます。忌々しいレコメンドも目に入らないので、生産性が向上することでしょう！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10. 閉じてしまったタブを復活させる。&lt;a href=&quot;#10-閉じてしまったタブを復活させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;うっかりタブを閉じてしまった経験は誰しもある事かと思います。その際に、その直前に閉じてしまったタブを復元することが可能です。&lt;/p&gt;&lt;p&gt;タブバーでタブが表示されていない部分を右クリックして、そのコンテキストメニューから「閉じたタブを開く」をクリックすると、直前のタブが復活します。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;Ctrl + Shift + T&lt;/code&gt;のショートカットキーでも、同様の操作を行うことが可能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;11. ページを拡大もしくは縮小表示する。&lt;a href=&quot;#11-ページを拡大もしくは縮小表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;閲覧している画像の中に書いてある文字が小さい時に拡大したり、もう少しページを全体的に俯瞰して閲覧したい時に縮小したくなります。その時にページを好きなように拡大縮小表示できるようにしておきましょう。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;拡大する時は、&lt;code&gt;Ctrl&lt;/code&gt;キーを押しながらマウスホイールを上に転がします。&lt;/li&gt;
&lt;li&gt;縮小する時は、&lt;code&gt;Ctrl&lt;/code&gt;キーを押しながらマウスホイールを下に転がします。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、拡大縮小をデフォルト値（100%）に戻す時は、&lt;code&gt;Ctrl + 0&lt;/code&gt;キーを押すことで戻すことが可能です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;12. リンクを新しいタブで開く。&lt;a href=&quot;#12-リンクを新しいタブで開く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;閲覧しているページで別のリンクに飛ぶことがあります。しかしその時って、別タブで開いたり、同じタブで開いたりページによって挙動は変わります。同じタブで開いてしまった時とかは、「このページはそのまま開いておきたかったのに・・・。」と思うこともあります。&lt;/p&gt;&lt;p&gt;これは、リンクのクリックの仕方によって、ページを必ず別タブで開くように対策することあ出来ます。以下のどちらかの方法で行えます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Ctrlキーを押しながらリンクをクリックする。&lt;/li&gt;
&lt;li&gt;マウスホイールでリンクをクリックする。（&lt;code&gt;Ctrl&lt;/code&gt;キー不要なので片手で事足ります。）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;13. タスクマネージャを開く。&lt;a href=&quot;#13-タスクマネージャを開く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windows上でもタスクマネージャがありますが、それはPC全体でのリソースの占有率などを覗く時に使うものであって、Chromeの中でどのタスクがどれぐらいリソースを使用しているかは分かりません。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「その他のツール」にマウスオーバーする。&lt;/li&gt;
&lt;li&gt;その項目の中から「タスクマネージャ」をクリックする。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;すると、「タスクマネージャ」が別ウインドウで開いて、どのタブでリソースを占有しているかどうかを確認することが出来ます。PCの挙動が重い場合は、リソースを多く占有しているタブを閉じてしまいましょう。
また、タスクマネージャ内で右クリックすることで、表示する項目を増やしたり減らすことも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;653&quot; height=&quot;373&quot; src=&quot;/_astro/13_01.CaEftIbx_ZTjWhc.webp&quot; srcset=&quot;/_astro/13_01.CaEftIbx_Z5RVA.webp 640w, /_astro/13_01.CaEftIbx_ZTjWhc.webp 653w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;14. Googleレンズで検索する。&lt;a href=&quot;#14-googleレンズで検索する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分が今閲覧しているものを改めてGoogleで検索したい時に、Googleレンズを使ってみましょう。Googleには元々、画像検索をする機能が備わっていますが、その画像検索ですと・・・、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;検索したい画像をスクショする。&lt;/li&gt;
&lt;li&gt;エクスプローラを開いて、そのスクショした画像ファイルが入っていることを確認する。&lt;/li&gt;
&lt;li&gt;Google検索で「画像検索」の機能に切り替えて、エクスプローラ等から画像ファイルをアップロードする。&lt;/li&gt;
&lt;li&gt;検索される。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;・・・という風に、「画像検索」ですと手順が長くなってしまいます。&lt;/p&gt;&lt;p&gt;なので、ただ検索したいだけなのであれば「Googleレンズ」を使いましょう。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ブラウザの右上の縦3点リーダーから、「Google レンズで検索」をクリックする。&lt;/li&gt;
&lt;li&gt;検索したい部分をGoogleレンズでスクショする。&lt;/li&gt;
&lt;li&gt;検索される。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;検索までの手順がかなり短縮されますので、ぜひお試し下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;15. Googleドライブでファイルをコピペする。&lt;a href=&quot;#15-googleドライブでファイルをコピペする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これはGoogle Chrome固有の機能です。僕がChromeを使っている最たる理由の一つです。&lt;/p&gt;&lt;p&gt;Googleドライブを開いて、ファイルを選択して、&lt;code&gt;Ctrl + C&lt;/code&gt;を押すと、「◯個のファイルをコピーしました。」という感じのメッセージが表示されますので、それを別のタブで開いたGoogleドライブの別のフォルダ上で、&lt;code&gt;Ctrl + V&lt;/code&gt;を押すと貼り付けをすることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1459&quot; height=&quot;871&quot; src=&quot;/_astro/15_01.CRmsH446_Z2fvXPA.webp&quot; srcset=&quot;/_astro/15_01.CRmsH446_1D6DeJ.webp 640w, /_astro/15_01.CRmsH446_b3eGB.webp 750w, /_astro/15_01.CRmsH446_Z1kWvyW.webp 828w, /_astro/15_01.CRmsH446_ZGlyqM.webp 1080w, /_astro/15_01.CRmsH446_2wO39F.webp 1280w, /_astro/15_01.CRmsH446_Z2fvXPA.webp 1459w&quot; /&gt;&lt;/p&gt;&lt;p&gt;つまりブラウザ上でエクスプローラのようなファイル複製が行えるわけです。（フォルダの場合はコピーできません。右クリックでフォルダへのショートカットファイルを作成しましょう。）&lt;/p&gt;&lt;p&gt;コピー元のフォルダを開いているタブは、開いたままにしておく必要がある点にご注意下さい。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;Ctrl + C&lt;/code&gt;の代わりに&lt;code&gt;Ctrl + X&lt;/code&gt;を押すことで切り取りが出来ます。そして、&lt;code&gt;Ctrl + V&lt;/code&gt;でカット＆ペーストになります。&lt;/p&gt;&lt;p&gt;ちなみに、Googleドライブで利用できるショートカットキーを、この記事にまとめましたので興味があったら除いてみて下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gss-shortcutkey-for-mac/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Spreadsheet】まとめ：Googleスプレッドシートで使用できるショートカットキー（Mac版）&lt;/div&gt;&lt;div&gt;MacでGoogle Chrome上でGoogle スプレッドシートを操作する際に使用できるショートカットキーをまとめました。一部キーに関しては、スプレッドシートでは反応せず他の機能を呼ぶこともあるので、その機能もまとめました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220126_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Chromeで設定できるオススメな事柄について紹介しました。&lt;/p&gt;&lt;p&gt;他にも「デベロッパーツール」なる機能があって、Webアプリを使うのに欠かせなかったり、スマホ版のChromeともWebサイトを共有できたり、Chromeは奥深いツールです。&lt;/p&gt;&lt;p&gt;結局、他のブラウザに乗り換えることが出来ません。人誑しなヤツですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いつ完全に乗り換える日が来るのやら。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ズブズブです。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】Webpに変換した画像ファイルの向きを直す</title><link>https://endorphinbath.com/posts/powershell-edit-exif-for-orientation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-edit-exif-for-orientation/</guid><description>PowerShellとExiftoolを使用して、画像ファイルの向きを正す方法を解説します。Webpへの変換時に生じる回転の問題を修正し、複数画像の一括修正も実現します。</description><pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか画像の向きが忌々しい向きに戻っちゃったんだけど！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;せっかく縦向きにしたのに横向きに戻ってしまったなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Webpに変換した画像の向きが戻ってしまった。&lt;a href=&quot;#webpに変換した画像の向きが戻ってしまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回扱うケースは、拡張子を別のものへと変換した時に発生したものです。&lt;/p&gt;&lt;p&gt;「libwebp」などのライブラリで、JPGやPNGの画像ファイルをWEBP拡張子に変換しました。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/speed/webp/docs/cwebp?hl=hi&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cwebp | WebP | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/google-green.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;すると、この元々のJPG画像が・・・
&lt;img loading=&quot;lazy&quot; width=&quot;728&quot; height=&quot;1536&quot; src=&quot;/_astro/11.C935U8hU_Z10RXq0.webp&quot; srcset=&quot;/_astro/11.C935U8hU_CYK66.webp 640w, /_astro/11.C935U8hU_Z10RXq0.webp 728w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、WEBP画像へと変換したことによって横向きから縦向きになってしまいました！？
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;728&quot; src=&quot;/_astro/12.By3foOR8_Z1QOdLF.webp&quot; srcset=&quot;/_astro/12.By3foOR8_1gImAT.webp 640w, /_astro/12.By3foOR8_Z1kzJld.webp 750w, /_astro/12.By3foOR8_1kDMk8.webp 828w, /_astro/12.By3foOR8_Z2hvaUX.webp 1080w, /_astro/12.By3foOR8_1kPObB.webp 1280w, /_astro/12.By3foOR8_Z1QOdLF.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;元々このJPG画像は、Androidでゲームを遊んでいる時の画面をスクショしたものです。そして、その画像は最初は横向きで保存されていたので、Androidの画像ビュワーアプリ上で縦向きに変換した、という経緯がありました。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1536&quot; src=&quot;/_astro/13.DNW2B4hm_Z11kGG5.webp&quot; srcset=&quot;/_astro/13.DNW2B4hm_1RaUUx.webp 640w, /_astro/13.DNW2B4hm_1RCCAX.webp 750w, /_astro/13.DNW2B4hm_1S25GN.webp 828w, /_astro/13.DNW2B4hm_Z1UGdK1.webp 1080w, /_astro/13.DNW2B4hm_1zefHh.webp 1280w, /_astro/13.DNW2B4hm_Z11kGG5.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;戻す方法&lt;a href=&quot;#戻す方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1枚だけ回転させる。&lt;a href=&quot;#1枚だけ回転させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この事象を解決するために、以下のようにしてPowerShellで画像を回転させます。とりあえず1枚回転させたい時はこの処理で足ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.\20220729234911.jpg&quot;&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Location&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ChildPath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.\20220729234911_orien.jpg&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputPath.Replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$image&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$image.RotateFlip&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;System.Drawing.RotateFlipType&lt;/span&gt;&lt;span&gt;]::Rotate90FlipNone);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$image.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Jpeg);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$image.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;相対パスで処理させようとすると以下のようなエラーになるので、絶対パスに直す処理も含めています。
こちらは、&lt;code&gt;[System.Drawing.Image]::FromFile()&lt;/code&gt;を相対パスを使って実行した時のエラー。ちなみに、「.ctor」はコンストラクターのことらしいです。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;New-Object : “1” 個の引数を指定して “.ctor” を呼び出し中に例外が発生しました: “使用されたパラメーターが有効ではありません。”
…&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;こちらは、&lt;code&gt;$image.Save()&lt;/code&gt;を相対パスを使って実行した時のエラー。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“2” 個の引数を指定して “Save” を呼び出し中に例外が発生しました: “値を Null にすることはできません。
パラメーター名”
…&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;先程の&lt;code&gt;$image.Save()&lt;/code&gt;で&lt;code&gt;[System.Drawing.Imaging.ImageFormat]::Webp&lt;/code&gt;を引数に入れると変換できなかったので、別の方法でWebpにします。回転させた時はJpegをWebpには出来ないのかもしれません。Webpはビットマップ形式ではないですしね。&lt;/p&gt;&lt;p&gt;なので、回転させた画像を「Cwebp」というライブラリでWebpにします。詳しい方法は下記の記事で紹介しています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、Webpになった画像は回転を保持した状態で、Windows上でもWeb上でも閲覧できるようになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1398&quot; height=&quot;825&quot; src=&quot;/_astro/41.BSG7RLcd_1KF5Tk.webp&quot; srcset=&quot;/_astro/41.BSG7RLcd_a7B33.webp 640w, /_astro/41.BSG7RLcd_ZYD0ok.webp 750w, /_astro/41.BSG7RLcd_1Az9KU.webp 828w, /_astro/41.BSG7RLcd_Z1UbGY5.webp 1080w, /_astro/41.BSG7RLcd_1BsM8O.webp 1280w, /_astro/41.BSG7RLcd_1KF5Tk.webp 1398w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;一括で複数枚回転させる。&lt;a href=&quot;#一括で複数枚回転させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それではこの処理を一括で複数枚の画像ファイルに適用できるようにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Set-ImageOrientations&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$orgSuffix&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$targetExt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.jpg&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$targetExt&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$img&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$isPathCorrect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Test-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$img&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$img&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$isPathCorrect&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: cccccccccccccccccccccccccccc&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$isPathCorrect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;_orien&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$suffixWithExt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}{1}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$targetExt&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$imgOriented&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$img.Replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$targetExt&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$suffixWithExt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Set-ImageOrientation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$imgOriented&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$orgSuffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;{0} images confirmed.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Set-ImageOrientation&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$srcRelPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$dstRelPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$srcRelPath&lt;/span&gt;&lt;span&gt;).Path;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$dstRelPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputPath.Replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;.\&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$relDirOwningLog&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$strCmd&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}/exiftool.exe&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$relDirOwningLog&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$argumentArray&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;-T&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;-Orientation&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$argumentArray&lt;/span&gt;&lt;span&gt; -join &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-ExternalCommand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$strCmd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Write-Output $oResult.stdout;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Write-Host $oResult.stdout;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult.stdout&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Add-Type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AssemblyName System.Drawing;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$rotateFlipType&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.RotateFlipType&lt;/span&gt;&lt;span&gt;]::Rotate90FlipNone;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$clockwisedStr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Rotate 90 CW&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$clockwisedStr&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: 90 degree clockwised.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;elseif&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Rotate 180&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$rotateFlipType&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.RotateFlipType&lt;/span&gt;&lt;span&gt;]::Rotate180FlipNone;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: 180 degree clockwised.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;elseif&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: unclockwised.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;elseif&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Unknown (0)&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: this file skipping.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: Unknown orientation value: &apos;{1}&apos;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$orientation&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$rotateFlipType&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: ccccccccccccccccccccccccccccccccccc&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$img&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Drawing.Image&lt;/span&gt;&lt;span&gt;]::FromFile(&lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$img.RotateFlip&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$rotateFlipType&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;###############################&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$img.Save&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Drawing.Imaging.ImageFormat&lt;/span&gt;&lt;span&gt;]::Jpeg);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$img.Dispose&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: dddddddddddddddddddddddddddddddddd&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Get-FileName&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$absPath&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$absPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Relative);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Relative));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$baseName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$item.BaseName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$item.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$fileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}{1}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$baseName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$fileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Rename a source file and a destination file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$orgFileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-FileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# $newFileName = (Get-FileName $outputPath);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: ffffffffffffffffffffffffffffffffff&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$inputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Relative) | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# $global:orgBaseName = $_.BaseName;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.BaseName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.Extension&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Resolve-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$outputPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Relative) | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$orgFileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$orgFileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;{0}: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/span&gt;&lt;span&gt;`n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; $MyInvocation&lt;/span&gt;&lt;span&gt;.MyCommand.Name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;_org&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ImageOrientations&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input &apos;y&apos; if you wanna move original images......&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$suffixWithExt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.\*{0}.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;y&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Move-Item -Path .\*_org.jpg -Destination .\5_original_files;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$suffixWithExt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ざっくり言うと、&lt;code&gt;Set-ImageOrientation&lt;/code&gt;で1枚の画像ファイルを回転させて、&lt;code&gt;Set-ImageOrientations&lt;/code&gt;でを複数回実行させます。&lt;/p&gt;&lt;p&gt;処理の流れとしては、こんな感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Set-ImageOrientations&lt;/code&gt;で、ファイルを複数個取得して、各々のファイルに対して&lt;code&gt;Set-ImageOrientation&lt;/code&gt;を実行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Set-ImageOrientation&lt;/code&gt;で、「Exiftool」ライブラリを使ってどれぐらい回転しているかの情報を取得。画像を回転させる必要があるかどうかを判断する。不要な場合はこの関数が終了して次の画像の判断に移る。&lt;/li&gt;
&lt;li&gt;画像を回転させる場合は、アセンブリから&lt;code&gt;System.Drawing&lt;/code&gt;名前空間を呼び出して、画像を回転させる。&lt;/li&gt;
&lt;li&gt;元の画像と修正後の画像のファイル名をリネームする。（その後のWebpに変換する作業を楽にするためです。）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;留意点が2つあり、1つ目は「Exiftool」というライブラリを使っている点です。このライブラリは、画像ファイルの中で「Exif」という（その他にも色々な）形式で保持されているメタデータに参照できるものです。このライブラリに関しては後述します。&lt;/p&gt;&lt;p&gt;2つ目は、画像が90度回転しているのか、180度回転しているのか等といった情報を取得するために、Exiftool実行時の標準出力を&lt;code&gt;Register-ObjectEvent&lt;/code&gt;コマンドレットで取得している点です。&lt;code&gt;Start-Process&lt;/code&gt;コマンドレットを使用する方法もありますが、それだとテキストファイル等にI/Oする必要がありますが、今回使った方法を使えばメモリ上で完結することが出来ます。詳しいことは以下の記事をご参照下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-stdout/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】処理実行時のログファイルへの標準出力&lt;/div&gt;&lt;div&gt;PowerShellで標準出力とエラー出力をログファイルに記録する方法を解説しています。Out-FileやRegister-ObjectEventなどのコマンド活用により、ログ管理が可能になります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241022_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;その処理内容は貼っておきます。その&lt;code&gt;Register-ObjectEvent&lt;/code&gt;コマンドレットを使用してExiftoolの標準出力を取得している、Invoke-ExternalCommandの関数の内容は以下のとおりです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Invoke-ExternalCommand&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$commandPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Creating process object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Diagnostics.Process&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Setting process invocation parameters.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.FileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$commandPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.Arguments&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.UseShellExecute&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.CreateNoWindow&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.UseShellExecute&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.RedirectStandardOutput&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.RedirectStandardError&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Async Writing: Start&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Creating string builders to store stdout and stderr.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdOutBuilder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName System.Text.StringBuilder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdErrBuilder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName System.Text.StringBuilder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Adding event handers for stdout and stderr.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (! [&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;]::IsNullOrEmpty($EventArgs&lt;/span&gt;&lt;span&gt;.Data&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$Event&lt;/span&gt;&lt;span&gt;.MessageData.AppendLine&lt;/span&gt;&lt;span&gt;($EventArgs&lt;/span&gt;&lt;span&gt;.Data&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdOutEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Register-ObjectEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;InputObject &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Action &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;EventName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;OutputDataReceived&apos;&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;MessageData &lt;/span&gt;&lt;span&gt;$oStdOutBuilder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdErrEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Register-ObjectEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;InputObject &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Action &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;EventName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ErrorDataReceived&apos;&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;MessageData &lt;/span&gt;&lt;span&gt;$oStdErrBuilder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Starting process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Void&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pinfo.Start&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.BeginOutputReadLine&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.BeginErrorReadLine&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Void&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pinfo.WaitForExit&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Async Writing: End&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unregistering events to retrieve process output.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unregister-Event&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;SourceIdentifier &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdOutEvent.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unregister-Event&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;SourceIdentifier &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdErrEvent.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName PSObject &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Property ([&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Ordered&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;ExitCode&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo.ExitCode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stdout&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdOutBuilder.ToString&lt;/span&gt;&lt;span&gt;().Trim();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stderr&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdErrBuilder.ToString&lt;/span&gt;&lt;span&gt;().Trim();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;【余談】Exiftoolを使ってタグをいじる方法も試した。&lt;a href=&quot;#余談exiftoolを使ってタグをいじる方法も試した&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最初は、「Exiftool」を使って回転させられないかを試しました。
Exiftoolのリファレンスはこちらで確認できます。まあちょっと情報が膨大で全て見通すのは骨が折れます。&lt;/p&gt;&lt;a href=&quot;https://exiftool.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://exiftool.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;exiftool.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ExifTool by Phil Harvey&lt;/div&gt;&lt;div&gt;A command-line application and Perl library for reading and writing EXIF, GPS, IPTC, XMP, makernotes and other meta information in image, audio and video files. For Windows, MacOS, and Unix systems.&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;Windows上では回転するのに、Web上では回転しない。&lt;a href=&quot;#windows上では回転するのにweb上では回転しない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そのサイトからダウンロードできる「Exiftool.exe」をローカルフォルダに配置して、以下のコマンドをPowerShellで実行します。そうすると、ソース画像の回転情報が変換後の画像の回転情報に反映されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.\&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-tagsFromFile&quot;&lt;/span&gt;&lt;span&gt; &amp;lt;source image file&amp;gt; &lt;/span&gt;&lt;span&gt;&quot;-orientation&amp;lt;orientation&quot;&lt;/span&gt;&lt;span&gt; &amp;lt;destination image file&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# for example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.\&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-tagsFromFile&quot;&lt;/span&gt;&lt;span&gt; .\&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;jpg &lt;/span&gt;&lt;span&gt;&quot;-orientation&amp;lt;orientation&quot;&lt;/span&gt;&lt;span&gt; .\&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;90度に回転させるようにしたので、Webp拡張子でも縦向きを保持するようになると思ったのですが・・・アレッ・・・？
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;725&quot; src=&quot;/_astro/61.B3B_UdqO_1LY630.webp&quot; srcset=&quot;/_astro/61.B3B_UdqO_ZTaVD4.webp 640w, /_astro/61.B3B_UdqO_1yH5dK.webp 750w, /_astro/61.B3B_UdqO_ZPfvTP.webp 828w, /_astro/61.B3B_UdqO_Z1aQX03.webp 1080w, /_astro/61.B3B_UdqO_Z5wYME.webp 1280w, /_astro/61.B3B_UdqO_1LY630.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし・・・、Web上にアップロードすると横向きになってしまいました・・・。
これはMEGA上に上げた時の写真です。Windows上では縦向きに戻ったのに・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;943&quot; src=&quot;/_astro/62.B9lz-m_h_Z2g9BpM.webp&quot; srcset=&quot;/_astro/62.B9lz-m_h_1ORF15.webp 640w, /_astro/62.B9lz-m_h_TU08Q.webp 750w, /_astro/62.B9lz-m_h_1Pu3jX.webp 828w, /_astro/62.B9lz-m_h_Z2g9BpM.webp 1045w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;今回は失敗だが、ついでにExiftoolの使い方をチラっと。&lt;a href=&quot;#今回は失敗だがついでにexiftoolの使い方をチラっと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちなみに、画像の回転情報以外に、全ての情報を反映したい場合は、以下のコマンドを実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.\&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-tagsFromFile&quot;&lt;/span&gt;&lt;span&gt; &amp;lt;source image file&amp;gt; &lt;/span&gt;&lt;span&gt;&quot;-exif:all&quot;&lt;/span&gt;&lt;span&gt; &amp;lt;destination image file&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# for example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.\&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-tagsFromFile&quot;&lt;/span&gt;&lt;span&gt; .\&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;jpg &lt;/span&gt;&lt;span&gt;&quot;-exif:all&quot;&lt;/span&gt;&lt;span&gt; .\&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;基本的には、この&lt;code&gt;&quot;-exif:all&quot;&lt;/code&gt;という文字列を引数に入れれば、元画像のタグにある情報はほぼ反映できます。&lt;/p&gt;&lt;p&gt;しかしながら、個別のタグにある情報のみを反映したい場合は、以下のコマンドで&lt;code&gt;&quot;-exif:all&quot;&lt;/code&gt;で情報を反映した後の画像がどういう名前のタグを持っているかを調べてから、個別に反映出来るかどうかが判断出来ます。
拡張子によって、保持できるタグの種類は異なるので調べる必要があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;.\exiftool &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;s .\&lt;/span&gt;&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;実際のタグ名を併せてこっちを実行すると、タグの値が表示されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;.\exiftool &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;T &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-Orientation&quot;&lt;/span&gt;&lt;span&gt; .\&lt;/span&gt;&lt;span&gt;20220729234626.&lt;/span&gt;&lt;span&gt;webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えばこのように出力されます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 画像を回転させる前などの出力の一部（&quot;-exif:all&quot;）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ImageWidth                      : 2280&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ImageHeight                     : 1080&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 画像を回転させた後などの出力の一部（&quot;-exif:all&quot;）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ImageWidth                      : 1080&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ImageHeight                     : 2280&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 画像を回転させる前などの出力の一部（&quot;-Orientation&quot;が90度）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Rotate 90 CW&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 画像を回転させる前などの出力の一部（&quot;-Orientation&quot;が180度）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Rotate 180&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PowerShellでExifを編集して画像の向きを戻す方法を紹介しました。
本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;WebP形式に変換後の画像が正しい向きで表示されない問題&lt;/li&gt;
&lt;li&gt;PowerShellスクリプトで単体の画像を回転する方法（&lt;code&gt;System.Drawing.Image&lt;/code&gt;名前空間を使う。）&lt;/li&gt;
&lt;li&gt;複数枚の画像を一括回転する方法（&lt;code&gt;Register-ObjectEvent&lt;/code&gt;コマンドレットを使う。）&lt;/li&gt;
&lt;li&gt;回転情報が異なる場合の条件分岐の方法（Exiftoolライブラリを使う。）&lt;/li&gt;
&lt;li&gt;Exiftoolを使ったタグ編集とその留意点&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Exiftoolに関する記事は過去にも書きました。良ければ見てみて下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-edit-exif-of-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルのExif情報を任意の日付に編集する&lt;/div&gt;&lt;div&gt;PowerShell上でExiftoolを使って、画像ファイルのExif情報を編集し日付を一括変更する方法を紹介します。友人と共有した写真の日付設定をGoogleフォトで行うのは面倒ですが、これで簡単に整理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240605_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、これで画像を整理できる！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちなみに、画像の向きを変えるよりも、ファイルパスの操作が一番面倒だった・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】処理実行時のログファイルへの標準出力</title><link>https://endorphinbath.com/posts/powershell-stdout/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-stdout/</guid><description>PowerShellで標準出力とエラー出力をログファイルに記録する方法を解説しています。Out-FileやRegister-ObjectEventなどのコマンド活用により、ログ管理が可能になります。</description><pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はログを出していくのか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;処理をまとめるから、途中どこで処理がミスったかを見れるようにしよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;DOSとかPowerShellのログを取ります&lt;a href=&quot;#dosとかpowershellのログを取ります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;クラウドを使っていると、ログの取り方がスゴイ簡単なので、こういう作業って困らなかったんですけど・・・。&lt;/p&gt;&lt;p&gt;ローカルでコマンドプロンプトやらPowerShellやらを使って行う作業の場合はログを取るのが面倒で、全くログを取る機能を作っていなかったんですよね。そこで、作業をする時はコマンドを小分けにして今まで実行していました。そうして作業していると、途中でエラーとか発生した時にデバッグしやすかったし。&lt;/p&gt;&lt;p&gt;しかし、そのツールで最近バグが起こらなくなって、その小分けにしたコマンドやらスクリプトやらをチマチマ実行していくことの方が面倒くさくなってきました。なので、そのプロセスをまとめて、途中の実行ログをテキストに出力していくようにしていきたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;878&quot; src=&quot;/_astro/02.CzLjDGar_i3bAk.webp&quot; srcset=&quot;/_astro/02.CzLjDGar_1rWSFI.webp 640w, /_astro/02.CzLjDGar_Z1JOBAO.webp 750w, /_astro/02.CzLjDGar_6jiW7.webp 828w, /_astro/02.CzLjDGar_2ilG4.webp 1080w, /_astro/02.CzLjDGar_123SRm.webp 1280w, /_astro/02.CzLjDGar_i3bAk.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回はこの記事で扱ったスクリプトをまとめていこうと思います。ローカルに置いてある画像ファイルのExifを編集したり拡張子をWebpに変換するツールです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-edit-exif-of-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルのExif情報を任意の日付に編集する&lt;/div&gt;&lt;div&gt;PowerShell上でExiftoolを使って、画像ファイルのExif情報を編集し日付を一括変更する方法を紹介します。友人と共有した写真の日付設定をGoogleフォトで行うのは面倒ですが、これで簡単に整理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240605_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-convert-jpg-to-webp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う&lt;/div&gt;&lt;div&gt;PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/06/20240606_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ログファイルの文字コード指定&lt;a href=&quot;#ログファイルの文字コード指定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、文字コードを考えていきます。自分が欲しくない文字コードを取ってしまうと、ログファイルの中身がなんやら意味の分からない文字だらけのゴミになってしまいますね。
MS-DOSと、PowerShellで文字コードの指定の仕方を見ていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;MS-DOSの文字コード指定&lt;a href=&quot;#ms-dosの文字コード指定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;MS-DOS（Version 10.0.22631.4317）では、文字コードがデフォルトでANSIになります。Microsoft様が作った、Shift-JISに似たような文字コードですね。&lt;/p&gt;&lt;p&gt;ちなみに、MS-DOSのバージョンを確認するためには、コマンドプロンプトを起動して、&lt;code&gt;ver&lt;/code&gt;を実行して確認できます。&lt;/p&gt;&lt;p&gt;しかし今回は、UTF-8で統一していきたいと思います。こっちの方が化けにくいので。
そこで、DOSでリダイレクトする前にLANGという環境変数を設定していきます。こんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;setlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;:: Set UTF-8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;chcp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;65001&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;log_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;%date:~,&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;%%date:~&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%%date:~&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; ---------------------------------------------------------- &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Started: Z0-00_ready_folders.bat&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; 1-1_movie_escaping &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; 1-2_create_date_setting &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; 5_original_files &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;copy&lt;/span&gt;&lt;span&gt; /Y exiftool.exe .\1-1_movie_escaping &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;copy&lt;/span&gt;&lt;span&gt; /Y exiftool.exe .\1-2_create_date_setting &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Finished: Z0-00_ready_folders.bat&quot;&lt;/span&gt;&lt;span&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; ---------------------------------------------------------- &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;%logtxt%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;endlocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;chcp 65001&lt;/code&gt;というコマンドで、UTF-8で出力できるようにしたので、以下のような感じにテキストファイルに出力されました。65001はUTF-8、932がANSIになります。
ちなみに&lt;code&gt;echo;&lt;/code&gt;を実行すると改行文字のみの行が入力されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;Started: Z0-00_ready_folders.bat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A subdirectory or file 1-1_movie_escaping already exists.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A subdirectory or file 1-2_create_date_setting already exists.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A subdirectory or file 5_original_files already exists.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1 file(s) copied.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1 file(s) copied.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;Finished: Z0-00_ready_folders.bat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShellの文字コード指定&lt;a href=&quot;#powershellの文字コード指定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PowerShell（ver. 5.1.22621.4249）では、デフォルトでUTF-16 LEになります。&lt;/p&gt;&lt;p&gt;ちなみに、PowerShellのバージョンを確認するためには、PowerShellコンソールを起動して、&lt;code&gt;$PSVersionTable&lt;/code&gt;を実行すると「PSVersion」というフィールドで確認できます。&lt;/p&gt;&lt;p&gt;PowerShellでも出力する文字コードをUTF-8に指定します。ここで、リダイレクト出力（&amp;gt;や&amp;gt;&amp;gt;）だと文字コードがデフォルトのものから変更できないので、以下のコマンドを使います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;手段1：Out-File系コマンドレット（&lt;code&gt;Out-File&lt;/code&gt;で新規、&lt;code&gt;Out-File -Append&lt;/code&gt;で追記。）&lt;/li&gt;
&lt;li&gt;手段2：Content系コマンドレット（&lt;code&gt;Set-Content&lt;/code&gt;で新規、&lt;code&gt;Add-Content&lt;/code&gt;で追記。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらのコマンドレットの挙動の違いについては以下の記事に詳しくまとめられていますので、興味があれば参照下さい。ざっと俯瞰した表を、その記事にあったものから拝借させていただきます。&lt;/p&gt;&lt;p&gt;どちらのコマンドレットでもUTF-8を指定してファイルに出力することが出来ます。今回はContent系コマンドレットで作っていこうと思います。&lt;/p&gt;&lt;a href=&quot;https://tech.guitarrapc.com/entry/2014/02/11/061627&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://tech.guitarrapc.com/icon/favicon&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;tech.guitarrapc.cóm&lt;/span&gt;&lt;/div&gt;&lt;div&gt;PowerShellの Out-File と Set-Content あるいは Out-File -Append と Add-Content の違い - tech.guitarrapc.cóm&lt;/div&gt;&lt;div&gt;ファイルの連結について、いい記事があります。 あるファイルを別のファイルに連結させる 私が書くコードではSet-Content/Add-Contentを使わないです。が、なぜなのかを振り返るのもいいでしょう。 今回は、 Set-Content/Add-ContentとOut-File/Out-File -Appendの違いについてです。 まとめ 上書きと追記 書き込み方法の違い と NoClobber による上書き防止 上書き 上書き防止 Out-File -NoClobber -Force の併用 追記 Out-File -NoClobber -Append の併用 Write/Read ロ…&lt;/div&gt;&lt;div&gt;tech.guitarrapc.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.image.st-hatena.com/image/scale/d31762d4b5a0c17186ddef00ae8a6377f58d40af/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fg%2Fguitarrapc_tech%2F20140211%2F20140211051312.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;




















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;機能&lt;/th&gt;&lt;th&gt;Content&lt;/th&gt;&lt;th&gt;Out-File&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;上書き&lt;/td&gt;&lt;td&gt;Set-Content&lt;/td&gt;&lt;td&gt;Out-File&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;追記&lt;/td&gt;&lt;td&gt;Add-Content&lt;/td&gt;&lt;td&gt;Out-File -Append&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NoClobberスイッチ&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Write Lock&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Read Lock&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PowerShell 5.1 デフォルトEncoding&lt;/td&gt;&lt;td&gt;ASCII&lt;/td&gt;&lt;td&gt;UCS-2 Little Endian&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PowerShell 6以降 デフォルトEncoding&lt;/td&gt;&lt;td&gt;utf-8&lt;/td&gt;&lt;td&gt;utf-8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Encoding指定&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;InputObjectが空の場合のファイル作成&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PassThruスイッチ&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Credentialスイッチ&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Includeスイッチ&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Excludeスイッチ&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Filterスイッチ&lt;/td&gt;&lt;td&gt;O&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Transactionスイッチ&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ログファイルの名前&lt;a href=&quot;#ログファイルの名前&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、ログを溜めるファイルの名前を決めます。&lt;/p&gt;&lt;p&gt;日にちが入っていると良いですね。それでは実行した時の年月日がファイル名に入るようにしましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;MS-DOSにおける年月日取得&lt;a href=&quot;#ms-dosにおける年月日取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;MS-DOSでは、&lt;code&gt;%date%&lt;/code&gt;で現在の年月日を取得できる環境変数を参照することが可能です。2024年10月29日であれば「2024/10/29」が取得できます。&lt;/p&gt;&lt;p&gt;そして、その数字だけが欲しいので、以下のようにDOS上でフォーマットして、ファイル名としてローカル変数に格納します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;log_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;%date:~,&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;%%date:~&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%%date:~&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShellにおける年月日取得&lt;a href=&quot;#powershellにおける年月日取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PowerShellでは、&lt;code&gt;Get-Date&lt;/code&gt;コマンドレットで現在の日時を取得できる環境変数を参照することが可能です。2024年10月29日であれば「Tuesday, October 29, 2024 14:53:32」みたいに取得できます。&lt;/p&gt;&lt;p&gt;そして、その年月日の数字だけが欲しいので、以下のようにPowerShell上でフォーマットして、ファイル名としてローカル変数に格納します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;log_{0}.txt&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;).ToString(&lt;/span&gt;&lt;span&gt;&quot;yyyyMMdd&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;標準出力と標準エラー出力を一つのファイルに出力する&lt;a href=&quot;#標準出力と標準エラー出力を一つのファイルに出力する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;コマンド実行時に出てくる標準出力と標準エラー出力を、一つのファイルにまとめて出力したいと思います。&lt;/p&gt;&lt;p&gt;そのために、ファイルに追記する処理を作っていきたいと思います。そこで厄介なことになってきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;MS-DOS&lt;a href=&quot;#ms-dos&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;MS-DOSは特に厄介なことは起こりません。標準出力および標準エラー出力をまとめて出力するコマンドは1行で事足ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mkdir 5_original_files &amp;gt;&amp;gt; %logtxt% 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;mkdir 5_original_files&lt;/code&gt;を実行した時に、既にディレクトリが存在しているとエラーというか警告文的なものがコンソールに表示されます。このように書くと、その内容も含めてファイルに出力してくれるようになります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShell（Sart-Processを使おうとしたが・・・）&lt;a href=&quot;#powershellsart-processを使おうとしたが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PowerShellの場合は厄介です。&lt;/p&gt;&lt;p&gt;結局のところは、この記事で紹介されている方法を拝受させていただきました。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/syuuu/items/81092f1f783b76f2706b&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;powershell で外部プロセスを起動して標準出力・標準エラー出力を得る - Qiita&lt;/div&gt;&lt;div&gt;概要 PowerShell で 外部コマンドを実行して、エラーになったりするので、標準出力・標準エラー出力を取得できるようにします。 前提 PowerShell: 5.1 補足) $PSVersionTable コマンドを PowerShellのターミナルで叩くとバージ...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMzI2Nzk3JTJGcHJvZmlsZS1pbWFnZXMlMkYxNTQ4MjYwMDE0P2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz0xOWU4YTBiNDY0OWRhMDgzZGVkZDQxNTBlNDA1YTRlZg%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Db9e92ee2e27fd68df0e6f0ef52354f74?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9cG93ZXJzaGVsbCUyMCVFMyU4MSVBNyVFNSVBNCU5NiVFOSU4MyVBOCVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MiVCQiVFMyU4MiVCOSVFMyU4MiU5MiVFOCVCNSVCNyVFNSU4QiU5NSVFMyU4MSU5NyVFMyU4MSVBNiVFNiVBOCU5OSVFNiVCQSU5NiVFNSU4NyVCQSVFNSU4QSU5QiVFMyU4MyVCQiVFNiVBOCU5OSVFNiVCQSU5NiVFMyU4MiVBOCVFMyU4MyVBOSVFMyU4MyVCQyVFNSU4NyVCQSVFNSU4QSU5QiVFMyU4MiU5MiVFNSVCRSU5NyVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTQ5MmQyZWMxNGNmYmE0ZTZmYzc0M2NjMGY3OWNkYmJi&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBzeXV1dSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTYxYTQ0ZWEwNTAwNTBlN2E4ZDUzM2RkMzgwZWFjZmM3&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=45c572178b2cf617d5560e1039fbdc2d&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;当初は、&lt;code&gt;Start-Process&lt;/code&gt;コマンドレットの&lt;code&gt;-RedirectStandardOutput&lt;/code&gt;と&lt;code&gt;-RedirectStandardError&lt;/code&gt;のオプションで標準出力と標準エラーを出力しようと思ったのですが、このコマンドレットではファイルへの追記を行うことが出来ないので、今回は使いませんでした。&lt;/p&gt;&lt;p&gt;一応、ファイルの新規作成は可能なので、一時ファイルを作ってその内容を別のコマンドレットに渡してファイル出力するという方法は可能なのですが、この方法だとIOが発生して微かながらディスクを削ることになります。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;RedirectStandardOutput&lt;/code&gt;と&lt;code&gt;RedirectStandardError&lt;/code&gt;オプションに対して同じ文字列を入力するとシステムエラーになります。なので一時ファイルは2種類作る必要があります。（今回作るツールを100回実行すれば200回余計に削ることになります・・・。）&lt;/p&gt;&lt;p&gt;そこで、もう少し良い方法があるので、この&lt;code&gt;Start-Process&lt;/code&gt;コマンドレットはスルーで。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Start-Process (Microsoft.PowerShell.Management) - PowerShell&lt;/div&gt;&lt;div&gt;Start-Process コマンドレットは、ローカル コンピューターで 1 つ以上のプロセスを開始します。 既定では、Start-Process は、現在のプロセスで定義されているすべての環境変数を継承する新しいプロセスを作成します。 プロセスで実行するプログラムを指定するには、実行可能ファイルまたはスクリプト ファイル、またはコンピューター上のプログラムを使用して開くことができるファイルを入力します。 実行可能でないファイルを指定 Start-Process 場合は、Invoke-Item コマンドレットと同様に、ファイルに関連付けられているプログラムを起動します。 Start-Process のパラメーターを使用して、ユーザー プロファイルの読み込み、新しいウィンドウでのプロセスの開始、代替資格情報の使用などのオプションを指定できます。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShell（Register-ObjectEventを使う）&lt;a href=&quot;#powershellregister-objecteventを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;その代わりに、先ほどの記事で別の方法が紹介されています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Register-ObjectEvent&lt;/code&gt;コマンドレットで行うプロセスに関する情報を持ったオブジェクトをエンキューして、変数に出力を格納して、&lt;code&gt;Write-Host&lt;/code&gt;コマンドレットで別のコマンドレットに渡せるようにして下さっています。これでドライブではなくメモリを使うようになりました。ドライブが削られなくなって、処理も速くなることでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;878&quot; src=&quot;/_astro/04.xm_BtKHw_Zrrb84.webp&quot; srcset=&quot;/_astro/04.xm_BtKHw_Z1FC4zz.webp 640w, /_astro/04.xm_BtKHw_bLxVO.webp 750w, /_astro/04.xm_BtKHw_22UtuK.webp 828w, /_astro/04.xm_BtKHw_ZHc12k.webp 1080w, /_astro/04.xm_BtKHw_hyw8X.webp 1280w, /_astro/04.xm_BtKHw_Zrrb84.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ありがたく使わせていただきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Invoke-ExternalCommand&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$commandPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Creating process object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt; System.Diagnostics.Process&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Setting process invocation parameters.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.FileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$commandPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.Arguments&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.UseShellExecute&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.CreateNoWindow&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.UseShellExecute&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.RedirectStandardOutput&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.StartInfo.RedirectStandardError&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓↓↓ (3) 非同期書き込み&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Creating string builders to store stdout and stderr.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdOutBuilder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName System.Text.StringBuilder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdErrBuilder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName System.Text.StringBuilder&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Adding event handers for stdout and stderr.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (! [&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;]::IsNullOrEmpty($EventArgs&lt;/span&gt;&lt;span&gt;.Data&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$Event&lt;/span&gt;&lt;span&gt;.MessageData.AppendLine&lt;/span&gt;&lt;span&gt;($EventArgs&lt;/span&gt;&lt;span&gt;.Data&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdOutEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Register-ObjectEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;InputObject &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Action &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;EventName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;OutputDataReceived&apos;&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;MessageData &lt;/span&gt;&lt;span&gt;$oStdOutBuilder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oStdErrEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Register-ObjectEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;InputObject &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Action &lt;/span&gt;&lt;span&gt;$sScripBlock&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;EventName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ErrorDataReceived&apos;&lt;/span&gt;&lt;span&gt; `&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;MessageData &lt;/span&gt;&lt;span&gt;$oStdErrBuilder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Starting process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Void&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pinfo.Start&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.BeginOutputReadLine&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.BeginErrorReadLine&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Void&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$pinfo.WaitForExit&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↑↑↑&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unregistering events to retrieve process output.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unregister-Event&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;SourceIdentifier &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdOutEvent.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Unregister-Event&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;SourceIdentifier &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdErrEvent.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;New-Object&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;TypeName PSObject &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Property ([&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Ordered&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;ExitCode&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pinfo.ExitCode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stdout&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdOutBuilder.ToString&lt;/span&gt;&lt;span&gt;().Trim();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stderr&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$oStdErrBuilder.ToString&lt;/span&gt;&lt;span&gt;().Trim();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pinfo.Dispose&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;しかし、ここで一つ解せなかったのが、&lt;code&gt;System.Diagnostics.Process.Arguments&lt;/code&gt;の部分です。&lt;/p&gt;&lt;p&gt;このオブジェクトのそのプロパティでは文字列を格納することが出来るのですが、同じく引数を格納することが出来るプロパティ「&lt;code&gt;System.Diagnostics.Process.ArgumentList&lt;/code&gt;」があるのでそちらを使いたかったのですが、なぜか「このオブジェクトにプロパティ’ArgumentList’が存在しません」と表示されてエラーになります。
&lt;img loading=&quot;lazy&quot; width=&quot;938&quot; height=&quot;136&quot; src=&quot;/_astro/21.euqwgsUa_Z7BYLR.webp&quot; srcset=&quot;/_astro/21.euqwgsUa_2krYKf.webp 640w, /_astro/21.euqwgsUa_ZvquL.webp 750w, /_astro/21.euqwgsUa_Z1v1u9B.webp 828w, /_astro/21.euqwgsUa_Z7BYLR.webp 938w&quot; /&gt;&lt;/p&gt;&lt;p&gt;間違いなく存在するはずなのに・・・PowerShellの謎・・・。&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.processstartinfo.argumentlist?view=netstandard-2.1&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ProcessStartInfo.ArgumentList プロパティ (System.Diagnostics)&lt;/div&gt;&lt;div&gt;アプリケーションの起動時に使用するコマンド ライン引数のコレクションを取得します。 リストに追加された文字列は、以前にエスケープする必要はありません。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/en-us/media/open-graph-image.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShell（Write-HostではなくWrite-Outputを使う）&lt;a href=&quot;#powershellwrite-hostではなくwrite-outputを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Register-ObjectEvent&lt;/code&gt;でジョブを登録して、実行が終わったジョブを&lt;code&gt;Unregister-Event&lt;/code&gt;で破棄する。
そんな処理をしている先程のInvoke-ExternalCommandを実行する部分をさらにまとめます。Edit-Exifという関数を作って、実行部分とログ出力部分の双方をまとめました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Edit-Exif&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$workingPath&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$argumentArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cd &lt;/span&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$argumentArray&lt;/span&gt;&lt;span&gt; -join &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$strCmd&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\exiftool&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;+ &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;strCmd&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;argumentArray&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;) | &lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;..\&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$oResult&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-ExternalCommand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$strCmd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$arguments&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult.stdout&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;..\&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult.stdout&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult.stderr&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;BackgroundColor DarkRed;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$oResult.stderr&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;..\&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このInvoke-ExternalCommandを呼び出す部分で、紹介した記事では&lt;code&gt;Write-Host&lt;/code&gt;のみが使用されていましたが、そのコマンドレットですとファイルに出力することが出来ません。&lt;/p&gt;&lt;p&gt;そのため、&lt;code&gt;Write-Host&lt;/code&gt;ではなく&lt;code&gt;Write-Output&lt;/code&gt;を使います。（ちなみに、久し振りにPowerShellを触った僕はここで沼りました・・・。）&lt;/p&gt;&lt;p&gt;例えば、このような出力がコンソールで流されている場合・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1107&quot; height=&quot;544&quot; src=&quot;/_astro/22.Bb2c2fKP_2b3GDC.webp&quot; srcset=&quot;/_astro/22.Bb2c2fKP_ZoX0kn.webp 640w, /_astro/22.Bb2c2fKP_TR1ld.webp 750w, /_astro/22.Bb2c2fKP_rA7KW.webp 828w, /_astro/22.Bb2c2fKP_1qhBhD.webp 1080w, /_astro/22.Bb2c2fKP_2b3GDC.webp 1107w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このようにテキストファイルの中に出力されるようになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1-1_movie_escaping ++++++++++++++++++++++++++++++++&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Edit-Exif Started ++++++++++++++++&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;+ .\1-1_movie_escaping\exiftool -CreateDate&amp;lt;FileModifyDate -d %Y:%m:%d:%H:%M:%S .\1-1_movie_escaping&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1 directories scanned&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1 image files updated&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Warning: [Minor] Extracted only 1000 xmpMM:Pantry items. Ignore minor errors to extract all - ./1-1_movie_escaping/ROG_Content_01_Face_MB.mp4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Warning: [minor] Excessive number of items for xmpMM:Pantry. Processing may be slow - ./1-1_movie_escaping/ROG_Content_01_Face_MB.mp4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Edit-Exif Ended ++++++++++++++++&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Move-Itemの結果を-PassThruオプションで表示&lt;a href=&quot;#move-itemの結果を-passthruオプションで表示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして色々と処理を進めていくと、ファイルを動かすことが出てきます。&lt;/p&gt;&lt;p&gt;その際に、&lt;code&gt;Move-Item&lt;/code&gt;コマンドレットで動かしますが、それで動かされたファイル名を一覧で把握したいです。&lt;/p&gt;&lt;p&gt;そこで、&lt;code&gt;-PassThru&lt;/code&gt;オプションを記載して、ファイル書き込み用の&lt;code&gt;Add-Content&lt;/code&gt;コマンドレットにファイルを渡します。&lt;code&gt;Out-File -Append&lt;/code&gt;のコマンドレットには&lt;code&gt;-PassThru&lt;/code&gt;オプションを使えないらしいので、今回はこのようにしました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path .\&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;_original &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;.\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path .\&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;.\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Move-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path .\&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.png &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Destination .\5_original_files &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Add-Content&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;.\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logtxt&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding utf8;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、以下のようにファイルに出力されます。
これで何かしらの問題が発生したファイルを把握することが可能になります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024052618.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024134337.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024134555.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024152547.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024195148.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022144.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022221.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022306.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022442.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027170510.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241028214610.webp_original&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024052618.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024134337.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024134555.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024152547.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241024195148.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022144.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022221.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022306.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027022442.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241027170510.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\*******\Downloads\picture_backup\5_original_files\20241028214610.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PowerShellおよびMS-DOSで、ファイルに実行ログを残す方法を書いてみました。
以下がまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;文字コード指定&lt;/strong&gt;：&lt;code&gt;chcp 65001&lt;/code&gt;や、&lt;code&gt;Out-File&lt;/code&gt;、&lt;code&gt;Set-Content&lt;/code&gt;でUTF-8を設定する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ログファイル名&lt;/strong&gt;：&lt;code&gt;%date%&lt;/code&gt;や、&lt;code&gt;Get-Date&lt;/code&gt;コマンドレットで実行日時をファイル名に反映する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;出力の一元化&lt;/strong&gt;：&lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt;や、&lt;code&gt;Register-ObjectEvent&lt;/code&gt;、&lt;code&gt;Write-Output&lt;/code&gt;で標準出力・エラー出力をまとめる。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ファイル移動ログ&lt;/strong&gt;：&lt;code&gt;Move-Item&lt;/code&gt;と&lt;code&gt;PassThru&lt;/code&gt;でファイル移動を確認する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;外部ファイルからの標準ログと標準エラーログも出すとなると少し面倒になりました。&lt;/p&gt;&lt;p&gt;ログを出力できるようにすれば、より大きな処理も安心して動かすことが出来ますね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;色々な仕様があって厄介だったな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;クラウドのロガーってスゴイ便利だったんだな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【2024年版】個人的な一体型スピーカーランキングと簡素なレビュー</title><link>https://endorphinbath.com/posts/ranking-2024-of-integrated-speakers/</link><guid isPermaLink="true">https://endorphinbath.com/posts/ranking-2024-of-integrated-speakers/</guid><description>2024年に僕が試聴した「一体型スピーカー」にランキング付けをして、簡単なレビューと商品紹介をする記事です。Fender Audio RIFFや、Anker Soundcore Motion X600などが上位です。</description><pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スピーカーが欲しいぞ～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は一体型にしてみよう。机の上がスッキリする。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回選ぶスピーカーのタイプ&lt;a href=&quot;#今回選ぶスピーカーのタイプ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回選ぶスピーカーのタイプは、主に「一体型スピーカー」で「AUX出力に対応している」ものです。
「一体型スピーカー」という定義は、スピーカーが左右に分かれておらず、サウンドバーほどの長さではないものを指すこととします。
左右に分かれているスピーカーは、例えばこんなもの。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4ehKXec&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;FUNLOGY Speaker（スピーカー/PCスピーカー）【VGP2024受賞】総合14W / ステレオスピーカー/USB給電/重低音/AUX / 3.5mmピン入力【日本ブランド】 (ブラック)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4ehKXec&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;サウンドバーといえば、例えばこんなもの。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4f9vv4j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ソニー(SONY) サウンドバー HT-S100F 【100W/ハイパワー/フロントサラウンドサウンド/テレビ用/Bluetooth対応】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4f9vv4j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なぜ「一体型スピーカー」なのか&lt;a href=&quot;#なぜ一体型スピーカーなのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「一体型スピーカー」を選ぶ理由としては、2点あります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;スピーカーが1つにまとまってるので持ち運びが楽。&lt;/li&gt;
&lt;li&gt;横に広すぎるとスペース的に邪魔。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回選ぶスピーカーはそもそも、PCのスピーカーとしての用途が最も大きいです。そして、普段使用するPC周りにどんどんホコリが溜まっていくのは見苦しいので、定期的に掃除したいです。
その際に、持ち運ぶスピーカーが2つに分かれていて尚且つケーブルで繋がっていると、なんとも掃除をするのが億劫になってしまいます。そのため、ホコリが溜まるような場所に置きっぱなしにしておくようなスピーカーは、1つになっている方がキレイな状態を保ちやすいと思いました。
そして、そのPC周りに置くスピーカーとしては、サウンドバーはスペースを占拠し過ぎな気がします。
例えば、このテンキーレスキーボードと先程のサウンドバーの幅を比較してみます。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49y0R3y&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;エレコム USB キーボード ワイヤレス (レシーバー付属) メンブレン コンパクトキーボード ブラック TK-FDM105TXBK&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49y0R3y&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;サウンドバー・・・幅90cm x 奥行8.8cm x 高さ6.4cm&lt;/li&gt;
&lt;li&gt;テンキーレスキーボード・・・幅36.43cm x 奥行15.08cm x 高さ3.35cm&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;なんと、サウンドバーの幅は、テンキーレスキーボードの2倍以上あります・・・。
そんなに長いものがPC用のモニターの下に置いてあるとすると、マウスを動かすスペースが減ってしまいます。（まあ、トラックボールを使うのであれば問題ないですが、ゲームをする人はトラックボールはあまり使いませんよね。）PCモニターの上に台を設置する必要が出てきてしまいます。
そのため、幅はあまり席巻しないようなスピーカーが欲しい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なぜ「AUX出力に対応している」必要があるのか&lt;a href=&quot;#なぜaux出力に対応している必要があるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「AUX出力に対応している」必要がある理由としては、2点あります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;電池の持続時間が長い。&lt;/li&gt;
&lt;li&gt;音質が良い。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ちなみに、「AUX」は「Auxiliary」の略らしく、「補助」「予備」などの意味があるらしいです。自分は勝手に「AUdio eXtension」の略だとか予想していましたがそうではないようです。&lt;/p&gt;&lt;p&gt;今回選ぶスピーカーはそもそも、PCのスピーカーとして利用します。なので、電池の持続時間は長い方が好ましいです。PCの使用中にいつの間にか音が鳴らなくなっているのはイヤですからね。&lt;/p&gt;&lt;p&gt;また、「電源コンセントに繋ぎっぱなしで良いのではないか？」という考えもありましたが、「一体型スピーカー」のジャンルのスピーカーは、持ち運べるように製品設計がされている場合が殆どですので、過充電によってそのポータブル機能を損なうことは出来るだけ避けたいです。なので、Bluetooth等で無碍に電池を消費したくない。&lt;/p&gt;&lt;p&gt;そして、Bluetooth等の無線接続よりも、AUX等の有線接続の方がもちろんスピーカーから出てくる音の音質は良くなります。重ねてDACを挟んだ有線接続と、無線接続では音質は全くの別物です。&lt;/p&gt;&lt;p&gt;また、AUX端子に繋ぐもの以外に、バイワイヤリング対応端子に繋ぐスピーカーもありますが、そちらの方はよりお値が張りますし、そんなに色々なケーブルをPC周りに張り巡らしてしまうと、これまた掃除をするのが億劫になってしまいます。&lt;/p&gt;&lt;p&gt;なので、電池の消費が少なく音質も良い有線接続の中でも、「AUX出力」対応のスピーカーが良いと思いました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ランキングを付ける。&lt;a href=&quot;#ランキングを付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、「一体型スピーカー」で「AUX出力に対応している」スピーカーの中で、実際に聴き比べてみてランキングを付けてみました。（ちなみにAUXの直径は3.5mmとします。）
この聴き比べたランキングは完全に主観で決めたものですので、参考の一つにして下さい。&lt;/p&gt;








































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Rank&lt;/th&gt;&lt;th&gt;特徴&lt;/th&gt;&lt;th&gt;バッテリー寿命&lt;/th&gt;&lt;th&gt;防水性&lt;/th&gt;&lt;th&gt;幅&lt;/th&gt;&lt;th&gt;奥行&lt;/th&gt;&lt;th&gt;高さ&lt;/th&gt;&lt;th&gt;重量(g)&lt;/th&gt;&lt;th&gt;価格(2024-11-09調べ)&lt;/th&gt;&lt;th&gt;色&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Fender Audio RIFF&lt;/td&gt;&lt;td&gt;最大30時間&lt;/td&gt;&lt;td&gt;IP54&lt;/td&gt;&lt;td&gt;270&lt;/td&gt;&lt;td&gt;136&lt;/td&gt;&lt;td&gt;123&lt;/td&gt;&lt;td&gt;2,370&lt;/td&gt;&lt;td&gt;76,780&lt;/td&gt;&lt;td&gt;黒&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Anker Soundcore Motion X600&lt;/td&gt;&lt;td&gt;最大12時間&lt;/td&gt;&lt;td&gt;IPX7&lt;/td&gt;&lt;td&gt;310&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;170&lt;/td&gt;&lt;td&gt;1,930&lt;/td&gt;&lt;td&gt;24,990&lt;/td&gt;&lt;td&gt;黒、青、緑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;DENON HOME 350&lt;/td&gt;&lt;td&gt;電源&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;380&lt;/td&gt;&lt;td&gt;229&lt;/td&gt;&lt;td&gt;180&lt;/td&gt;&lt;td&gt;6,700&lt;/td&gt;&lt;td&gt;55,277&lt;/td&gt;&lt;td&gt;黒、白&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Fender Audio NEWPORT 2&lt;/td&gt;&lt;td&gt;12時間&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;184&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;133&lt;/td&gt;&lt;td&gt;1,500&lt;/td&gt;&lt;td&gt;27,960&lt;/td&gt;&lt;td&gt;赤、黒（4色）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Marshall Middleton&lt;/td&gt;&lt;td&gt;20時間&lt;/td&gt;&lt;td&gt;IP67&lt;/td&gt;&lt;td&gt;230&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;109&lt;/td&gt;&lt;td&gt;1,800&lt;/td&gt;&lt;td&gt;43,000&lt;/td&gt;&lt;td&gt;黒、クリーム&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Anker Soundcore Motion+&lt;/td&gt;&lt;td&gt;最大12時間&lt;/td&gt;&lt;td&gt;IPX7&lt;/td&gt;&lt;td&gt;257&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;1,050&lt;/td&gt;&lt;td&gt;9,999&lt;/td&gt;&lt;td&gt;黒、赤、青&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;TRANSPARENT Small Transparent Speaker&lt;/td&gt;&lt;td&gt;電源&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;268&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;203&lt;/td&gt;&lt;td&gt;3,000&lt;/td&gt;&lt;td&gt;74,574&lt;/td&gt;&lt;td&gt;黒、白、メタル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;Tivoli Audio Model One BT&lt;/td&gt;&lt;td&gt;電源&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;213&lt;/td&gt;&lt;td&gt;134&lt;/td&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;1,900&lt;/td&gt;&lt;td&gt;37,400&lt;/td&gt;&lt;td&gt;茶色、灰色など（6色）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;TOSHIBA Tribit XSound Mega&lt;/td&gt;&lt;td&gt;20時間&lt;/td&gt;&lt;td&gt;IPX7&lt;/td&gt;&lt;td&gt;247&lt;/td&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;965&lt;/td&gt;&lt;td&gt;11,990&lt;/td&gt;&lt;td&gt;黒&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Victor SP-WS02BT&lt;/td&gt;&lt;td&gt;12時間&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;208&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;820&lt;/td&gt;&lt;td&gt;17,660&lt;/td&gt;&lt;td&gt;茶色&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10位：Victor SP-WS02BT&lt;a href=&quot;#10位victor-sp-ws02bt&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Victorの「SP-WS02BT」は、木製の筐体で作られています。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/K0001583892/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;JVC Victor SP-WS02BT ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;2�E�F�C�X�s�[�J�[�ŏd���ȃX�e���I�T�E���h�ƖL���ȉ��y��Ԃ��y���߂�|�[�^�u�����C�����X�X�s�[�J�[�B�Ў�ŉ^�ׂ�R���p�N�g�T�C�Y�BJVC Victor SP-WS02BT�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;連続再生可能時間は12時間、奥行きと高さが80mmほどであまりスペースを取らずに済みそうです。&lt;/p&gt;&lt;p&gt;そして、スピーカー部分には、ウーファーとツィーター、大型パッシブラジエーターを搭載しているとのこと。&lt;/p&gt;&lt;p&gt;聞いてみた感想としては、ウーファーとツィーターを搭載しているので、低域と高域どちらかへの偏りは少なくバランスの良い音でした。しかし、音の重さといったものが少なく、少し籠りがちな印象も受けました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9位：Tribit XSound Mega&lt;a href=&quot;#9位tribit-xsound-mega&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「VGP2022 SUMMER」という、オーディオビジュアル機器の魅力を熟知した評論家と全国の有力販売店によるアワード的なもので、金賞を受賞したスピーカーのようです。&lt;/p&gt;&lt;a href=&quot;https://search.kakaku.com/4582501584105/?sort=priceb&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;search.kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;search.kakaku.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;search.kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;低音を強調したい時に「X-bassモード」、低音域から高音域までバランス良く聴きたい時には「音楽モード」、オーディオブックやPodcastの音声を聴く時は「オーディオブック（Audiobook）モード」を設定して、自分のライフスタイルによって音質を変化させることが出来るようです。&lt;/p&gt;&lt;p&gt;楽曲を聴く時は、出力が30W対応で少しパワーが弱めかもしれません。しかし、前述の多機能さを兼ね備えていることを考慮すると、かなりコスパが良いスピーカーだと思いました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8位：Tivoli Audio Model One BT&lt;a href=&quot;#8位tivoli-audio-model-one-bt&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Victorの「SP-WS02BT」と同じく、木製の筐体で作られています。
と思いきや、カラバリは、Walnut / Beige、Cherry / Silver、Black Ash / Silver、White / Silver、Black Ash / Black Silver、Oak / Black / Blackの6色があります。このスピーカーを選んだら、どの部屋の内装にも合わせることが出来るかもしれません。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/K0001428003/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Tivoli Audio Model One BT [�I�[�N/�u���b�N] ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;Tivoli Audio Model One BT [�I�[�N/�u���b�N]�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーは、ポータブルのものではなく電源に繋いで動かすタイプです。&lt;/p&gt;&lt;p&gt;音質としては、そもそものスピーカーから音が出てくる穴が1つしか無いので、あまり音に広がりが無かったところが微妙でした。しかしながら、ポート（底面に開けられた穴）から取り出される音もある、バスレフ型スピーカーらしいので、底面の空間をどう形作るかによって低音の再生がもっと豊かなものになるかもしれません。（店頭で聞くとその部分は試せないのが難しいところですね。）&lt;/p&gt;&lt;p&gt;ちなみにこのスピーカーは、ラジオを聞くことも可能です。FMとAMで切り替えられて、アンテナもくっ付いています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7位：TRANSPARENT Small Transparent Speaker&lt;a href=&quot;#7位transparent-small-transparent-speaker&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これまた珍しい外観で、アルミニウムフレームと強化ガラスで構成されているため、筐体が透明になっているスピーカーです。今まで紹介した木製の筐体とは一味違ったインテリアになりそうです。
カラーバリエーションは、その筐体のフレームで分けられていて、黒と白とメタルがあります。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/J0000041396/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;TRANSPARENT SMALL TRANSPARENT SPEAKER ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;�A���~�j�E���t���[���Ƌ����K���X�ō\�����ꂽ�A�������ē�����Bluetooth�X�s�[�J�[�BTRANSPARENT SMALL TRANSPARENT SPEAKER�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;底面には、色々なワイヤレス接続するためのコンパートメントなるものが格納されています。これで、Wi-Fi経由で他のデバイスと音楽再生を共有したり、Alexaと紐付けることも可能なようです。&lt;/p&gt;&lt;p&gt;そして音質としては、低音域と比べて高音域が少し弱めな気がしました。それから少し籠もる感じもしました。ガラスが筐体だとそんな感じの音の質感になるわけですか。しかしながら、筐体がガラスのスピーカーは少ないので、その中では候補として上に上がってきそうな感じはしました。&lt;/p&gt;&lt;a href=&quot;https://store.navys.jp/products/tp-stp&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://store.navys.jp/cdn/shop/files/mhdkq-zc0vv_32x32.png?v=1633409081&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NAVYS STORE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Small Transparent Speaker / スモール トランスペアレント スピーカー 公式通販 | ストックホルム発&lt;/div&gt;&lt;div&gt;抜群のデザイン性を誇るストックホルム発『透明なサスティナブルBluetoothスピーカー/ Small Transparent SpeakerR』の公式通販サイト&lt;/div&gt;&lt;div&gt;store.navys.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://store.navys.jp/cdn/shop/files/Conies_STS-W_1.jpg?v=1773131110&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;6位：Anker Soundcore Motion+&lt;a href=&quot;#6位anker-soundcore-motion&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ankerの「Soundcore Motion+」は、AUX接続が出来て完全防水のスピーカーです。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/K0001159913/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ANKER Soundcore Motion+ A3116011 ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;aptX�ƃn�C���]�Ή��ɂ�荂�i���ȃT�E���h�����������h��Bluetooth�X�s�[�J�[�B50Hz����40kHz�܂ŕ��L�����g���тɑΉ��BANKER Soundcore Motion+ A3116011�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーは、高さ81mm、奥行き79mmと、コンパクトな部類です。しかしながら、ハイレゾ対応で、BassUpテクノロジーによって、低音をより力強く鮮明に響かせているようです。そして、2つのネオジウムウーファーと2つのパッシブラジエーターを搭載しているようです。&lt;/p&gt;&lt;p&gt;聴いた所感としては、1万円を切る値段でこの音質はとてもコスパが良いと思いました。屋外でくつろいでいる傍で鳴らすには少し物足りない感じがしますが、室内ではアリなスピーカーだと思います。&lt;/p&gt;&lt;p&gt;ちなみにスマホで再生すれば、イコライザーや音量をアプリから変更することも可能なようです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5位：Marshall Middleton&lt;a href=&quot;#5位marshall-middleton&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次は、Marshallから「Middleton」です。
カラバリは、Black and Brass、Creamの2色です。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/J0000041922/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Marshall Middleton ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;�����A�E�g�h�A�ŋC�y�Ɏ����^�ׂ�|�[�^�u���X�s�[�J�[�B�N�A�b�h�h���C�o�[�݌v�ɂ��A�[���v������̌��ł���BMarshall Middleton�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーには、76.2mm 15Wウーファー×2 、15.24mm 10Wツイーター×2 、76.2mm パッシブラジエーター×2が搭載されているようです。&lt;/p&gt;&lt;p&gt;聴いてみた所感としては、高音の部分の押しが少し弱いかなあと感じました。低音の部分はとても良いです。ヘビメタを聴く人にはかなり向いているスピーカーだと思います。低音域が強めなので、少し音が籠りがちな感じがしました。&lt;/p&gt;&lt;p&gt;また、本体上面にある「BASS」と「TREBLE」ボタンで、エフェクトをいじれます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4位：Fender Audio NEWPORT 2&lt;a href=&quot;#4位fender-audio-newport-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Fender Audio NEWPORT 2」は、幅180mmで一体型スピーカーの中でも小柄な部類に入ります。そこを補っているためか高さはあるので、正方形のシルエットになっています。
カラバリは、Black/Gold、Black/Gunmetal、Red/Gold、Red/Gunmetalの4色です。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/J0000041265/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;FENDER Fender Audio NEWPORT 2 ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;30W�̋��͂ȃp���[�A�_���2�o���hEQ�ABluetooth 5.0�ڑ��������Bluetooth�X�s�[�J�[�BFENDER Fender Audio NEWPORT 2�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そんな小柄な筐体の中に、ウーファー2基、ツイーター1基が内蔵されています。サイズが小さいので、パワー不足が少し心配でしたが、籠る感じが少なく高音域も低音域もバランスよく聴くことが出来て、このコンパクトさで素晴らしい音質で再生してくれるスピーカーでした。&lt;/p&gt;&lt;p&gt;またこのスピーカーも、本体上面にある「BASS」と「TREBLE」ボタンで、エフェクトをいじれます。ちなみに、スピーカー内臓のマイクで、ハンズフリー通話も可能なようです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3位：DENON HOME 350&lt;a href=&quot;#3位denon-home-350&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次はDenonのスピーカーです。重量が6,700gでパワフルな音が楽しめます。
黒と白で2色のカラバリがあります。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/J0000039707/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;DENON DENON HOME 350 ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;���E��20mm�c�C�[�^�[��50mm�~�b�h�����W�E�h���C�o�[��z�u�����X�e���I�E�X�}�[�g�X�s�[�J�[�B�O���165mm�̃T�u�E�[�n�[�𓋍ڂ��Ă���BDENON DENON HOME 350�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーには、20mm ドームツイーター×2、50mm ミッドレンジ×2、165mm サブウーファー×2が備わっているので、そりゃあ音質は良いですよね。力強い音が鳴ります。&lt;/p&gt;&lt;p&gt;おまけに、Amazon Music HD / AWA / Spotify / SoundCloudなどのストリーミングサービスと連携することが可能で、Alexaも搭載している充実っぷり。これはかなりの高性能スピーカーが出てきました。&lt;/p&gt;&lt;p&gt;・・・しかし、ただ単にPCのスピーカーとして利用するだけなので、そこまで多彩な機能は必要ありません。確かに音質はかなり良かったですが、そこまでの余剰な機能に対してお金は払いません・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2位：Anker Soundcore Motion X600&lt;a href=&quot;#2位anker-soundcore-motion-x600&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして次に、Ankerの「Soundcore Motion X600」です。こちらのカラーバリエーションは、黒、青、緑の3色です。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/J0000042966/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ANKER Soundcore Motion X600 ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;ANKER Soundcore Motion X600�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーは、「空間オーディオ」に対応していて、スピーカー自体の幅はそれほど突出しているわけではないにも拘らず、広がりのある音を再生してくれます。通常の再生と「空間オーディオ」再生で切り替えることが可能です。&lt;/p&gt;&lt;p&gt;低音域と高音域を聴き比べてみて、少し高音が弱い印象を受けましたが、その空間オーディオ状態にすると、高音も低音も伸びのある音へと生まれ変わりました。
ワイヤレス対応ながら、ハイレゾ音源再生にも対応しているようです。臨場感のある音楽体験が楽しめそうです。&lt;/p&gt;&lt;p&gt;また、「Anker Soundcore Motion+」と同様に、スマホで再生すればアプリからイコライザーや音量を操作できるみたいです。
あと、取っ手も付いていて持ち運びやすそうです。これはかなり実用性が高そう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1位：Fender Audio RIFF&lt;a href=&quot;#1位fender-audio-riff&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回試聴してみて1位に選んだのが、Fenderの「Audio RIFF」です。カラバリは黒のみです。&lt;/p&gt;&lt;a href=&quot;https://kakaku.com/item/K0001547390/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://img1.kakaku.k-img.com/images/favicon/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;kakaku.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;FENDER Fender Audio RIFF ���i��r - ���i.com&lt;/div&gt;&lt;div&gt;FENDER Fender Audio RIFF�̍ň��l�������悤�I�S���e�n�̂��X�̉��i��񂪃��A���^�C���ɂ킩��͉̂��i.com�Ȃ�ł́B���i���r���[��N�`�R�~������܂��B&lt;/div&gt;&lt;div&gt;kakaku.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このスピーカーには、ウーファーx2、ツィーターx2、バスラジエーターx2が搭載されています。そりゃあ、さぞ良い音質なのでしょう。
ということで、聴いてみた音質が・・・、すばらしかったです・・・。低音域の重いパンチ、そして高音域の壮大な癒やし、これはとんでもないスピーカーと出会ってしまいました。&lt;/p&gt;&lt;p&gt;店頭で隣に置いてあった「Fender Audio NEWPORT 2」と聴き比べていましたが、最も明確な差を感じたのが高音域です。高音の伸びが明らかに違います。ここがこの商品を購入した決め手な気がします。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;768&quot; src=&quot;/_astro/31.BqqZk4VS_2t07xy.webp&quot; srcset=&quot;/_astro/31.BqqZk4VS_ZTIbsX.webp 640w, /_astro/31.BqqZk4VS_Wxm4Q.webp 750w, /_astro/31.BqqZk4VS_u8nw1.webp 828w, /_astro/31.BqqZk4VS_2t07xy.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;（なんと買ってしまいました・・・。）&lt;/p&gt;&lt;p&gt;また、このスピーカーも、本体上面にある「BASS」と「TREBLE」ボタンで、エフェクトをいじれます。&lt;/p&gt;&lt;p&gt;それに加えて、「パーティーモード」という機能を搭載しているらしく、最大100台のRIFFスピーカーをワイヤレスで接続可能らしいです。まあ、このスピーカー、3.5mm AUX端子に加えて、7mm AUX端子にも対応しているので、ギターをこのスピーカーに繋いでちょっとしたライブをすることも可能みたいです・・・。強すぎる・・・。&lt;/p&gt;&lt;p&gt;なんでそんな強いのかというと、このスピーカーを動かす時には、60W以上の電力が使用されているらしいです。今まで紹介してきたスピーカーの殆どは30Wの電力で動くものなので、そもそも使用しているエネルギーが2倍なわけですね。&lt;/p&gt;&lt;p&gt;なので、このスピーカーを充電するためには、15V/3A 以上の出力のUSB-Cアダプタが必要になります。僕が使っている15V/3A 以上の充電アダプタは、例えばAnkerの「735 Charger(GaNPrime 65W)」です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4fdgG0q&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Anker 735 Charger (GaNPrime 65W) (USB PD 充電器 USB-A &amp;amp; USB-C 3ポート) (ブラック)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4fdgG0q&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;スピーカーが入っていた箱もなんだか良さげでした。べた褒めですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;768&quot; src=&quot;/_astro/36.DuENFUYF_2xTOU.webp&quot; srcset=&quot;/_astro/36.DuENFUYF_txehz.webp 640w, /_astro/36.DuENFUYF_2lNLPo.webp 750w, /_astro/36.DuENFUYF_1SoNhy.webp 828w, /_astro/36.DuENFUYF_2xTOU.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事では、僕が2024年に試聴したスピーカーをランキング付けして、簡単なレビューと商品紹介をしました。
この記事がスピーカー選びの参考になればいいなと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、良き音質・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは良くなってくるぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Google AI Studioの使い方。Geminiと比較してみた。</title><link>https://endorphinbath.com/posts/how-to-use-google-ai-studio/</link><guid isPermaLink="true">https://endorphinbath.com/posts/how-to-use-google-ai-studio/</guid><description>Google AI Studioで利用できるAIモデルおよびプロンプトの過程を紹介しています。Geminiプラットフォームとの比較、APIキー経由でGASを使ってプロンプトしたりもしています。</description><pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ、こんな簡単になったんだ～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スゴイ開発しやすくなったね&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;最近、生成AIを使っていなかったもので・・・&lt;a href=&quot;#最近生成aiを使っていなかったもので&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;気が付いたら、生成AI周りのツールがスゴイ使いやすくなってそうですね！
特に大規模言語モデルの領域は全然違う感じがします。
なので、今回は初めてGoogle AI Studioを使うための手順と、その他のAIツールと比較していきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google AI Studioとは？&lt;a href=&quot;#google-ai-studioとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Google AI Studio」は、Googleが開発した大規模言語モデル（LLM）である「Gemini」や「Gemma」などの機能を手軽に試せるように設計されたプラットフォームです。
Google AI Studioを利用するメリットは主に以下になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;コードを書かなくてもAIモデルを構築可能。&lt;/li&gt;
&lt;li&gt;AIモデルのAPIを利用できるようになる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;また、2024-10-28時点で、無料枠で利用できるAIモデルは以下のとおりです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Gemini 1.5 Pro 002&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Pro&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Flash&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Flash-02&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Flash-8B&lt;/li&gt;
&lt;li&gt;Gemma 2 2B&lt;/li&gt;
&lt;li&gt;Gemma 2 9B&lt;/li&gt;
&lt;li&gt;Gemma 2 27B&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Pro Experimental 0827&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Flash Experimental 0827&lt;/li&gt;
&lt;li&gt;Gemini 1.5 Flash 8B Experimental 0924&lt;/li&gt;
&lt;li&gt;Gemini 1.0 Pro&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;使ってみる&lt;a href=&quot;#使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使ってみます。適当にブラウザで「google ai studio」と検索して、Google AI Studioを開きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/11_01.CiU58onf_87AoR.webp&quot; srcset=&quot;/_astro/11_01.CiU58onf_2vJSAY.webp 640w, /_astro/11_01.CiU58onf_1OkNDL.webp 750w, /_astro/11_01.CiU58onf_z5t4.webp 828w, /_astro/11_01.CiU58onf_1zxloP.webp 1080w, /_astro/11_01.CiU58onf_Z12QGyd.webp 1280w, /_astro/11_01.CiU58onf_87AoR.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;APIキーの発行&lt;a href=&quot;#apiキーの発行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは左のサイドバーの方からAPIキーを発行してみます。発行するためにはGoogle Cloudで既存のプロジェクトを使うか、新規プロジェクトを作成する必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/11_02.CdvFL48W_Wksuu.webp&quot; srcset=&quot;/_astro/11_02.CdvFL48W_Z2wOrgH.webp 640w, /_astro/11_02.CdvFL48W_1PWBA1.webp 750w, /_astro/11_02.CdvFL48W_2bSpj.webp 828w, /_astro/11_02.CdvFL48W_2oKdus.webp 1080w, /_astro/11_02.CdvFL48W_ZdDOsA.webp 1280w, /_astro/11_02.CdvFL48W_Wksuu.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/11_03.BSRcuiVy_2dHomq.webp&quot; srcset=&quot;/_astro/11_03.BSRcuiVy_Z2ajoR6.webp 640w, /_astro/11_03.BSRcuiVy_2dsDYC.webp 750w, /_astro/11_03.BSRcuiVy_oGUNU.webp 828w, /_astro/11_03.BSRcuiVy_Z1p3Yrx.webp 1080w, /_astro/11_03.BSRcuiVy_12I6ol.webp 1280w, /_astro/11_03.BSRcuiVy_2dHomq.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発行できると、APIキーの管理画面でキーの値などを確認することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/11_04.KRFK1h5O_Z2rWKwq.webp&quot; srcset=&quot;/_astro/11_04.KRFK1h5O_1BBQt3.webp 640w, /_astro/11_04.KRFK1h5O_UcLvP.webp 750w, /_astro/11_04.KRFK1h5O_ZSxVDR.webp 828w, /_astro/11_04.KRFK1h5O_Z10x0ws.webp 1080w, /_astro/11_04.KRFK1h5O_1rf5jq.webp 1280w, /_astro/11_04.KRFK1h5O_Z2rWKwq.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;実際にプロンプトしてみる。&lt;a href=&quot;#実際にプロンプトしてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは次は実際にプロンプトしていきます。まずは「Gemini 1.5 Flash」から試していきます。
まずはプロジェクト名を付けます。付けた時に権限の認証をするウインドウが出てきたりもするので、認証します。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/12_01.Buo8znSE_Z1MY2bY.webp&quot; srcset=&quot;/_astro/12_01.Buo8znSE_1CTwfV.webp 640w, /_astro/12_01.Buo8znSE_VuriI.webp 750w, /_astro/12_01.Buo8znSE_ZRggQY.webp 828w, /_astro/12_01.Buo8znSE_Zlyhc1.webp 1080w, /_astro/12_01.Buo8znSE_26dNDR.webp 1280w, /_astro/12_01.Buo8znSE_Z1MY2bY.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/12_02.CGkHKB6K_Z11NgE1.webp&quot; srcset=&quot;/_astro/12_02.CGkHKB6K_ZiDkNy.webp 640w, /_astro/12_02.CGkHKB6K_Z103pKL.webp 750w, /_astro/12_02.CGkHKB6K_2gmYRs.webp 828w, /_astro/12_02.CGkHKB6K_pBtkW.webp 1080w, /_astro/12_02.CGkHKB6K_Z2cMyC6.webp 1280w, /_astro/12_02.CGkHKB6K_Z11NgE1.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;プロジェクト名が付いたらプロンプトしていきます。
まずは手始めに、「現在Google AI Studioで使用できるGeminiのモデルを、無料枠と有料枠で分けて列挙して。」と打ち込んでみます。
すると、こんな感じ。　　アレッ・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/12_03.DeRic4CN_Z2f5mdR.webp&quot; srcset=&quot;/_astro/12_03.DeRic4CN_Z296NGO.webp 640w, /_astro/12_03.DeRic4CN_2eFf9T.webp 750w, /_astro/12_03.DeRic4CN_pTvYc.webp 828w, /_astro/12_03.DeRic4CN_ZMEBdT.webp 1080w, /_astro/12_03.DeRic4CN_1E7tBY.webp 1280w, /_astro/12_03.DeRic4CN_Z2f5mdR.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Geminiに関する情報はあまり学習されていないようですね。まあ、ハルシネーションが起きるよりは良いと思います。
それでは次に、「現在ChatGPTで使用できる生成AIのモデルを、無料枠と有料枠で分けて列挙して。」と打ち込んでみます。
すると、こんな感じ。　　アレッ・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/12_04.BqEAwJsE_16zNga.webp&quot; srcset=&quot;/_astro/12_04.BqEAwJsE_TAY2S.webp 640w, /_astro/12_04.BqEAwJsE_dbT5F.webp 750w, /_astro/12_04.BqEAwJsE_Z1AyO52.webp 828w, /_astro/12_04.BqEAwJsE_Z2wbzxN.webp 1080w, /_astro/12_04.BqEAwJsE_Z4otGU.webp 1280w, /_astro/12_04.BqEAwJsE_16zNga.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ChatGPTに関する情報もあまり学習されていないようですね。この手の質問はダメか・・・。
それでは今度は、「現在巷で主流となっている画像生成AIを列挙して。」と打ち込んでみます。
すると、こんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/12_05.Ce2tCGcT_Z1J9Luv.webp&quot; srcset=&quot;/_astro/12_05.Ce2tCGcT_Zk2Dvx.webp 640w, /_astro/12_05.Ce2tCGcT_Z11rIsK.webp 750w, /_astro/12_05.Ce2tCGcT_2eXGat.webp 828w, /_astro/12_05.Ce2tCGcT_ZhJ1ux.webp 1080w, /_astro/12_05.Ce2tCGcT_2a34ll.webp 1280w, /_astro/12_05.Ce2tCGcT_Z1J9Luv.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なるほどなるほど、FLUX.1とかが含まれていませんが、欲しい情報はおおよそ把握することが出来ました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プリプロンプトできる。&lt;a href=&quot;#プリプロンプトできる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、これからプロンプトする内容に対してどのように回答するかどうかを設定するためにプリプロンプトしていきます。「Optional tone and style instructions for the model」と表示されている場所に入力できるみたいです。
まずは、「画像生成AIに関する質問は答えないで。」とプリプロンプトしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/13_01.BGVHfBXL_R0TCe.webp&quot; srcset=&quot;/_astro/13_01.BGVHfBXL_ZIUB2F.webp 640w, /_astro/13_01.BGVHfBXL_Z1qkFYS.webp 750w, /_astro/13_01.BGVHfBXL_1P5IDl.webp 828w, /_astro/13_01.BGVHfBXL_2jqECc.webp 1080w, /_astro/13_01.BGVHfBXL_ZiXnkQ.webp 1280w, /_astro/13_01.BGVHfBXL_R0TCe.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして先程の「現在巷で主流となっている画像生成AIを列挙して。」とプロンプトして答えなくなるかどうかを試します。
すると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/13_01_02.DdSycOcG_fmcPo.webp&quot; srcset=&quot;/_astro/13_01_02.DdSycOcG_ZpBbo9.webp 640w, /_astro/13_01_02.DdSycOcG_2x61aM.webp 750w, /_astro/13_01_02.DdSycOcG_2gOkHO.webp 828w, /_astro/13_01_02.DdSycOcG_1pcOY7.webp 1080w, /_astro/13_01_02.DdSycOcG_15AYvT.webp 1280w, /_astro/13_01_02.DdSycOcG_fmcPo.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アレッ、先程と同様に回答してしまっています・・・。モデルによるか？
そこで次は、「Gemini 1.5 Flash」から「Gemini 1.5 Pro」にモデルを変えてからプロンプトを送ってみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/13_02.BPcWVZce_1PJOER.webp&quot; srcset=&quot;/_astro/13_02.BPcWVZce_Z2Xu9U.webp 640w, /_astro/13_02.BPcWVZce_ZJnz78.webp 750w, /_astro/13_02.BPcWVZce_2w2Pw6.webp 828w, /_astro/13_02.BPcWVZce_Z1M1y96.webp 1080w, /_astro/13_02.BPcWVZce_EKwGM.webp 1280w, /_astro/13_02.BPcWVZce_1PJOER.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Gemini 1.5 Proにすることで答えがより詳細になりましたね！　しかし、この手のプリプロンプトはダメか・・・。
それでは次に、「答えた内容でブログ記事も加えて書いて。」とプリプロンプトしてみます。
すると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/13_03.BFjrDGQi_Z6s6nf.webp&quot; srcset=&quot;/_astro/13_03.BFjrDGQi_1Gfepp.webp 640w, /_astro/13_03.BFjrDGQi_YP9sc.webp 750w, /_astro/13_03.BFjrDGQi_ZNUyHv.webp 828w, /_astro/13_03.BFjrDGQi_1kWDBI.webp 1080w, /_astro/13_03.BFjrDGQi_Z1hrolk.webp 1280w, /_astro/13_03.BFjrDGQi_Z6s6nf.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;オオオッ・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/13_04.vpasDheq_2fg1DB.webp&quot; srcset=&quot;/_astro/13_04.vpasDheq_Z2aglEJ.webp 640w, /_astro/13_04.vpasDheq_2dvHbY.webp 750w, /_astro/13_04.vpasDheq_oJY1h.webp 828w, /_astro/13_04.vpasDheq_Z1nvmam.webp 1080w, /_astro/13_04.vpasDheq_14gIFw.webp 1280w, /_astro/13_04.vpasDheq_2fg1DB.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程の回答に、ブログ記事用に脚色されたレイアウトで回答が生成されました。明朗な感じの切り口で記事を執筆していますね。
Google AI Studioの生成内容の表示は、Geminiのものよりも見やすいですね・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プロンプトした内容をGoogleドライブに保存できる。&lt;a href=&quot;#プロンプトした内容をgoogleドライブに保存できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まさにGeminiと違うところですね。
Geminiにプロンプトするとスレッドがどんどん蓄積されて、サイドバーがごちゃごちゃしてしまっていましたが、ファイルとして保存できるのであれば、サイドバーに表示せずにプロンプトとその回答を保存することが出来ますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/14_01.BDPCMj5W_ZE6PAt.webp&quot; srcset=&quot;/_astro/14_01.BDPCMj5W_Z1KXcGi.webp 640w, /_astro/14_01.BDPCMj5W_Z2snhDv.webp 750w, /_astro/14_01.BDPCMj5W_N37YI.webp 828w, /_astro/14_01.BDPCMj5W_MiTou.webp 1080w, /_astro/14_01.BDPCMj5W_Z1P68yy.webp 1280w, /_astro/14_01.BDPCMj5W_ZE6PAt.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右上の方にある「Save」をクリックすれば、AI Studioのプロジェクトが保存されます。
Googleドライブの方を確認すると・・・、マイドライブのフォルダの中に「Google AI Studio」というフォルダが追加されているので、その中に先ほど保存したプロジェクトのファイルが格納されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/14_02.cbEYw7zE_Z2bLFaC.webp&quot; srcset=&quot;/_astro/14_02.cbEYw7zE_Z2t15C4.webp 640w, /_astro/14_02.cbEYw7zE_1TKXeE.webp 750w, /_astro/14_02.cbEYw7zE_60f3W.webp 828w, /_astro/14_02.cbEYw7zE_ZJlUaE.webp 1080w, /_astro/14_02.cbEYw7zE_1HqaFe.webp 1280w, /_astro/14_02.cbEYw7zE_Z2bLFaC.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/14_03.MjUMILz3_1KHtjr.webp&quot; srcset=&quot;/_astro/14_03.MjUMILz3_2oWsvg.webp 640w, /_astro/14_03.MjUMILz3_1Hxny3.webp 750w, /_astro/14_03.MjUMILz3_Z6dkBE.webp 828w, /_astro/14_03.MjUMILz3_Z1R3Tuw.webp 1080w, /_astro/14_03.MjUMILz3_zIblm.webp 1280w, /_astro/14_03.MjUMILz3_1KHtjr.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プロンプトギャラリーというものもある。&lt;a href=&quot;#プロンプトギャラリーというものもある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プロンプトおよびその回答のサンプルが紹介されているページが存在します。以下からそのページに飛べます。&lt;/p&gt;&lt;a href=&quot;https://ai.google.dev/gemini-api/prompts?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/googledevai/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google AI for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google AI Gemini API |プロンプト ギャラリー |Google for Developers | Google AI for Developers&lt;/div&gt;&lt;div&gt;Google AI Studio の Gemini API に関するアイデアを探索するためのプロンプト ギャラリー。Gemini API クックブックのコードサンプルなど。&lt;/div&gt;&lt;div&gt;ai.google.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://ai.google.dev/static/site-assets/images/share-gemini-api-2.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回は「JSON スキーマをを使用してレシピを一覧表示する」を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/15_01.CMUFE4Ju_avXSG.webp&quot; srcset=&quot;/_astro/15_01.CMUFE4Ju_ZUiBbC.webp 640w, /_astro/15_01.CMUFE4Ju_Z1BHG8P.webp 750w, /_astro/15_01.CMUFE4Ju_1DHIuo.webp 828w, /_astro/15_01.CMUFE4Ju_1BVISE.webp 1080w, /_astro/15_01.CMUFE4Ju_Z10sj4o.webp 1280w, /_astro/15_01.CMUFE4Ju_avXSG.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、クロワッサンの画像が出てきます。とてもおいしそうですね。
Gemini 1.5 FlashからJSONを含めた回答が為されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/15_02.DqjI72z2_ZHz7TP.webp&quot; srcset=&quot;/_astro/15_02.DqjI72z2_1P3Ai6.webp 640w, /_astro/15_02.DqjI72z2_18DvkS.webp 750w, /_astro/15_02.DqjI72z2_ZF7cOO.webp 828w, /_astro/15_02.DqjI72z2_IPC58.webp 1080w, /_astro/15_02.DqjI72z2_Z1SypRU.webp 1280w, /_astro/15_02.DqjI72z2_ZHz7TP.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;材料や手順に関する情報がJSON形式で出力されます。他の場所でこのデータをベクトル化して別のAIモデルに学習させることも出来そうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;783&quot; src=&quot;/_astro/15_03.CAE9F2hD_2dxuhI.webp&quot; srcset=&quot;/_astro/15_03.CAE9F2hD_Z2ukv9f.webp 640w, /_astro/15_03.CAE9F2hD_1SrxHt.webp 750w, /_astro/15_03.CAE9F2hD_4FOwL.webp 828w, /_astro/15_03.CAE9F2hD_Z1pdSwf.webp 1080w, /_astro/15_03.CAE9F2hD_12ycjD.webp 1280w, /_astro/15_03.CAE9F2hD_2dxuhI.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;画像のOCRを試してみる。&lt;a href=&quot;#画像のocrを試してみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、添付した画像をOCRしてもらって、そのテキストをイイ感じにしてもらいます。
「添付した画像にある内容をOCRして、Markdown形式で適切な形でまとめて下さい。」とプロンプトして、画像を添付してみます。ちなみに、Google AI Studio上で添付できるファイルの種類は、画像、音声、そしてそれらのファイルをGoogleドライブからも添付することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;864&quot; src=&quot;/_astro/21.CVYJ-0ch_Z1GTDeL.webp&quot; srcset=&quot;/_astro/21.CVYJ-0ch_Z2iaGga.webp 640w, /_astro/21.CVYJ-0ch_9fqQl.webp 750w, /_astro/21.CVYJ-0ch_Z1bFwB7.webp 828w, /_astro/21.CVYJ-0ch_z6nO0.webp 1080w, /_astro/21.CVYJ-0ch_ZX20Vj.webp 1280w, /_astro/21.CVYJ-0ch_Z1GTDeL.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、このような回答が生成されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;864&quot; src=&quot;/_astro/23.CxWCuTmo_14wkgh.webp&quot; srcset=&quot;/_astro/23.CxWCuTmo_Z1HG62s.webp 640w, /_astro/23.CxWCuTmo_IJ253.webp 750w, /_astro/23.CxWCuTmo_ZBbVnp.webp 828w, /_astro/23.CxWCuTmo_Z1IDLtS.webp 1080w, /_astro/23.CxWCuTmo_1NoWyJ.webp 1280w, /_astro/23.CxWCuTmo_14wkgh.webp 1536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回添付した画像はこれです。
&lt;img loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;746&quot; src=&quot;/_astro/22.BYV0o8vU_ZS1Hea.webp&quot; srcset=&quot;/_astro/22.BYV0o8vU_jdlGW.webp 640w, /_astro/22.BYV0o8vU_ZS1Hea.webp 741w&quot; /&gt;&lt;/p&gt;&lt;p&gt;生成された回答を見て、画像内の情報をかなり整理できているなと感じました。「セミファンレス機能対応」の部分は、情報がそのまま出力されずに意訳されていますが、意味的には合っています。かなり使えそうな印象です。
以下、今回のOCRで生成された全文です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ゲーミングPCに最適&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;高変換効率電源&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;850Wの大容量でハイエンドGPUにも対応。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;フルプラグイン&lt;/span&gt;&lt;span&gt; &amp;amp; &lt;/span&gt;&lt;span&gt;フルブラックケーブルで魅せるスッキリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;80PLUS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GOLD認証&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;変換効率平均90%以上で、省エネ＆発熱を抑える&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;グラボ用16pin電源コネクター搭載&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;※ホワイトモデルのみ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;70cmのATX12Vケーブル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;電源下配置や裏配線に対応&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;フルプラグイン&lt;/span&gt;&lt;span&gt; &amp;amp; &lt;/span&gt;&lt;span&gt;フラットケーブル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ケーブルの取り回しがしやすく、ケース内スッキリ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ALL日本メーカー製コンデンサ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;信頼性の高いコンデンサで、安心の長寿命&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;セミファンレス機能対応&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;負荷が軽いと回転を停止させてファン騒音を抑えます&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;▼&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;☑&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;玄人志向&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;また、添付した画像などのファイルは、Googleドライブに保存されるみたいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1855&quot; height=&quot;799&quot; src=&quot;/_astro/24.Db0re3re_ZFQELA.webp&quot; srcset=&quot;/_astro/24.Db0re3re_uINBR.webp 640w, /_astro/24.Db0re3re_Z1MVI2a.webp 750w, /_astro/24.Db0re3re_ZAHzAR.webp 828w, /_astro/24.Db0re3re_ZFbc4w.webp 1080w, /_astro/24.Db0re3re_pF62a.webp 1280w, /_astro/24.Db0re3re_3MOrn.webp 1668w, /_astro/24.Db0re3re_ZFQELA.webp 1855w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Geminiと比較してみる。&lt;a href=&quot;#geminiと比較してみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;大規模言語モデルとチャットできるプラットフォームは他にも色々あります。
今回はGeminiと比較してみます。AIモデルは「Gemini 1.5 Flash」です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Geminiの場合。&lt;a href=&quot;#geminiの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程と同様に、「添付した画像にある内容をOCRして、Markdown形式で適切な形でまとめて下さい。」とプロンプトしてOCRをしてもらいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1270&quot; height=&quot;465&quot; src=&quot;/_astro/31.BmVuLyGN_1fSeLq.webp&quot; srcset=&quot;/_astro/31.BmVuLyGN_1XMToS.webp 640w, /_astro/31.BmVuLyGN_2tFoVD.webp 750w, /_astro/31.BmVuLyGN_ZvCvxN.webp 828w, /_astro/31.BmVuLyGN_8fHhr.webp 1080w, /_astro/31.BmVuLyGN_1fSeLq.webp 1270w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;879&quot; src=&quot;/_astro/32.BjnpS1fA_v45ji.webp&quot; srcset=&quot;/_astro/32.BjnpS1fA_epreF.webp 640w, /_astro/32.BjnpS1fA_1wMzaW.webp 750w, /_astro/32.BjnpS1fA_Z2gh8Fa.webp 828w, /_astro/32.BjnpS1fA_Z2fyJh4.webp 1080w, /_astro/32.BjnpS1fA_1hdOOp.webp 1280w, /_astro/32.BjnpS1fA_v45ji.webp 1516w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、少し関係のない内容でプロンプトして回答をしてもらって・・・。（「おすすめのゲーミングPC用の電源ユニットを5個紹介して」）
&lt;img loading=&quot;lazy&quot; width=&quot;1437&quot; height=&quot;873&quot; src=&quot;/_astro/33.DeMSO3ot_Z1Ch8BG.webp&quot; srcset=&quot;/_astro/33.DeMSO3ot_2p8eCH.webp 640w, /_astro/33.DeMSO3ot_6jC06.webp 750w, /_astro/33.DeMSO3ot_Z2k5RRN.webp 828w, /_astro/33.DeMSO3ot_ZXte4G.webp 1080w, /_astro/33.DeMSO3ot_Z2wh2HR.webp 1280w, /_astro/33.DeMSO3ot_Z1Ch8BG.webp 1437w&quot; /&gt;&lt;/p&gt;&lt;p&gt;再び、「先程、添付した画像にあった内容をテーブル形式にして。」とプロンプトすると、先程の画像の内容は忘れてしまったようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1439&quot; height=&quot;866&quot; src=&quot;/_astro/34.Dglen6v6_Z1UqRyW.webp&quot; srcset=&quot;/_astro/34.Dglen6v6_Z21FsaN.webp 640w, /_astro/34.Dglen6v6_1jIyAD.webp 750w, /_astro/34.Dglen6v6_Z1JgTDa.webp 828w, /_astro/34.Dglen6v6_Z1ie09D.webp 1080w, /_astro/34.Dglen6v6_2eioYG.webp 1280w, /_astro/34.Dglen6v6_Z1UqRyW.webp 1439w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google AI Studioの場合。&lt;a href=&quot;#google-ai-studioの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google AI Studioでは、先程の画像のOCRは済ませたので、「おすすめのゲーミングPC用の電源ユニットを5個紹介して」のプロンプトから始めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1891&quot; height=&quot;885&quot; src=&quot;/_astro/41.CiaKy_Pl_Z187qee.webp&quot; srcset=&quot;/_astro/41.CiaKy_Pl_1X3rT2.webp 640w, /_astro/41.CiaKy_Pl_Z4e9rX.webp 750w, /_astro/41.CiaKy_Pl_ZA4vN1.webp 828w, /_astro/41.CiaKy_Pl_1rE1C0.webp 1080w, /_astro/41.CiaKy_Pl_H0tiG.webp 1280w, /_astro/41.CiaKy_Pl_fX1Cw.webp 1668w, /_astro/41.CiaKy_Pl_Z187qee.webp 1891w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「先程、添付した画像にあった内容をテーブル形式にして。」とプロンプトすると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;885&quot; src=&quot;/_astro/42.D7pOwLCx_Z1MG3Gh.webp&quot; srcset=&quot;/_astro/42.D7pOwLCx_Z1YuKso.webp 640w, /_astro/42.D7pOwLCx_Z1v59EW.webp 750w, /_astro/42.D7pOwLCx_1JaRAv.webp 828w, /_astro/42.D7pOwLCx_JaLPM.webp 1080w, /_astro/42.D7pOwLCx_1NaVhr.webp 1280w, /_astro/42.D7pOwLCx_1nIska.webp 1668w, /_astro/42.D7pOwLCx_Z1MG3Gh.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「先程の画像にあった内容をテーブル形式にして。」というプロンプトに対して回答を用意することが出来ます。Google AI Studioでは以前にプロジェクト内でOCRさせた内容を記憶してくれていますね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;比較まとめ&lt;a href=&quot;#比較まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Googleの各々のAIチャットプラットフォームサービスの比較表です。&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;サービス&lt;/th&gt;&lt;th&gt;価格&lt;/th&gt;&lt;th&gt;使い勝手、UX&lt;/th&gt;&lt;th&gt;AIモデル&lt;/th&gt;&lt;th&gt;添付可能&lt;/th&gt;&lt;th&gt;記憶力&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Google AI Studio&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1.5 Flash、Pro&lt;/td&gt;&lt;td&gt;画像、音声&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Gemini&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1.5 Flash&lt;/td&gt;&lt;td&gt;画像、音声&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GASでAPIキーを使ってみる。&lt;a href=&quot;#gasでapiキーを使ってみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、先程作成したAPIキーで、Google Apps ScriptからGeminiモデルにプロンプトをしてみます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;API_KEY_FOR_GOOGLE_AI_STUDIO&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessToken&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://generativelanguage.googleapis.com/v1beta/models/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:generateContent?key=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getAccessToken&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;muteHttpExceptions&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;post&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;contents&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;parts&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;[{&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;}]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gemini-1.5-flash&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Explain how AI works.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;promptToGenAi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;candidates&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;result&lt;/code&gt;部分のログです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;candidates&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ { &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;finishReason&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;STOP&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;safetyRatings&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;] } ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;usageMetadata&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;promptTokenCount&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;candidatesTokenCount&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;735&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;totalTokenCount&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;739&lt;/span&gt;&lt;span&gt; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;modelVersion&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;gemini&lt;/span&gt;&lt;span&gt;-1.5&lt;/span&gt;&lt;span&gt;-flash&lt;/span&gt;&lt;span&gt;-001&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;result[&quot;candidates&quot;][0][&quot;content&quot;]&lt;/code&gt;部分のログです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;##&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Understanding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Building&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blocks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI:\n\nArtificial&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Intelligence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(AI)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;broad&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encompassing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vast&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;techniques&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;approaches.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;At&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;its&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;core&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;aims&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;capable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;performing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;that&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;typically&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;intelligence,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;such&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;\n\n**&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Learning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Data:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Learning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(ML):**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;most&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;common&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;approach.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ML&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;without&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;explicit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;programming.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;They&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;patterns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;relationships&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;within&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;predictions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decisions.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Supervised&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learning:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trained&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;labeled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(e.g.&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;corresponding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;labels&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cat&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;dog&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;It&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;predict&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;labels&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data.\n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Unsupervised&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learning&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trained&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unlabeled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;It&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;finds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;patterns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;structures&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;within&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;without&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;specific&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;guidance.\n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Reinforcement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learning:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trial&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;receiving&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rewards&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;penalties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;its&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actions.\n\n**2.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Reasoning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Problem-Solving&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Expert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Systems:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;These&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;capture&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;knowledge&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expertise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;humans&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;specific&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;domain.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;They&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diagnose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;problems&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;provide&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recommendations,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decisions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;based&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;facts.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Algorithms&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;These&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;explore&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;possible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;solutions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;problems&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;often&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heuristics&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(rules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thumb)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;guide&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;their&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;search.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Reasoning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Engines&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;These&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logical&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conclusions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;facts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rules.\n\n**&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Natural&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Processing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(NLP):**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Understanding:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;involves&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enabling&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;understand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;meaning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;language.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Generation:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;involves&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enabling&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;produce&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human-like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Translation:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;involves&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;translating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;one&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;another.\n\n**&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Computer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Vision:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Recognition:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Enables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recognize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scenes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;within&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Object&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Detection:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Locates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identifies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;specific&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;within&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Segmentation:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Divides&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;into&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;regions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;based&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;their&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content.\n\n**&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Robotics:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Autonomous&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Navigation:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Enables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robots&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;move&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;around&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;their&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;without&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;intervention.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Manipulation:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Enables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robots&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interact&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;their&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environment.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Sensing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Perception:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Enables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;robots&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;perceive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;their&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;environment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gather&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;information.\n\n**How&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Works&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Practice:**\n\nImagine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;training&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recognize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cats.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;how&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;works:\n\n&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Collection:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;You&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thousands&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;labeled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cat&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;not cat&quot;&lt;/span&gt;&lt;span&gt;.\n&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Training:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learning&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(e.g.&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;neural&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;network)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;these&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;It&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;adjusts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;its&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;internal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parameters&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recognize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;patterns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;associated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cats.\n3.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Evaluation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;You&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;see&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;how&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accurately&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cats.\n&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**Deployment:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Once&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;satisfied&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;performance&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;machine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;be&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recognize&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cats&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;real-time&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applications,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;such&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;photo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;security&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;system.\n\n**Key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Points&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Remember&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diverse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;field&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;many&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;different&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;approaches&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;techniques.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;relies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heavily&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quality&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quantity&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;significantly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;impact&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;its&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;performance.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;are&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;constantly&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;evolving&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;improving.\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Ethical&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;considerations&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;are&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;crucial&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;development&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI.\n\n**In&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;summary,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;aims&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;intelligent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;by&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mimicking&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cognitive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;abilities&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;through&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;learning,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;problem-solving,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interacting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;world.**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;involves&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;algorithms,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;computing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;power&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;develop&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;capable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;performing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tasks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;that&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;traditionally&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;human&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;intelligence.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;model&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;「Explain how AI works. Reply in Japanese.」とプロンプトしたら、日本語で返答してくれました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;##&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;人工知能（AI）の仕組み\n\n人工知能（AI）は、人間の知能を模倣するように設計されたコンピューターシステムです。その仕組みは非常に複雑ですが、一般的に以下の要素から構成されています。\n\n**&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;データ収集と前処理:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIは、学習のために大量のデータが必要です。テキスト、画像、音声など、様々な形式のデータを収集します。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;収集されたデータは、AIモデルが理解できる形式に前処理されます。例えば、テキストデータは単語やフレーズに分割され、画像データは数値に変換されます。\n\n**&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;学習:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIモデルは、収集されたデータを使って学習します。学習には、**機械学習**という技術が使用されます。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;機械学習には、**教師あり学習**、**教師なし学習**、**強化学習**など様々な種類があります。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**教師あり学習:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ラベル付きのデータを使ってモデルを学習させます。例えば、猫の画像に「猫」というラベルを付けて、猫の画像を識別できるモデルを学習させます。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**教師なし学習:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ラベルなしのデータを使ってモデルを学習させます。例えば、顧客の購買履歴を分析して、顧客の好みを推測します。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**強化学習:**&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;モデルは、環境との相互作用を通して学習します。例えば、ゲームのルールに基づいて、最適な行動を学習します。\n\n**&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;推論:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;学習が完了したAIモデルは、新しいデータに対して推論を行うことができます。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;例えば、学習済みモデルに新しい画像を入力すると、その画像が猫であるかどうかを判断することができます。\n\n**&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;評価:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIモデルの性能を評価するために、様々な指標が使用されます。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;例えば、画像認識モデルの性能を評価するために、正答率や誤り率が使用されます。\n\n**&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;反復学習:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIモデルは、評価結果に基づいて改善されます。\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;学習と評価を繰り返すことで、AIモデルの精度を高めることができます。\n\n**AIは様々な分野で活用されています:**\n\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;画像認識:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;顔認識、物体検出、医療診断など\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;自然言語処理:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;機械翻訳、チャットボット、文章要約など\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;音声認識:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;音声アシスタント、音声入力、音声検索など\n*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;推奨システム:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;商品推薦、映画推薦、音楽推薦など\n\nAIは、今後も発展を続け、私たちの生活に大きな影響を与えていくと考えられています。\n&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;role&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;model&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google AI Studioの大まかな機能を試して、その後にGeminiプラットフォームとの比較を行いました。
日に日に大規模言語モデルを利用できるサービスは便利になってきていますので、常日頃で触れて生産性を加速させていきたいですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;作業のお供に。&lt;a href=&quot;#作業のお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ロジクール ワイヤレスキーボード K295GP 静音 耐水 キーボード 無線 Unifying K295 windows chrome グラファイト 国内正規品&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gspIaZ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ロジクール ワイヤレスキーボード K295GP 静音 耐水 キーボード 無線 Unifying K295 windows chrome グラファイト 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gspIaZ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;PFU キーボード HHKB Professional HYBRID Type-S 日本語配列／墨&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gtm40w&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional HYBRID Type-S 日本語配列／墨&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gtm40w&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;良い時代だなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;発展が加速していますね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>そもそも原子核パスタって何？さらにスパゲッティ化現象？</title><link>https://endorphinbath.com/posts/satisfactory-what-is-nuclear-pasta/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-what-is-nuclear-pasta/</guid><description>原子核パスタは超新星爆発が起きた後の極端な環境下で生まれる宇宙で最も硬い物質です。しかしなぜ「パスタ」なのでしょうか。あとスパゲッティ化現象って何？</description><pubDate>Sat, 19 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そもそも原子核パスタって何？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;確かにそうですねぇ・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パスタ？&lt;a href=&quot;#パスタ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Satisfactoryでは、「Nuclear Pasta」、「原子核パスタ」なる製品が軌道エレベーターの納品物として登場します。（※この画像の原子核パスタのレシピは、Modのおかげでおかしなことになっています。ご放念下さい。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01.Ci9lK8Nn_ZkeQ2g.webp&quot; srcset=&quot;/_astro/01.Ci9lK8Nn_ZtdkCY.webp 640w, /_astro/01.Ci9lK8Nn_2esF9N.webp 750w, /_astro/01.Ci9lK8Nn_Z21LuiH.webp 828w, /_astro/01.Ci9lK8Nn_ZDC1bx.webp 1080w, /_astro/01.Ci9lK8Nn_kxsK2.webp 1280w, /_astro/01.Ci9lK8Nn_21RUnb.webp 1668w, /_astro/01.Ci9lK8Nn_ZkeQ2g.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この原子核パスタとは、そもそもどういう物質なのか？
そこらへんを調べたのでまとめていきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原子核パスタは中性子星で生まれる&lt;a href=&quot;#原子核パスタは中性子星で生まれる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず「原子核パスタ」または「核パスタ」とも呼ばれますが、この物質は「宇宙上で最も強い物質」と言われています。（実際に入手したわけではないようなので、理論上最も強いらしい。）
そしてそんな原子核パスタは「中性子星」という極限的な環境下で生成されるらしいです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;中性子星を作る超新星爆発&lt;a href=&quot;#中性子星を作る超新星爆発&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「中性子星」とは、「超新星爆発」によって誕生した非常に高密度な天体のことです。
この「超新星爆発」とはどのような現象かというと、水素の核融合反応が起きている「主系列星」という天体の内、質量がデカイ類のヤツが自身の質量を支えきれなくなって重力収縮します。そして、その崩壊が止まった際に衝撃波によって星の外側が吹き飛ぶ現象のことを「超新星爆発」と言うみたいです。
つまり、ひたすら沢山太って、自分の体内で物質を消化し切れなくなって、&lt;strong&gt;爆発&lt;/strong&gt;するということですか！？　怖いですね・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/02.CQiMXGeH_6BMc6.webp&quot; srcset=&quot;/_astro/02.CQiMXGeH_24wMnU.webp 640w, /_astro/02.CQiMXGeH_24Yu4l.webp 750w, /_astro/02.CQiMXGeH_25nWab.webp 828w, /_astro/02.CQiMXGeH_6BMc6.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;怖すぎる・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/02_02.Cn1d62PW_1q7FMQ.webp&quot; srcset=&quot;/_astro/02_02.Cn1d62PW_1yF0Ob.webp 640w, /_astro/02_02.Cn1d62PW_Z22v219.webp 750w, /_astro/02_02.Cn1d62PW_ZPgwzB.webp 828w, /_astro/02_02.Cn1d62PW_1q7FMQ.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;つまり超新星爆発とは、クソデカい火薬が爆発するってことですね。ちなみに超新星爆発が起きるのは、太陽の8倍以上の質量を持つようなクソデカい天体がある時みたいです。
そして、超新星爆発は、「太陽ほどの大きさの物体をモントリオールほどの大きさに圧縮する爆発」らしいです。
ここで、モントリオールの面積は4,604.26km2でつまり直径は76km、太陽の直径は1,392,000kmとすると、1,391,924kmの距離を圧縮する爆発ということでしょうか。この距離は、80年間1日も休まずに47.6km歩き続けないと到達することが出来ない距離です。途方もない・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/03.D073UqHS_ZGESoR.webp&quot; srcset=&quot;/_astro/03.D073UqHS_1akG0x.webp 640w, /_astro/03.D073UqHS_1kQzTz.webp 750w, /_astro/03.D073UqHS_ZoFmou.webp 828w, /_astro/03.D073UqHS_Z1cAXA4.webp 1080w, /_astro/03.D073UqHS_Zhx0Uh.webp 1280w, /_astro/03.D073UqHS_Z1XDf8V.webp 1668w, /_astro/03.D073UqHS_ZGESoR.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いや、こんなものじゃない。
そして、超新星爆発を起こすために一体どれぐらいのエネルギーが必要なのかを考えてみましょうか。
この天体を太陽レベルのものとして仮定すると、この天体には5.45E+32ニュートンの力が必要となり、その力で、太陽をモントリオールの長さにするには、7.59E+38ジュールのエネルギーが必要。さらに、そのエネルギーは2.7308E+45キロワット時に相当します。&lt;/p&gt;&lt;p&gt;この数値がどれぐらいなのでしょう。
例えば、スイスとフランスに跨って建造された「大型ハドロン衝突型加速器」というバカでかいエネルギーを生み出せる施設があります。そいつが生み出せるエネルギーが13兆電子ボルト（13TeV）らしく、このエネルギーは2.92102E+38キロワット時に相当します。&lt;/p&gt;&lt;p&gt;つまり、超新星爆発を起こすためには、地球上で有数のバカデカエネルギー施設が、9,348,793台必要ということですね。（935万台！？　途方もない・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/03_01.Dyx2uiqV_2powlc.webp&quot; srcset=&quot;/_astro/03_01.Dyx2uiqV_ZGdPTG.webp 640w, /_astro/03_01.Dyx2uiqV_KCTBh.webp 750w, /_astro/03_01.Dyx2uiqV_ZmmFlm.webp 828w, /_astro/03_01.Dyx2uiqV_l4ahH.webp 1080w, /_astro/03_01.Dyx2uiqV_ZdBia0.webp 1280w, /_astro/03_01.Dyx2uiqV_wJIDu.webp 1668w, /_astro/03_01.Dyx2uiqV_2powlc.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いや、こんなものじゃない。
&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/03_02.wtuy7kBp_1WOVU.webp&quot; srcset=&quot;/_astro/03_02.wtuy7kBp_Z24Xaic.webp 640w, /_astro/03_02.wtuy7kBp_ZC6oLe.webp 750w, /_astro/03_02.wtuy7kBp_Z1K6YIR.webp 828w, /_astro/03_02.wtuy7kBp_Z22mw6z.webp 1080w, /_astro/03_02.wtuy7kBp_2t99fE.webp 1280w, /_astro/03_02.wtuy7kBp_Z1PFWJM.webp 1668w, /_astro/03_02.wtuy7kBp_1WOVU.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いや、こんなものでもない。
また、超新星爆発が起きると、こんな感じの風景になるようです。実際に起きている現象とは裏腹にとてもキレイですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;975&quot; src=&quot;/_astro/04.1p7AaC1f_JQqug.webp&quot; srcset=&quot;/_astro/04.1p7AaC1f_axnu7.webp 640w, /_astro/04.1p7AaC1f_9GGfo.webp 750w, /_astro/04.1p7AaC1f_Z1rKhtF.webp 828w, /_astro/04.1p7AaC1f_Z8h1Ql.webp 1080w, /_astro/04.1p7AaC1f_JQqug.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、超新星爆発が起きた時の写真はWikipediaに載っています。実際にNASAのスピッツァー宇宙望遠鏡、ハッブル宇宙望遠鏡およびチャンドラX線天文台で撮影された画像を合成したものらしいです。&lt;/p&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/%E8%B6%85%E6%96%B0%E6%98%9F&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ja.wikipedia.org/static/apple-touch/wikipedia.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;ja.wikipedia.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;超新星 - Wikipedia&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ja.wikipedia.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/d/d4/Keplers_supernova.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;トンデモ重力でプレスされた中性子星&lt;a href=&quot;#トンデモ重力でプレスされた中性子星&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして超新星爆発が起きて、その爆発の後に中性子を多く含んだコア、すなわち原子核の塊が残ってそれが「中性子星」となります。これほどデカい力が発生する爆発なので、その爆発で吹き飛んだ分だけ再びデカい力で物質などが戻って来ようとするわけですね。
その中性子星の巨大な重力によって外層は固体に凍りつき、液体の中心核を薄い地殻が包んでいる地球のような状態になるようです。&lt;/p&gt;&lt;p&gt;この中性子星は、「地球上のどんなものよりも100兆倍も密度が高い」天体だそうです。つまり、外層がとんでもない硬さを誇っているということですね。メチャクチャ硬いゆで卵みたいなイメージでしょうか。ヒビを入れることすら不可能でしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/31.BOYi5GRe_1YKPW7.webp&quot; srcset=&quot;/_astro/31.BOYi5GRe_ZtPSpW.webp 640w, /_astro/31.BOYi5GRe_ZtobJw.webp 750w, /_astro/31.BOYi5GRe_ZsYIDG.webp 828w, /_astro/31.BOYi5GRe_1YKPW7.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原子核パスタ&lt;a href=&quot;#原子核パスタ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「地球上のどんなものよりも100兆倍も密度が高い」天体を構成する物質こそが「原子核パスタ」です。
この物質は、原子核が溶けて、物質内に一様に分布した核子 (陽子、中性子)の間に働く「核力」による引力と、陽子間に働く「クーロン力」による斥力との釣り合いによって具現する、複雑な原子核によって構成されています。&lt;/p&gt;&lt;p&gt;そして、その物質の原子構造が以下のように色々とカテゴリ分け出来るようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;630&quot; src=&quot;/_astro/21.B0I5MaCB_2biqFl.webp&quot; srcset=&quot;/_astro/21.B0I5MaCB_1RvSDk.webp 640w, /_astro/21.B0I5MaCB_Z1RPdu1.webp 750w, /_astro/21.B0I5MaCB_2a3w9x.webp 828w, /_astro/21.B0I5MaCB_Z1pszIl.webp 1080w, /_astro/21.B0I5MaCB_2biqFl.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;黄色の部分が原子核で、密度が高くなると (a)→(g) へと変化していきます。
密度が変化することで、パスタによって電子などの粒子がどのように動くかで、これらの構造に変化が生まれます。&lt;/p&gt;&lt;p&gt;地殻の下では、陽子と中性子の競合する力によって、長い円筒形や平面のような形に組み立てられて、これらは「ニョッキ 」や「スパゲッティ」として知られており、そのため「原子核パスタ」という名前が付けられているようです。2種類がパスタだから原子核パスタなんですね。&lt;/p&gt;




































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;段階&lt;/th&gt;&lt;th&gt;状態&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;a&lt;/td&gt;&lt;td&gt;ニョッキ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;b&lt;/td&gt;&lt;td&gt;スパゲッティ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;c&lt;/td&gt;&lt;td&gt;ワッフル&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;d&lt;/td&gt;&lt;td&gt;ラザニア&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;e&lt;/td&gt;&lt;td&gt;欠陥&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;f&lt;/td&gt;&lt;td&gt;アンチスパゲッティ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;g&lt;/td&gt;&lt;td&gt;アンチニョッキ&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;パスタの種類&lt;a href=&quot;#パスタの種類&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみにちなみに、パスタの種類を少し並べてみましょうか。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ニョッキ&lt;a href=&quot;#ニョッキ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/41.dU8xv306_Z1sJbzm.webp&quot; srcset=&quot;/_astro/41.dU8xv306_DMSkW.webp 640w, /_astro/41.dU8xv306_OjMeY.webp 750w, /_astro/41.dU8xv306_ZUda45.webp 828w, /_astro/41.dU8xv306_Z1XFgKy.webp 1080w, /_astro/41.dU8xv306_Z13Bj5L.webp 1280w, /_astro/41.dU8xv306_2ktAuv.webp 1668w, /_astro/41.dU8xv306_Z1sJbzm.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ニョッキの名前は「塊」を意味するゲルマン語派のロンゴバルド語のknokkaが由来しているようです。（Wikipediaより。）&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;イタリアでは滋養のあるものや重い食べ物を木曜日に食べる習慣がある。ニョッキは結構腹に溜まる料理なので木曜日に食べることが多くなり、gnocchi Giovedì（ニョッキ・ジョヴェディ、木曜のニョッキ）と呼ばれるようになった。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;後述のスパゲッティよりはマイナーですが、小麦粉やジャガイモがあれば家でも作れそうなやつです。ソース多めで食べると良いでしょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;スパゲッティ&lt;a href=&quot;#スパゲッティ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/42.BtOCQc8L_2nscpL.webp&quot; srcset=&quot;/_astro/42.BtOCQc8L_1Kq3Gq.webp 640w, /_astro/42.BtOCQc8L_1UVWAs.webp 750w, /_astro/42.BtOCQc8L_bp0ho.webp 828w, /_astro/42.BtOCQc8L_1Rw7ez.webp 1080w, /_astro/42.BtOCQc8L_Z2hB3Tz.webp 1280w, /_astro/42.BtOCQc8L_16tPFH.webp 1668w, /_astro/42.BtOCQc8L_2nscpL.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;イタリア語の「紐」を意味するspagoが語源です。（Wikipediaより。）
一般には断面が円形で太さ1.6mm～1.9mm前後の棒状のものが「スパゲッティ」に該当するようです。数あるパスタの中でもオーソドックスな部類でトマトソースやオイルにも上手く和えられますよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マッケローニ&lt;a href=&quot;#マッケローニ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/43.BEvto5XB_Z1uLstA.webp&quot; srcset=&quot;/_astro/43.BEvto5XB_Z1DlAKF.webp 640w, /_astro/43.BEvto5XB_Z1sOGQD.webp 750w, /_astro/43.BEvto5XB_1QOtDe.webp 828w, /_astro/43.BEvto5XB_Z20HxEM.webp 1080w, /_astro/43.BEvto5XB_Z15DA00.webp 1280w, /_astro/43.BEvto5XB_2irjAh.webp 1668w, /_astro/43.BEvto5XB_Z1uLstA.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像はペンネです。（Dalleだと、いくらマカロニとプロンプトしてもペンネになってしまう。）
直径が3mm～5mmほどの円筒状のショートパスタ。マカロニ（macaroni）は英語名である。（Wikipediaより。）
ホワイトソースのグラタンと一緒に食べるマッケローニ、個人的にかなり好きな部類です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フジッリ&lt;a href=&quot;#フジッリ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/44.Tj2MdA9j_20Mett.webp&quot; srcset=&quot;/_astro/44.Tj2MdA9j_Z21ryg9.webp 640w, /_astro/44.Tj2MdA9j_Z1PUEm7.webp 750w, /_astro/44.Tj2MdA9j_1tIw8K.webp 828w, /_astro/44.Tj2MdA9j_1uQ9ih.webp 1080w, /_astro/44.Tj2MdA9j_2pU6X4.webp 1280w, /_astro/44.Tj2MdA9j_INRJp.webp 1668w, /_astro/44.Tj2MdA9j_20Mett.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;螺旋状の形をしたショートパスタ。語源であるfusoはイタリア語で紡錘（糸を紡ぐ道具）と言う意味。と言われていたり、ライフル銃を意味するイタリア語: fusileが語源だったりと、諸説あるそうです（Wikipediaより。）
コイツは、個人的にどこからどう見てもソースが絡みつきそうな見た目をしているので、パスタの満足感をとても高められそう。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ブラックホールによるスパゲッティ化現象&lt;a href=&quot;#ブラックホールによるスパゲッティ化現象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;余談ですが、超新星爆発が起こると、ブラックホールが生成されることもたまにあるようです。
しかし、恒星が超新星爆発を起こす際、太陽の30倍以上の質量の恒星でないと、重力崩壊が進行しないため、ブラックホールにはならないらしいです。なので、太陽の8倍ぐらいの質量を持つ天体であり、かつ近接連星系の白色矮星である場合に超新星爆発を起こすと、ブラックホールが出現することがあるのかもしれません。&lt;/p&gt;&lt;p&gt;そして、そのブラックホールによって、非常に強く不均一な重力場によって、物体が垂直方向への引き延ばしおよび水平方向の圧縮を受け、物体が細長い形状になる現象が起きます。
その現象のことを、スパゲッティ化現象 (スパゲッティかげんしょう、spaghettification）、もしくはヌードル効果（ヌードルこうか、noodle effect）と呼ぶそうです。スパゲッティのように細長い形状になる現象だからのようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1040&quot; src=&quot;/_astro/61.Dm6Gw0jz_Ui485.webp&quot; srcset=&quot;/_astro/61.Dm6Gw0jz_Z1fliD0.webp 640w, /_astro/61.Dm6Gw0jz_Z14yeLO.webp 750w, /_astro/61.Dm6Gw0jz_2hxPsm.webp 828w, /_astro/61.Dm6Gw0jz_bMV9Y.webp 1080w, /_astro/61.Dm6Gw0jz_ZvM1Qz.webp 1280w, /_astro/61.Dm6Gw0jz_Za7mz4.webp 1668w, /_astro/61.Dm6Gw0jz_Ui485.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;（画像はWikipediaより）&lt;/p&gt;&lt;p&gt;スティーブン・ホーキング博士は、ブラックホールの事象の地平面を通過する際の架空の宇宙飛行士の様子について「頭からつま先までの重力勾配 (掛かる重力の強さの違い) により ”スパゲッティのように引き延ばされる”」と表現していたようです。&lt;/p&gt;&lt;p&gt;つまり、そのブラックホール周辺に人間が立ち入ると、スンゴク身体が引き伸ばされるということですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1792&quot; src=&quot;/_astro/62.-XztTwOe_Z1QwyRT.webp&quot; srcset=&quot;/_astro/62.-XztTwOe_Z228el2.webp 640w, /_astro/62.-XztTwOe_24KNGy.webp 750w, /_astro/62.-XztTwOe_1RXKVB.webp 828w, /_astro/62.-XztTwOe_Z1QwyRT.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;いや、もっと高くなるんでしょうね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原子核パスタに関する記事を書きました。以下まとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;原子核パスタとは中性子星を構成する物質である。&lt;/li&gt;
&lt;li&gt;超新星爆発によって中性子星が形成される。&lt;/li&gt;
&lt;li&gt;超新星爆発は、食べ過ぎて身体が破裂するような現象である。&lt;/li&gt;
&lt;li&gt;超新星爆発を起こすには、超大型ハドロン衝突型加速器が900万台以上必要である。&lt;/li&gt;
&lt;li&gt;パスタの形状と種類（ニョッキ、スパゲッティ、マッケローニ、フジッリ、どれも美味しい。）&lt;/li&gt;
&lt;li&gt;ブラックホールによって、スパゲッティ化現象が起こることがある。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/91.C6Ng1495_27gqP4.webp&quot; srcset=&quot;/_astro/91.C6Ng1495_Z22s3e1.webp 640w, /_astro/91.C6Ng1495_FdWyL.webp 750w, /_astro/91.C6Ng1495_1uaUUc.webp 828w, /_astro/91.C6Ng1495_1MSgFM.webp 1080w, /_astro/91.C6Ng1495_Z2i8nbz.webp 1280w, /_astro/91.C6Ng1495_ZAMUyq.webp 1668w, /_astro/91.C6Ng1495_27gqP4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;少しでも原子核パスタのことを知っていたらフェーズ4が楽しくなるかもしれませんね！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;参考文献&lt;a href=&quot;#参考文献&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mcgill.ca/newsroom/channels/news/nuclear-pasta-hardest-known-substance-universe-289729&quot; target=&quot;_blank&quot;&gt;Nuclear pasta, the hardest known substance in the universe | Newsroom - McGill University&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gizmodo.jp/2018/09/hardest-material-nuclear-pasta.html&quot; target=&quot;_blank&quot;&gt;宇宙一硬い物質は激レア素材の｢核パスタ｣！ | ギズモード・ジャパン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://event.phys.s.u-tokyo.ac.jp/physlab2023/poster/ast-poster01.pdf&quot; target=&quot;_blank&quot;&gt;中性子星の中にパスタ？｜Physics Lab. 2023 宇宙班｜東京大学&lt;/a&gt;・・・PDFです。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そんな感じか～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本当にパスタだったわ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【自作ゲーミングPC】初めてデスクトップPCを組んでいく（準備編）</title><link>https://endorphinbath.com/posts/making-gaming-pc-for-the-first-time/</link><guid isPermaLink="true">https://endorphinbath.com/posts/making-gaming-pc-for-the-first-time/</guid><description>初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCパーツの選び方の一助になれば良いかと思います。</description><pubDate>Fri, 18 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はPCを組んでいくための準備をしますよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;キンキンに冷えるPCが欲しいです・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PCの構成&lt;a href=&quot;#pcの構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ああ～、モンハンワイルズやりて～。でも今のノートPCだとちょっと排熱が弱いかも～。&lt;/p&gt;&lt;p&gt;ということで、今回初めてデスクトップゲーミングPCを自作していきたいと思います。ケースのサイズはミッドタワーです。&lt;/p&gt;&lt;p&gt;今回組み立てるPCの構成はこれで行きます。&lt;/p&gt;



























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Part&lt;/th&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;NVIDIA GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;192,891&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/4g4kPW0&quot; target=&quot;_blank&quot;&gt;AMD Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;104,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Motherboard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RAM&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;ADATA_XPG_LANCER_RGB_AX5U6400C3216G-DCLARWH&lt;/a&gt;&lt;/td&gt;&lt;td&gt;23,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SSD&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N&lt;/a&gt;&lt;/td&gt;&lt;td&gt;17,780&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Supply Unit&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU Cooler&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238/&quot; target=&quot;_blank&quot;&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Fan&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;DEEP COOL FK120 R-FK120-BKNPF1-G-1&lt;/a&gt; x2&lt;/td&gt;&lt;td&gt;2,752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PC Case&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332/&quot; target=&quot;_blank&quot;&gt;Antec FLUX&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://amzn.to/3OMaRMH&quot; target=&quot;_blank&quot;&gt;Windows 11 Home&lt;/a&gt;&lt;/td&gt;&lt;td&gt;15,182&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;各パーツの選び方&lt;a href=&quot;#各パーツの選び方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;各パーツを選ぶ過程で収集した情報をメモっておきます。&lt;/p&gt;&lt;p&gt;まずはGPU、CPUを決めて、それに合うマザボを選定。そして周辺のパーツを選んでいきました。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;GPU&lt;a href=&quot;#gpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GPU。グラフィックボード、ビデオカードとも呼びますね。&lt;/p&gt;&lt;p&gt;このGPUが無いと、いくらCPUの処理性能が高かろうと、最近の高解像度の美麗なゲームで遊ぶことが出来ません。&lt;/p&gt;&lt;p&gt;まずは、NVIDIAのGPU（GeForce RTX系）がラインナップされているページで、目当てのGPUとそれと同じぐらいのGPUの性能を表にまとめました。現在使っているGPUと比較して、次に自分が使うGPUは果たしてどれが良いのかを調べました。&lt;/p&gt;&lt;p&gt;AMDのRadeonは、サポートされていない場合があるので今回は選定の対象外とします。AMDにも公式の比較ページがあるかもしれませんね。&lt;/p&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;NVIDIA&lt;/span&gt;&lt;/div&gt;&lt;div&gt;究極の GeForce GPU 比較&lt;/div&gt;&lt;div&gt;最新の 4 世代の RTX および GTX グラフィックス カード シリーズでの変更点をご確認ください。&lt;/div&gt;&lt;div&gt;www.nvidia.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.nvidia.com/content/dam/en-zz/Solutions/geforce/graphic-cards/50-series/geforce-rtx-50series-og-1200x630.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;NVIDIA GeForce RTXの性能比較表です。&lt;/p&gt;&lt;p&gt;この指標の中でも、CUDA Core、VRAM（Video Random Access Memory）、Max GPU Temperatureを見て選びました。特に、VRAMがある程度確保されていないとゲームがカクついてしまいます。（目安として、8GBのVRAMを搭載したGPUを積んだデスクトップPCの場合、Palworldが紙芝居になることがあるみたいです。）&lt;/p&gt;




















































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;GPU&lt;/th&gt;&lt;th&gt;CUDA Core&lt;/th&gt;&lt;th&gt;Shader Core (TFLOPS)&lt;/th&gt;&lt;th&gt;Ray-Tracing Core (TFLOPS)&lt;/th&gt;&lt;th&gt;Tensor Core (AI TOPS)&lt;/th&gt;&lt;th&gt;Boost Clock (GHz)&lt;/th&gt;&lt;th&gt;Base Clock (GHz)&lt;/th&gt;&lt;th&gt;Memory Type&lt;/th&gt;&lt;th&gt;VRAM (dedicated: GB)&lt;/th&gt;&lt;th&gt;Memory Interface Width (Bit)&lt;/th&gt;&lt;th&gt;Max GPU Temperature (C)&lt;/th&gt;&lt;th&gt;Average Power Consumption (W)&lt;/th&gt;&lt;th&gt;System Requirements Power (W)&lt;/th&gt;&lt;th&gt;Notice&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-20&quot; target=&quot;_blank&quot;&gt;GeForce RTX™ 2060 Max-Q (NVIDIA® Optimus™ Technology対応)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;1920&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1.68&lt;/td&gt;&lt;td&gt;1.37&lt;/td&gt;&lt;td&gt;GDDR6&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;550&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/laptops/30-series/&quot; target=&quot;_blank&quot;&gt;GeForce RTX 3080 Ti Laptop GPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;7424&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1.59&lt;/td&gt;&lt;td&gt;1.125&lt;/td&gt;&lt;td&gt;GDDR6&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-specs&quot; target=&quot;_blank&quot;&gt;GeForceRTX 3080&lt;/a&gt;&lt;/td&gt;&lt;td&gt;8704&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1.71&lt;/td&gt;&lt;td&gt;1.26 / 1.44&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;12 / 10&lt;/td&gt;&lt;td&gt;384 / 320&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-specs&quot; target=&quot;_blank&quot;&gt;GeForceRTX 3080 Ti&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10240&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;1.67&lt;/td&gt;&lt;td&gt;1.37&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;384&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4070&lt;/a&gt;&lt;/td&gt;&lt;td&gt;5888&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;466&lt;/td&gt;&lt;td&gt;2.48&lt;/td&gt;&lt;td&gt;1.92&lt;/td&gt;&lt;td&gt;GDDR6 / GDDR6X&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;186&lt;/td&gt;&lt;td&gt;650&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4070 Ti&lt;/a&gt;&lt;/td&gt;&lt;td&gt;7680&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;641&lt;/td&gt;&lt;td&gt;2.61&lt;/td&gt;&lt;td&gt;2.31&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;226&lt;/td&gt;&lt;td&gt;700&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4070 Ti SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;8448&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;102&lt;/td&gt;&lt;td&gt;706&lt;/td&gt;&lt;td&gt;2.61&lt;/td&gt;&lt;td&gt;2.34&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;226&lt;/td&gt;&lt;td&gt;700&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4080&lt;/a&gt;&lt;/td&gt;&lt;td&gt;9728&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;113&lt;/td&gt;&lt;td&gt;780&lt;/td&gt;&lt;td&gt;2.51&lt;/td&gt;&lt;td&gt;2.21&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;251&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4080 SUPER&lt;/a&gt;&lt;/td&gt;&lt;td&gt;10240&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;121&lt;/td&gt;&lt;td&gt;836&lt;/td&gt;&lt;td&gt;2.55&lt;/td&gt;&lt;td&gt;2.29&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;246&lt;/td&gt;&lt;td&gt;750&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.nvidia.com/ja-jp/geforce/graphics-cards/compare/?section=compare-40&quot; target=&quot;_blank&quot;&gt;GeForce RTX 4090&lt;/a&gt;&lt;/td&gt;&lt;td&gt;16384&lt;/td&gt;&lt;td&gt;83&lt;/td&gt;&lt;td&gt;191&lt;/td&gt;&lt;td&gt;1321&lt;/td&gt;&lt;td&gt;2.52&lt;/td&gt;&lt;td&gt;2.23&lt;/td&gt;&lt;td&gt;GDDR6X&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;384&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;351&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;現在使用しているGPUが「GeForce RTX 3080 Ti Laptop GPU」なので、それよりも少し強いGPUが欲しいと思いました。
そこで選んだのは「GeForce RTX 4080 SUPER」です。
当初は「GeForce RTX 4080」にしようと思っていたのですが、2024-10-22時点ではSUPERの方が全体的に安くなっていたのでSUPERを選びました。&lt;/p&gt;&lt;p&gt;そして次に、そのGPUを購入するに当たって、どのブランドから出品されているGPUにするかを選びます。
その際に参考にした動画がこちらです。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jGORmB6GoH8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;この動画では、GeForce RTX 4080として生産された各GPUにおいて、VRM CurrentやMax Power Limit等の値が比較されています。そして動画の最後に総合的な順位が紹介されています。その順位と、実際に販売されている価格を比較して、GPUを選びました。まあ実際に買ったのは、4080 SUPERですが、大体同じ感じでしょう。&lt;/p&gt;&lt;p&gt;PCの内部は白基調にする予定だったので、「GIGABYTE NVIDIA RTX4080 SUPER：AERO OCモデル」を購入。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;GIGABYTE NVIDIA RTX4080 SUPER 搭載 グラフィックボード GDDR6X 16GB【国内正規代理店品】 GV-N408SAERO OC-16GD&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZNBjMx&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CPU&lt;a href=&quot;#cpu&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PCの心臓部です。このパーツの性能が低いとFPSなどの値において、満足のいくパフォーマンスを出せません。&lt;/p&gt;&lt;p&gt;CPUについても比較表を作成しました。現在使用しているCPUと性能を比較して近しいものを選びたいと思います。（2024-10-22時点では、「Core Ultra 9 285H」の性能がよく分からなかったので空白にしました。新しいものを選んで、Inte Coreの13世代と14世代で発覚したバグみたいなものに引っ掛かったりたくないですしね。）&lt;/p&gt;&lt;p&gt;CPUの比較は以下のページの情報も参考にさせていただきました。こういうまとめ情報は有り難いですね。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pcfreebook.com/article/450856544.html&quot; target=&quot;_blank&quot;&gt;CPU性能比較表【2024年最新版】&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pcbuildnet.com/amd-cpu-table/&quot; target=&quot;_blank&quot;&gt;【AMD版】RyzenCPU・マザーボード対応表。互換性を確認しよう【チップセット・ソケット一覧】&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


























































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;PassMark&lt;/th&gt;&lt;th&gt;Core&lt;/th&gt;&lt;th&gt;Thread&lt;/th&gt;&lt;th&gt;TDP (W)&lt;/th&gt;&lt;th&gt;Rated Clock Frequency (GHz)&lt;/th&gt;&lt;th&gt;Maximum Clock Frequency (GHz)&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;th&gt;CPU Socket&lt;/th&gt;&lt;th&gt;Architecture&lt;/th&gt;&lt;th&gt;Max Memory Speed&lt;/th&gt;&lt;th&gt;Notice&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.intel.co.jp/content/www/jp/ja/products/sku/132214/intel-core-i912900h-processor-24m-cache-up-to-5-00-ghz/specifications.html&quot; target=&quot;_blank&quot;&gt;Intel Core i9-12900H&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;5.0&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Up to DDR5 4800 MT/s&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.intel.co.jp/content/www/jp/ja/products/sku/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz/specifications.html&quot; target=&quot;_blank&quot;&gt;Intel Core i9-12900K&lt;/a&gt;&lt;/td&gt;&lt;td&gt;41613&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;125&lt;/td&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;5.2&lt;/td&gt;&lt;td&gt;66,480&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Intel Core i9-12900&lt;/td&gt;&lt;td&gt;37562&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;74,800&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ryzen 9 5900HX&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;消費電力がCore i9-12900Hの1/3ぐらいらしい。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ryzen 9 7950X&lt;/td&gt;&lt;td&gt;&lt;strong&gt;62775&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;170&lt;/td&gt;&lt;td&gt;4.5&lt;/td&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;79,800&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/desktops/ryzen/7000-series/amd-ryzen-9-7950x3d.html&quot; target=&quot;_blank&quot;&gt;Ryzen 9 7950X3D&lt;/a&gt;&lt;/td&gt;&lt;td&gt;62421&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;4.2&lt;/td&gt;&lt;td&gt;5.7&lt;/td&gt;&lt;td&gt;91,800&lt;/td&gt;&lt;td&gt;AM5&lt;/td&gt;&lt;td&gt;Zen 4&lt;/td&gt;&lt;td&gt;2x1R DDR5-5200&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ryzen 9 7900X&lt;/td&gt;&lt;td&gt;51810&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;170&lt;/td&gt;&lt;td&gt;4.7&lt;/td&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;61,900&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ryzen 9 7900X3D&lt;/td&gt;&lt;td&gt;&lt;strong&gt;50349&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;4.4&lt;/td&gt;&lt;td&gt;5.6&lt;/td&gt;&lt;td&gt;69,780&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/desktops/ryzen/7000-series/amd-ryzen-9-7900.html&quot; target=&quot;_blank&quot;&gt;Ryzen 9 7900&lt;/a&gt;&lt;/td&gt;&lt;td&gt;49343&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;5.4&lt;/td&gt;&lt;td&gt;59,980&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/desktops/ryzen/9000-series/amd-ryzen-7-9700x.html&quot; target=&quot;_blank&quot;&gt;Ryzen 7 9700X&lt;/a&gt;&lt;/td&gt;&lt;td&gt;38283&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;5.5&lt;/td&gt;&lt;td&gt;61480&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.intel.co.jp/content/www/jp/ja/products/sku/236849/intel-core-ultra-9-processor-185h-24m-cache-up-to-5-10-ghz/specifications.html&quot; target=&quot;_blank&quot;&gt;Core Ultra 9 185H&lt;/a&gt;&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;3.8&lt;/td&gt;&lt;td&gt;5.1&lt;/td&gt;&lt;td&gt;96,000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Core Ultra 9 285H&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;このCPUの表は、AMD公式のチップの詳細ページから書き抜いた情報をまとめたものです。表中のチップ名をクリックして各チップの詳細ページに遷移できます。&lt;/p&gt;&lt;p&gt;そして今回は、AMD RyzenのCPUから選んでいきたいと思います。なぜなら前述のIntel Coreで発覚したバグの記事を見て、わざわざIntelにする理由がないと思ったためです。&lt;/p&gt;&lt;p&gt;CPUも、現在使っているCPU（Intel Core i9-12900H）と近しい性能のものを選んでいきたいと思います。しかしながら、その現在使っているCPUもCore i9でかなり強めなCPUなので、それと近しい性能のRyzenチップも価格が高いですね・・・。&lt;/p&gt;&lt;p&gt;Ryzen 7チップの中で選ぶとなると、Intel Core i9-12900Hよりもコア数とスレッド数が落ちてしまうので、Ryzen 9から選ぶことにしました。しかし、僕のCPUの主な用途としては、ゲームで遊ぶのと、動画のエンコードをすることなのですが、ゲームに関しては現在のCPUでも大抵は問題なさそうですし、動画のエンコードも現在の速度で問題ありません。&lt;/p&gt;&lt;p&gt;なので、性能がほとんど変わらない（少し上がりましたが、）「AMD Ryzen 9 7950X3D」にしました。この「X3D」系の接尾辞が付くCPUを選んだ判断材料はこれらの要素です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ゲーム性能に重きを置いたCPUらしい。&lt;/li&gt;
&lt;li&gt;接尾辞が付いていないCPUよりも排熱が少ないらしい。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マザーボード&lt;a href=&quot;#マザーボード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GPUとCPUを選んだので、次にそれらのパーツと相性の良いマザボを選んでいきたいと思います。
特に、選んだCPUに対応しているマザボを選ばないとPCとして動かなくなる可能性があります。&lt;/p&gt;&lt;p&gt;そこで、マザボも比較してみました。しかし、そこまで多くのラインナップを比較したわけではありません。拡張スロットにキャプチャーカードとかサウンドカードを挿すわけではありませんし、マザボに関する知識が色々とあるわけではないので、B6◯◯系のマザボを価格.comで調べて、1ページ目の上位に掲載されていたものをまとめました。&lt;/p&gt;


















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;FirmFactor&lt;/th&gt;&lt;th&gt;Memory Type&lt;/th&gt;&lt;th&gt;DisplayPort&lt;/th&gt;&lt;th&gt;HDMI&lt;/th&gt;&lt;th&gt;WiFi&lt;/th&gt;&lt;th&gt;Bluetooth&lt;/th&gt;&lt;th&gt;LAN&lt;/th&gt;&lt;th&gt;Slot&lt;/th&gt;&lt;th&gt;CPU Socket&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001614264/&quot; target=&quot;_blank&quot;&gt;B650 PG Lightning WiFi (B650 AM5 ATX) ドスパラ限定モデル&lt;/a&gt;&lt;/td&gt;&lt;td&gt;ATX&lt;/td&gt;&lt;td&gt;DIMM DDR5&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2x PCI Express 4.02x PCI Express 4.0&lt;/td&gt;&lt;td&gt;SocketAM5&lt;/td&gt;&lt;td&gt;19,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001607553/&quot; target=&quot;_blank&quot;&gt;B650 Steel Legend WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;ATX&lt;/td&gt;&lt;td&gt;DIMM DDR5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1x PCI Express 5.01x PCI Express 3.02x PCI Express 4.0&lt;/td&gt;&lt;td&gt;SocketAM5&lt;/td&gt;&lt;td&gt;27,480&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001537141/&quot; target=&quot;_blank&quot;&gt;B650M Pro RS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MicroATX&lt;/td&gt;&lt;td&gt;DIMM DDR5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;False&lt;/td&gt;&lt;td&gt;False&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1x PCI Express 4.01x PCI Express 3.0&lt;/td&gt;&lt;td&gt;SocketAM5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.amazon.co.jp/%E3%80%90Amazon-co-jp%E9%99%90%E5%AE%9A%E3%80%91-ASRock-Lightning-Bluetooth%E6%90%AD%E8%BC%89-%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81%E3%80%91/dp/B0CJT9KKSD/ref=sr_1_4&quot; target=&quot;_blank&quot;&gt;ASRock マザーボード B650M PG Lightning WiFi&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MicroATX&lt;/td&gt;&lt;td&gt;DIMM DDR5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1 PCIe 4.0 x161 PCIe 3.0 x16&lt;/td&gt;&lt;td&gt;SocketAM5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001604185/&quot; target=&quot;_blank&quot;&gt;B650M GAMING PLUS WIFI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MicroATX&lt;/td&gt;&lt;td&gt;DIMM DDR5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;True&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1x PCI Express 4.02x PCI Express 3.0&lt;/td&gt;&lt;td&gt;SocketAM5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;これらのマザボから、実際に購入するものを選びます。マザボに対する観点は以下になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;今回選んだCPUチップが対応している「AMD B650」のチップセットを搭載している。&lt;/li&gt;
&lt;li&gt;対応CPUソケットは、Socket AM5である。&lt;/li&gt;
&lt;li&gt;グラボのサイズはATX以上にする。（おそらく、サイズ的にMicroATXだとGeForce RTX 4080を挿すことが出来ない。）&lt;/li&gt;
&lt;li&gt;Zen4&lt;/li&gt;
&lt;li&gt;Wi-Fi、Bluetooth搭載の有無&lt;/li&gt;
&lt;li&gt;念の為、ディスプレイ出力ポートは2つ欲しい。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして今回選んだのが、ASRockの「B650 Steel Legend WiFi」です。白いですしね。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BcugDE&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ASRock マザーボード B650 Steel Legend WiFi AMD Ryzen 7000 シリーズ CPU (Soket AM5) 対応 B650 チップセット DDR5 ATX マザーボード 【国内正規代理店品】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BcugDE&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;RAM（メモリ）&lt;a href=&quot;#ramメモリ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、そのマザボに適用できるRAM（メモリ）を選んでいきます。
RAMは、CPUが作業するためのリソース（作業机）を提供してくれます。&lt;/p&gt;&lt;p&gt;RAMでは比較表は作成しませんでした。
しかしながら、RAMを選ぶ上で調べたことをメモっておきます。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;AMD EXPO&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;RAMは、CPUチップを換装した時にある程度オーバークロックできるように、「AMD EXPO」のOCプロファイル（プリセット）が設定できるものを選びます。（ちなみに、Intelのチップは「XMP 3.0」というOCプロファイルが設定できるものがあるみたいですね。）&lt;/p&gt;&lt;p&gt;このAMD EXPOから、「最大メモリ速度」をCPUが対応している値に合わせていきます。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Max Memory Speed&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;CPUには、「最大メモリ速度（Max Memory Speed）」という指標があり、この指標でどれほどの性能のRAMを使うとCPUの性能をしっかり発揮できるのかが分かります。AMDでもIntelでも公式のCPUの詳細ページで確認できます。この最大メモリ速度をCPUと合わせられるものを選びます。&lt;/p&gt;&lt;p&gt;そして、先ほどの「オーバークロック」をすることで、自分が使うCPUの「最大メモリ速度」に対応したクロック周波数に、RAMを設定できます。設定すると次に、「CAS Latency」という指標を確認することになります。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CAS Latency&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;それから、RAMの稼働速度を左右する要素の一つに、メモリタイミング（CL: CAS Latency）というものもあります。&lt;/p&gt;&lt;p&gt;このCL値が低いほど、RAMの速度は速くなります。このCLはBIOSで任意に下げることが可能なのですが、下げ過ぎるとPCの動作がおかしくなりそうですし、保証外となることもあるので、基本的にはプロファイルがサポートされたRAMを選びたいです。（CL値に関する設定値はめちゃくちゃ多いらしい。なので設定をミスると取り返しが付かなくなるかもしれない。）&lt;/p&gt;&lt;p&gt;そして、CPUのシステムメモリタイプ「DDR5」に対応しているものの中で、このCLが低いものを選んでいきました。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;今回選んだRAM&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;そして今回選んだRAMが、「Kingston FURY Beast White EXPO 32GB 5600MT/s KF556C36BWEK2-32」です。&lt;/p&gt;&lt;p&gt;調べた大観としては、メモリタイプDDR5は、DDR4よりもCL値が大きく、2024-10-22時点では最適化が過渡期であると感じました。なので、DDR5の5200MHz帯のRAMの中では、CL値が40よりも小さいものを見つけることは出来ませんでした。（DDR4のメモリタイプではもう少し小さいものは散見されます。）&lt;/p&gt;&lt;p&gt;16GBの2枚組を選んだ理由としては、DDR5のメモリタイプでは、メモリを4枚挿すとクロックが落ちてパフォーマンスが落ちるらしいです。
また、Kingston（キングストン）はRAMを内製している企業ですので、RAMの動作の信頼性は高いと思いました。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;だった筈なのですが・・・、&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;このKingstonのRAM、国内でほとんど流通していないので、購入したショップで在庫が無いだの、国外から仕入れる必要があるだの言われて、国外から自宅に届くまで2週間ぐらい待っていました。
しかし、実際に届いたものが、「KF556C36BWEK2-32」ではなく「KF556C36BWEK-16」だったりして、なんかもうちゃんと手に入れられる気がしなかったので、このRAMを手に入れることは諦めました・・・（笑）&lt;/p&gt;&lt;p&gt;そこで、家電量販店のPCコーナーで探したものにすることに決めました。
なので今回選んだRAMは、これです。「ADATA XPG LANCER RGB AX5U6400C3216G-DCLARWH」です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;XPG Lancer RGB DDR5 6400MHz 32GB (2x16GB) CL32 UDIMM 288ピン デスクトップ SDRAM DDR5 デュアルチャンネル RAMキット ホワイトヒートシンク (AX5U6400C3216G-DCLARWH)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZstoTd&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;このRAMのメモリ速度（クロック周波数）は、6400 MT/sです。先程のCPUのクロック周波数よりもだいぶ大きいですが・・・、大丈夫です。これで動いてしまいます。後から調べてみると、PCの処理は全体的にCPUよりもメモリで詰まり気味らしいです。&lt;/p&gt;&lt;p&gt;なので、CPUのクロック周波数よりメモリのクロック周波数が低いのは良くないのですが、メモリのクロック周波数が高い分には問題なさそう。（まあ、実際に動いたPCでこの文章を書いているわけなので。）&lt;/p&gt;&lt;p&gt;ちなみに、AMDのCPUは「AGESA」というファームウェアで制御されているらしいですが、そいつはアップデート「1.0.0.7b」で最大8,000MT/sのクロック周波数を回せるDDR5メモリのサポートもしているみたいで、メモリのクロック周波数はよっぽど高くても問題は無いのかもしれない。（値段とCAS Latencyも重要ですけど。）&lt;/p&gt;&lt;a href=&quot;https://www.corsair.com/jp/ja/explorer/diy-builder/memory/why-you-should-care-about-amd-agesa-updates/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://di93cklwx5sfc.cloudfront.net/ww/en/explorer/static/cove/images/corsair_favicon.e47d7675cc27.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@CORSAIR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;AMD AGESAのアップデートに注目すべき理由&lt;/div&gt;&lt;div&gt;AMDはRyzen 7000シリーズCPUのメモリサポートに大きな改良を加え、AGESAアップデートがその鍵となる。&lt;/div&gt;&lt;div&gt;www.corsair.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://d1q3zw97enxzq2.cloudfront.net/images/DOMINATOR_RGB_PLATINUM_GREY_DDR5.width-1500.format-webp.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;はい、そして、今回選んだメモリのメモリタイミングも、32-39-39と高いです。（しかし実際にBIOSを覗いたら「32-38-38」と書いてあり更に速かった！）そして、メモリの寸法は、133.35 x 43.56 x 8mmでした。（後述のCPUクーラー「DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G」に対してギリ収まりました。）
これで、RAMは決まりました。&lt;/p&gt;&lt;p&gt;ちなみに、AMDから公式で「Ryzen™ プロセッサーのオーバークロック・メモリーの互換性リスト」というものあったりするのですが、このリストに掲載されているものは世界で流通しているRAMの一部に過ぎないので、Googleで「amd expo メモリ kakaku」と調べて、価格.comのリストで確認する方が商品探しが楽でした。&lt;/p&gt;&lt;a href=&quot;https://www.amd.com/ja/products/processors/ryzen-compatible-memory.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.amd.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.amd.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.amd.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SSD&lt;a href=&quot;#ssd&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PCで使うデータを保存する貯蔵庫です。
ストレージは、選んだマザボに対応しているものを選びます。&lt;/p&gt;&lt;p&gt;マザボのスペック内の「M.2サイズ」に、「M key：type 2230/2260/2280」と書いてあったので、その数字が書いてあるM.2 SSDを用意すれば良いでしょう。&lt;/p&gt;&lt;p&gt;個人的には2TBのものが欲しかったので、「KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N」を選びました。購入した時にちょうどプライム感謝祭だったのがとても嬉しかったですね。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;キオクシア KIOXIA 内蔵 SSD 2TB NVMe M.2 Type 2280 PCIe Gen 4.0×4 (最大読込: 5,000MB/s) 国産BiCS FLASH TLC搭載 国内正規代理店5年保証 EXCERIA PLUS G3 SSD-CK2.0N4PLG3N【国内正規代理店保証品】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3OOndE5&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Power Supply Unit&lt;a href=&quot;#power-supply-unit&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Power Supply Unit（電源ユニット）が無いと、PCは動きません。人間の身体でいうところの骨髄のような部分でしょうか。
電源ユニットを選ぶ上で重要なのが「出力電流（W）」です。この値が自分が選んだCPUとGPUに見合っていないとちゃんとPCが動きません。&lt;/p&gt;&lt;p&gt;そこで、必要になってくる出力電流ですが、以下の情報を参考にしました。ぶっちゃけ初心者素人ではここらへんはスペックだけでは判断できないなと思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://iamkusunoki.com/rtx4080-powerunit/&quot; target=&quot;_blank&quot;&gt;RTX 4080の消費電力とおすすめの電源容量 – クスノキの家&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jp.msi.com/blog/recommended-psu-table&quot; target=&quot;_blank&quot;&gt;Recommended PSU Table&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NVIDIA GeForce RTX 4080 SUPERのシステム要件電力が「750W」、AMD Ryzen™ 9 7950X3DのデフォルトTDPが「120W」。合計の電力が超えている気がするのですが、まあここは「850W」の電源ユニットで挑戦してみることにします。&lt;/p&gt;&lt;p&gt;そして、電源ユニットの比較をしました。ワット数が850Wのもののみで比較しました。2024-10-22時点で価格.comで上位のものをまとめました。&lt;/p&gt;

















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Supplier&lt;/th&gt;&lt;th&gt;Power Capacity (W)&lt;/th&gt;&lt;th&gt;Size (mm)&lt;/th&gt;&lt;th&gt;Compatible Standards&lt;/th&gt;&lt;th&gt;CPU Connector&lt;/th&gt;&lt;th&gt;Weight (g)&lt;/th&gt;&lt;th&gt;Color&lt;/th&gt;&lt;th&gt;Price&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001550129/&quot; target=&quot;_blank&quot;&gt;PX850G R-PX850G-FC0B-JP [黒]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;DEEPCOOL&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 160 x 86&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Black&lt;/td&gt;&lt;td&gt;14,980&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001553667/&quot; target=&quot;_blank&quot;&gt;MAG A850GL PCIE5&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MSI&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 140 x 86&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Black&lt;/td&gt;&lt;td&gt;15,768&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001578583/&quot; target=&quot;_blank&quot;&gt;MAG A850GL PCIE5 WHITE [ホワイト]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;MSI&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 140 x 86&lt;/td&gt;&lt;td&gt;ATX 3.0&lt;/td&gt;&lt;td&gt;4+4ピンEPS x2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;White&lt;/td&gt;&lt;td&gt;16,800&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001362986/&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+&lt;/a&gt;&lt;/td&gt;&lt;td&gt;玄人志向&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 150 x 86&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Black&lt;/td&gt;&lt;td&gt;13,032&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001604119/&quot; target=&quot;_blank&quot;&gt;KRPW-GA850W/90+/WHITE [ホワイト]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;玄人志向&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 150 x 86&lt;/td&gt;&lt;td&gt;ATX12V Ver2.52&lt;/td&gt;&lt;td&gt;4+4ピンATX x2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;White&lt;/td&gt;&lt;td&gt;14,273&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://kakaku.com/item/K0001335778/&quot; target=&quot;_blank&quot;&gt;SST-DA850-G [ブラック]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;SILVERSTONE&lt;/td&gt;&lt;td&gt;850&lt;/td&gt;&lt;td&gt;150 x 140 x 86&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Black&lt;/td&gt;&lt;td&gt;12,980&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;マザボのサイズがATXなので、その規格に対応した電源ユニットを選びます。（あと、白いことも重要。）
そこで選んだ電源ユニットは「KRPW-GA850W/90+/WHITE」です。まあ、ケーブルも大体合ってると、思います・・・。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;玄人志向 電源ユニット 850W ATX 電源 80 PLUS ゴールド PC電源 フルプラグイン セミファンレス ホワイト KRPW-GA850W/90+/WHITE&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3OOF4Li&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CPU Cooler and Case Fan&lt;a href=&quot;#cpu-cooler-and-case-fan&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;CPUを冷やす「CPUクーラー」と、その冷やした時に発生する排熱をPCケースの外へと逃がす「ケースファン」を選びます。&lt;/p&gt;&lt;p&gt;CPUがしっかり冷やされないと、PCの本来の性能を発揮することが出来ません。現在、僕はゲーミングノートPCを普段遣いしていますが、ノートPCはデスクトップPCよりも排熱性能が低くなってしまいがちなので、どうしてもゲームのFPSがしっかりと出すことが出来ません。（例えばAPEX Legendsの標準画質で遊ぶ時に、FPSが100ちょっとしか出せない・・・）&lt;/p&gt;&lt;p&gt;なので、今回デスクトップPCを組み立てるからには排熱はちゃんとしていきます。まあ初めてなので、冷却方法は空冷にしますが。&lt;/p&gt;&lt;p&gt;まずは、「CPUケース」から選びます。初めて自作するので、ケース内部のゆとりを持てるようなものを選びます。
そこで選んだケースが、「Antec FLUX」です。&lt;/p&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/0761345101332&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://shop.tsukumo.co.jp/img/99/common/favicon.ico?1695877353&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;自作PC・PCパーツが豊富！PC専門店【ツクモ】&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Antec アンテック FLUX｜ツクモ公式通販サイト&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;shop.tsukumo.co.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このPCケースは、前面：120mm x3（吸気）、背面：140mm x1（排気）、底面：120mm x1（吸気）になっています。そこでまずは、これらの付属のケースファンに加えてさらにケースファンを追加するかどうか悩みました。&lt;/p&gt;&lt;p&gt;その際に、この動画で似た構成のPCを組み立てていたので、その内容を参考とした場合、さらにケースファンを付けた方が良いという結論に至りました。動画内では水冷クーラーを使用していて、僕が買おうと思ったPCケースに付いているファンの数よりも、ファンの数が多いです。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/MM1mZ9xMR7E/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;自作したことがない人間からするとこういう動画は判断材料の一つとなってとても有り難いです。（また、今回の僕の場合は、「ryzen 9750x3d geforce 4090 super pc customize」等とYouTubeで検索して似た構成のPC組み立て動画を見て選んでも良かったかもしれません。）&lt;/p&gt;&lt;p&gt;そこで次に、「ケースファン」を選びます。PCケースが前述の通り、前面：120mm x3（吸気）、背面：140mm x1（排気）、底面：120mm x1（吸気）になっているので、上面に、排気用のファンを2個設置しようと思います。
そこで選んだケースファンが、「DEEP COOL FK120 R-FK120-BKNPF1-G-1」です。2個買います。&lt;/p&gt;&lt;a href=&quot;https://www.pc-koubou.jp/products/detail.php?product_id=896096&amp;amp;utm_source=affiliate&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=_Vv6e0WKODg&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.pc-koubou.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.pc-koubou.jp&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.pc-koubou.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして次に、「CPUクーラー」を選びます。&lt;/p&gt;&lt;p&gt;これはちょっともう、自作PCを作ったことがある知人から聞きました。どれぐらいのスペックを持っているCPUクーラーが充分に冷ませるかどうかは初心者では全然判断できないと思います。冷却性能は、ヒートシンクの大きさ、風の抜けの良さでも左右されるので、実際に買ってみないと分からないまでもありそうです。&lt;/p&gt;&lt;p&gt;「AMD AM5」のソケットに対応しているものから選びます。今回は「DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G」にしました。白いのが良いです。&lt;/p&gt;&lt;a href=&quot;https://shop.tsukumo.co.jp/goods/6933412728238&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://shop.tsukumo.co.jp/img/99/common/favicon.ico?1695877351&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;自作PC・PCパーツが豊富！PC専門店【ツクモ】&lt;/span&gt;&lt;/div&gt;&lt;div&gt;DEEPCOOL AK620 DIGITAL WH R-AK620-WHADMN-G｜ツクモ公式通販サイト&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;shop.tsukumo.co.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;周辺機器を揃える&lt;a href=&quot;#周辺機器を揃える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PC本体の構成は決まったので、次に周辺機器を揃えます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;モニター&lt;a href=&quot;#モニター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回使用していくモニターは、「IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz EX-LDQ271JAB」です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49vAJpO&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;IODATA モニター MiniLED ゲーミング 27インチ 180Hz 1ms WQHD AHVAパネル 非光沢 広色域 ブラック 無輝点保証対応 (量子ドット/HDR1000/HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-LDQ271JAB&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49vAJpO&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;サイズは27インチ、画質はWQHD、リフレッシュレートは180Hzです。FPSとかをそこまでやるわけではないので、一旦これで行きます。これより価格が高いものになると10万円台になってくるので、まだちょっとそこまで手は出せない。&lt;/p&gt;&lt;p&gt;Mini LEDと量子ドットを採用しているので、見栄えのあるゲーム体験が出来そうです。「広視野角AHVA高速パネル」というものも採用していて、ある程度斜めから見ても発色が良さそう。NVIDIA G-Syncにも対応。&lt;/p&gt;&lt;p&gt;あと、縦横回転もするらしいので、コードを書く時とかにも便利そうです。VESA規格（Video Electronics Standards Association）にも対応しているので、ディスプレイアーム、モニターアームにも取り付けられます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;スピーカー&lt;a href=&quot;#スピーカー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;元々ノートPCユーザーだったので持っていなかったんですよね、スピーカー。
スピーカーは、一体型のものを使っていきたいと思います。左右で分かれていると音質は良いんでしょうが、持ち運びが少し面倒です。しかし、サウンドバーだと少し横にデカイので、それよりは横にコンパクトなものにしたい。&lt;/p&gt;&lt;p&gt;というわけで、以下の記事で「Fender Audio RIFF」というスピーカーにしました。コイツ、かなり良いです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/ranking-2024-of-integrated-speakers/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【2024年版】個人的な一体型スピーカーランキングと簡素なレビュー&lt;/div&gt;&lt;div&gt;2024年に僕が試聴した「一体型スピーカー」にランキング付けをして、簡単なレビューと商品紹介をする記事です。Fender Audio RIFFや、Anker Soundcore Motion X600などが上位です。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/10/20241021_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;キーボード&lt;a href=&quot;#キーボード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;キーボードは「Logicool G913 TKL」です。ロープロファイルが好きな方はこういうのが良いでしょう。まあでもG515の方が新しくて安いのかな？&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D80Ua0&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;SteelSeries ゲーミングキーボード テンキーレス 青軸 有線 日本語配列 有機ELディスプレイ搭載 Apex 7 TKL Blue Switch 64756&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D80Ua0&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リストレスト&lt;a href=&quot;#リストレスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;キーボードを叩く際に役に立つリストレスト。僕は「SteelSeries Apex 7 TKL Blue Switch 64756」に付属していたリストレストを使っています。&lt;/p&gt;&lt;p&gt;表面が布地や革じゃなくてゴムなので汚れたら拭きやすく、個人的に手首が沈まないフカフカしていないものが好みなので、これを一生使っていくような気がします。木製だと痛くなってくるし。 (ちなみに、印鑑を押す時の台座代わりにもなる笑)&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3Vt16H6&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;SteelSeries ゲーミングキーボード テンキーレス 青軸 有線 日本語配列 有機ELディスプレイ搭載 Apex 7 TKL Blue Switch 64756&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3Vt16H6&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マウス&lt;a href=&quot;#マウス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以前に安くなっていた時に買った「Logicool G PRO X SUPERLIGHT」です。やっぱり軽い。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZLxMOM&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZLxMOM&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マウスパッド&lt;a href=&quot;#マウスパッド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;対してFPSもやらないので、Amazonベーシックで十分です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZIGjSm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Amazonベーシック マウスパッド ゲーム用 Mサイズ ブラック 正方形, 長さ270 x 幅 320 mm&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZIGjSm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PCスタンド&lt;a href=&quot;#pcスタンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PCは机の上に置きたくないので、下に置けるスタンドに置いて、キャスターで動かせるようにしておきます。商品の名前は、「THANKO キャスター付き「可変CPUスタンド」 PCAJWDHBK」です。&lt;/p&gt;&lt;p&gt;そうすれば日々の掃除も楽になります。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D80qRe&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;THANKO キャスター付き「可変CPUスタンド」 PCAJWDHBK PYZONE&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D80qRe&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;準備はおわり。&lt;a href=&quot;#準備はおわり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これで自作PCを組み立てるための準備は終わりました！&lt;/p&gt;&lt;p&gt;次回は、組立編に入ります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/making-gaming-pc-first-assembly/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【自作ゲーミングPC】初めてデスクトップPCを組んでいく（組立編）&lt;/div&gt;&lt;div&gt;初めて自作PCを組み立てることにしたので、実際にPCを使うところまでに収集した情報をまとめています。PCの組み立て方の一助になれば良いかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241111_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;準備が終わったか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;楽しみになってきたぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】2024年に使ったMod一覧（Update 8）</title><link>https://endorphinbath.com/posts/satisfactory-mods-in-2024/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-mods-in-2024/</guid><description>僕がSatisfactoryで利用したModを紹介します。Modを使うとゲームの回転が速くなって、より大きなものを作れるようになりました。より満足のいく体験になりました。</description><pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Modは楽しいんだな～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作れる工場の規模が様変わるよな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;有志Modの底力を見た・・・！&lt;a href=&quot;#有志modの底力を見た&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Satisfactory Update 8では、ゲームエンジンがUnreal Engine 4からUnreal Engine 5へと移行されて、ほとんどのModは使えなくなるだろうと言われていました。
しかし、かなりのModがUpdate 8以降でも使用できました・・・！
圧倒的感謝・・・！！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今年使ったModをおさらいしよう。&lt;a href=&quot;#今年使ったmodをおさらいしよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というわけで、今年僕が工場を彩るために利用させてもらったModを、この記事で紹介していきたいと思います。今年は沢山使わせてもらったので、きっと貴方の目に止まるものがあるでしょう。そう信じています！
以下が一覧表です。それでは1つずつ見ていきましょう！&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Recipe Randomizer - CL&lt;/li&gt;
&lt;li&gt;Pak Utility Mod&lt;/li&gt;
&lt;li&gt;Enhanced Conveyors&lt;/li&gt;
&lt;li&gt;Refined Power&lt;/li&gt;
&lt;li&gt;The DISMANTLER - Quick Dismantle&lt;/li&gt;
&lt;li&gt;Space Market 2&lt;/li&gt;
&lt;li&gt;Water Pools Plus&lt;/li&gt;
&lt;li&gt;Big Storage Tank and MegaPump&lt;/li&gt;
&lt;li&gt;All Nodes Pure&lt;/li&gt;
&lt;li&gt;All Weapons Magazine Size 100&lt;/li&gt;
&lt;li&gt;Infinite Zoop&lt;/li&gt;
&lt;li&gt;Awesome Points x100&lt;/li&gt;
&lt;li&gt;Storage Teleporter&lt;/li&gt;
&lt;li&gt;Faster Manual Crafting Redux&lt;/li&gt;
&lt;li&gt;Auto - Sort Inventory&lt;/li&gt;
&lt;li&gt;FicsIt-Cam&lt;/li&gt;
&lt;li&gt;NoFog&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;Recipe Randomizer - CL&lt;a href=&quot;#recipe-randomizer---cl&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今年のSatisfactoryの動画は、このModを骨子として作りました。
このModを入れると、製品のレシピがランダムになります。（設備のレシピはランダムになりません。）
なので、コンクリートを作るために、鉄板が必要になったりします。（つまりバニラの倍以上の鉄板が必要になるわけですね！）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_01.CEOWZpUN_Z2uRaH3.webp&quot; srcset=&quot;/_astro/01_01.CEOWZpUN_1EfARE.webp 640w, /_astro/01_01.CEOWZpUN_2pfEj9.webp 750w, /_astro/01_01.CEOWZpUN_1LGEUk.webp 828w, /_astro/01_01.CEOWZpUN_Z22hwS6.webp 1080w, /_astro/01_01.CEOWZpUN_ZoJuwR.webp 1280w, /_astro/01_01.CEOWZpUN_Z6HrGP.webp 1668w, /_astro/01_01.CEOWZpUN_Z2uRaH3.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;製品のレシピは、そのレシピがアンロックされた時に決定されるようです。
そしてそのレシピは、そのアンロックされた時に既にレシピがアンロックされている製品を使用したものになるみたいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_02.7OSmPGWS_1aQ0X4.webp&quot; srcset=&quot;/_astro/01_02.7OSmPGWS_ZPAsi1.webp 640w, /_astro/01_02.7OSmPGWS_Z5AoQw.webp 750w, /_astro/01_02.7OSmPGWS_ZI9ofl.webp 828w, /_astro/01_02.7OSmPGWS_1DqDM1.webp 1080w, /_astro/01_02.7OSmPGWS_Z1NdrFG.webp 1280w, /_astro/01_02.7OSmPGWS_Z1vboPE.webp 1668w, /_astro/01_02.7OSmPGWS_1aQ0X4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、他のModで使用するレシピが、バニラで使える製品のレシピになったりすることも・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01_03.Dxzu9Cbs_Z2hoXBn.webp&quot; srcset=&quot;/_astro/01_03.Dxzu9Cbs_ZWpayT.webp 640w, /_astro/01_03.Dxzu9Cbs_Zcp78p.webp 750w, /_astro/01_03.Dxzu9Cbs_ZOX6we.webp 828w, /_astro/01_03.Dxzu9Cbs_Z1NOkMq.webp 1080w, /_astro/01_03.Dxzu9Cbs_Zbhirc.webp 1280w, /_astro/01_03.Dxzu9Cbs_6JJnP.webp 1668w, /_astro/01_03.Dxzu9Cbs_Z2hoXBn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Pak Utility Mod&lt;a href=&quot;#pak-utility-mod&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;基本的には、このModを使って移動していました。
「Pak Utility Mod」の代表的な機能としては、「空が飛べる」ようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_01.CBY6jXxW_Z1ft4ty.webp&quot; srcset=&quot;/_astro/02_01.CBY6jXxW_Z6ln6U.webp 640w, /_astro/02_01.CBY6jXxW_DDFjz.webp 750w, /_astro/02_01.CBY6jXxW_15FUK.webp 828w, /_astro/02_01.CBY6jXxW_ZLSqEB.webp 1080w, /_astro/02_01.CBY6jXxW_PDAFC.webp 1280w, /_astro/02_01.CBY6jXxW_18FDvE.webp 1668w, /_astro/02_01.CBY6jXxW_Z1ft4ty.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;4mの高さの土台を100個以上積み上げなければ到底到達することが出来ない高さでも、Spaceキーを押しっぱなしにすれば上がることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_02.DmbGED1r_Vhpan.webp&quot; srcset=&quot;/_astro/02_02.DmbGED1r_262Ujf.webp 640w, /_astro/02_02.DmbGED1r_Z2e9a4c.webp 750w, /_astro/02_02.DmbGED1r_2dtYlU.webp 828w, /_astro/02_02.DmbGED1r_1oR2Yk.webp 1080w, /_astro/02_02.DmbGED1r_Z22M3tn.webp 1280w, /_astro/02_02.DmbGED1r_Z1JK0Dl.webp 1668w, /_astro/02_02.DmbGED1r_Vhpan.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、このModでは、様々なコマンドをメッセージコンソールで入力して、様々なことが行えるみたいです。（しかしながら、物によってはこのゲームの醍醐味が無くなってしまいそうなコマンドもありますね・・・）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;!creative&lt;/code&gt; - disables build cost&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!creativepower&lt;/code&gt; - disables power requirements&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!fly&lt;/code&gt; - toggles fly mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!nocost&lt;/code&gt; - disables build cost&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!nopower&lt;/code&gt; - disables power requirements&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!tp x y z [rotX rotY rotZ]&lt;/code&gt; - teleports to the specified location (&lt;code&gt;~&lt;/code&gt; before a number teleports you relative to your current location)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!tp save [name]&lt;/code&gt; - saves your current location with the specified name&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;https://ficsit.app/mod/UtilityMod&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ficsit.app&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ficsit.app&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ficsit.app&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Enhanced Conveyors&lt;a href=&quot;#enhanced-conveyors&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これが無かったら設備を大量に配置することは叶わなかっただろう。
例えば、このベルトコンベアMk.5の速度を・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_01.CMX3nOnb_beBvl.webp&quot; srcset=&quot;/_astro/03_01.CMX3nOnb_1Jxwwr.webp 640w, /_astro/03_01.CMX3nOnb_2uxzWV.webp 750w, /_astro/03_01.CMX3nOnb_1QYAz7.webp 828w, /_astro/03_01.CMX3nOnb_DOfki.webp 1080w, /_astro/03_01.CMX3nOnb_2hmhFw.webp 1280w, /_astro/03_01.CMX3nOnb_Z2uMNin.webp 1668w, /_astro/03_01.CMX3nOnb_beBvl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;速度を・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_02.CHJmSeSM_1hCxBV.webp&quot; srcset=&quot;/_astro/03_02.CHJmSeSM_Z2jqDD6.webp 640w, /_astro/03_02.CHJmSeSM_Z1yqAcB.webp 750w, /_astro/03_02.CHJmSeSM_Z2bYzAq.webp 828w, /_astro/03_02.CHJmSeSM_1KdbqS.webp 1080w, /_astro/03_02.CHJmSeSM_Z1GqU1O.webp 1280w, /_astro/03_02.CHJmSeSM_Z1ooRbM.webp 1668w, /_astro/03_02.CHJmSeSM_1hCxBV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毎分1200から、毎分2000にスピードアップ！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_03.DY4sBCf6_Z1EceKc.webp&quot; srcset=&quot;/_astro/03_03.DY4sBCf6_1FUh4m.webp 640w, /_astro/03_03.DY4sBCf6_2qUkuQ.webp 750w, /_astro/03_03.DY4sBCf6_1Nml72.webp 828w, /_astro/03_03.DY4sBCf6_Z1bBAVf.webp 1080w, /_astro/03_03.DY4sBCf6_qUqoY.webp 1280w, /_astro/03_03.DY4sBCf6_IWtf1.webp 1668w, /_astro/03_03.DY4sBCf6_Z1EceKc.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、モノ凄い勢いで物資を運搬することが出来ます。速すぎて見えなくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_04.Ce98dCqV_Z2dGNck.webp&quot; srcset=&quot;/_astro/03_04.Ce98dCqV_1aMd8u.webp 640w, /_astro/03_04.Ce98dCqV_1UMgyY.webp 750w, /_astro/03_04.Ce98dCqV_1iehba.webp 828w, /_astro/03_04.Ce98dCqV_Z1K7ann.webp 1080w, /_astro/03_04.Ce98dCqV_Z7z829.webp 1280w, /_astro/03_04.Ce98dCqV_arTMS.webp 1668w, /_astro/03_04.Ce98dCqV_Z2dGNck.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;特に、ベルトコンベアMk.5だと採鉱機Mk.3をオーバークロックした状態では、採掘した鉱石を運び切ることが出来ませんが、このModを使うことで可能になります。（画像はMk.2のもの）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_05.CUvpx3_z_Z10nj0H.webp&quot; srcset=&quot;/_astro/03_05.CUvpx3_z_1HcCzl.webp 640w, /_astro/03_05.CUvpx3_z_2scG0P.webp 750w, /_astro/03_05.CUvpx3_z_1ODGC1.webp 828w, /_astro/03_05.CUvpx3_z_ZwMFbK.webp 1080w, /_astro/03_05.CUvpx3_z_15Jm9t.webp 1280w, /_astro/03_05.CUvpx3_z_1nLoYv.webp 1668w, /_astro/03_05.CUvpx3_z_Z10nj0H.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Refined Power&lt;a href=&quot;#refined-power&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これが無かったら設備を大量に配置することは叶わなかっただろう。その2。&lt;/p&gt;&lt;p&gt;このModの詳しい解説記事はこちらから閲覧できます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-refinedpower/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】Refined Powerの使い方&lt;/div&gt;&lt;div&gt;Satisfactoryで利用できるMod「Refined Power」の使い方を網羅的に紹介します。バニラとはまた違った発電方式で楽しいです。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/11/20241103_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このModでは、発電方式を増やすことが出来ます。
今年、僕が増やした発電方式は以下のとおりです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;風力発電&lt;/li&gt;
&lt;li&gt;太陽光発電&lt;/li&gt;
&lt;li&gt;水力発電&lt;/li&gt;
&lt;li&gt;火力発電&lt;/li&gt;
&lt;li&gt;原子炉（リアクター）&lt;/li&gt;
&lt;li&gt;太陽帆（ソーラーセイル）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;風力発電は、設置して電線に繋げば自然と動き始めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_03.grsZYRn7_1VU2p8.webp&quot; srcset=&quot;/_astro/02_03.grsZYRn7_282chK.webp 640w, /_astro/02_03.grsZYRn7_Z2c9S5G.webp 750w, /_astro/02_03.grsZYRn7_2ftgkq.webp 828w, /_astro/02_03.grsZYRn7_2puFe5.webp 1080w, /_astro/02_03.grsZYRn7_Z129qeC.webp 1280w, /_astro/02_03.grsZYRn7_ZJ7noA.webp 1668w, /_astro/02_03.grsZYRn7_1VU2p8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この世界の風には波があるようで、発電量が多い時と少ない時があるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/02_06.BfK2lcJd_21QULE.webp&quot; srcset=&quot;/_astro/02_06.BfK2lcJd_Z27XeYM.webp 640w, /_astro/02_06.BfK2lcJd_Z1mXbyi.webp 750w, /_astro/02_06.BfK2lcJd_Z20waW7.webp 828w, /_astro/02_06.BfK2lcJd_2uryAB.webp 1080w, /_astro/02_06.BfK2lcJd_ZWcwR6.webp 1280w, /_astro/02_06.BfK2lcJd_ZEau24.webp 1668w, /_astro/02_06.BfK2lcJd_21QULE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽光発電も、設置して電線に繋げば自然と動き始めます。（太陽が出ている時だけ。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_06.CaHtaCtX_2mOtdL.webp&quot; srcset=&quot;/_astro/03_06.CaHtaCtX_aMtpB.webp 640w, /_astro/03_06.CaHtaCtX_UMwQ6.webp 750w, /_astro/03_06.CaHtaCtX_iexsh.webp 828w, /_astro/03_06.CaHtaCtX_Z2eM1Ld.webp 1080w, /_astro/03_06.CaHtaCtX_ZBeYpY.webp 1280w, /_astro/03_06.CaHtaCtX_ZjcVzW.webp 1668w, /_astro/03_06.CaHtaCtX_2mOtdL.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;太陽と発電機の間に設備を置くと、上手く発電することが出来なくなってしまうので注意。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/03_07.DEXmXLJK_1ut5gU.webp&quot; srcset=&quot;/_astro/03_07.DEXmXLJK_ZkVF4H.webp 640w, /_astro/03_07.DEXmXLJK_p3nlM.webp 750w, /_astro/03_07.DEXmXLJK_ZduB22.webp 828w, /_astro/03_07.DEXmXLJK_1X3I5R.webp 1080w, /_astro/03_07.DEXmXLJK_Z1tAnmP.webp 1280w, /_astro/03_07.DEXmXLJK_Z1bykwN.webp 1668w, /_astro/03_07.DEXmXLJK_1ut5gU.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;水力発電も、これまた設置して電線に繋ぐだけで自然と動き始めます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_03.C148ceRh_Zd7NFJ.webp&quot; srcset=&quot;/_astro/04_03.C148ceRh_Z1dlswm.webp 640w, /_astro/04_03.C148ceRh_Zslp5R.webp 750w, /_astro/04_03.C148ceRh_Z15TotG.webp 828w, /_astro/04_03.C148ceRh_frO8d.webp 1080w, /_astro/04_03.C148ceRh_1RYQtr.webp 1280w, /_astro/04_03.C148ceRh_2b1Tjt.webp 1668w, /_astro/04_03.C148ceRh_Zd7NFJ.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発電できるスポットは、惑星の中を探す必要があるので、スキャンして探索しましょう。（ワイヤーと鋼鉄パイプを忘れないように！）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_01.wu2USSHK_2cwFlp.webp&quot; srcset=&quot;/_astro/04_01.wu2USSHK_Z1WBQAp.webp 640w, /_astro/04_01.wu2USSHK_Z1cBN9U.webp 750w, /_astro/04_01.wu2USSHK_Z1PaMxJ.webp 828w, /_astro/04_01.wu2USSHK_Z2p4ODz.webp 1080w, /_astro/04_01.wu2USSHK_ZLwMil.webp 1280w, /_astro/04_01.wu2USSHK_ZtuJsj.webp 1668w, /_astro/04_01.wu2USSHK_2cwFlp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;火力発電もあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_07.CAyY5QWF_VSVIY.webp&quot; srcset=&quot;/_astro/04_07.CAyY5QWF_Zm1Jhz.webp 640w, /_astro/04_07.CAyY5QWF_nXj8U.webp 750w, /_astro/04_07.CAyY5QWF_ZezFeT.webp 828w, /_astro/04_07.CAyY5QWF_1ptzxV.webp 1080w, /_astro/04_07.CAyY5QWF_Z22avTL.webp 1280w, /_astro/04_07.CAyY5QWF_Z1J8t4J.webp 1668w, /_astro/04_07.CAyY5QWF_VSVIY.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これは熱で水を温めて高圧蒸気にすることでタービンを動かし、そのタービンが発電機（ジェネレータ）を動かして発電します。
高圧蒸気を作る過程で排出された二酸化炭素と、タービンを回したことで排出された低圧蒸気は、外気へ逃がす必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_08.BwFcSvTJ_WJkaw.webp&quot; srcset=&quot;/_astro/04_08.BwFcSvTJ_1L50tN.webp 640w, /_astro/04_08.BwFcSvTJ_2w53Ui.webp 750w, /_astro/04_08.BwFcSvTJ_1Sw4wt.webp 828w, /_astro/04_08.BwFcSvTJ_1qjWYt.webp 1080w, /_astro/04_08.BwFcSvTJ_Z21k8te.webp 1280w, /_astro/04_08.BwFcSvTJ_Z1Ii5Dc.webp 1668w, /_astro/04_08.BwFcSvTJ_WJkaw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その水を温める熱を作るためには燃料が必要です。バイオマス、石炭、原油、はたまたウランが燃料として使えるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_09.C14NpVOe_Z23qpu1.webp&quot; srcset=&quot;/_astro/04_09.C14NpVOe_c54jT.webp 640w, /_astro/04_09.C14NpVOe_W57Ko.webp 750w, /_astro/04_09.C14NpVOe_jw8mz.webp 828w, /_astro/04_09.C14NpVOe_Z1zPLF4.webp 1080w, /_astro/04_09.C14NpVOe_2GfFa.webp 1280w, /_astro/04_09.C14NpVOe_kIivc.webp 1668w, /_astro/04_09.C14NpVOe_Z23qpu1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;原子炉というものも利用できました。このModを入れると「ソリウム」や「デューテリウム」等の原料が追加されるので、それらを使ったレシピをこなしていくことで発電することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_10.BxQhG3Gu_1nJaXo.webp&quot; srcset=&quot;/_astro/04_10.BxQhG3Gu_Zl9UCK.webp 640w, /_astro/04_10.BxQhG3Gu_oP7MJ.webp 750w, /_astro/04_10.BxQhG3Gu_ZdHQA5.webp 828w, /_astro/04_10.BxQhG3Gu_1QjNMl.webp 1080w, /_astro/04_10.BxQhG3Gu_Z1AkhFm.webp 1280w, /_astro/04_10.BxQhG3Gu_Z1iiePk.webp 1668w, /_astro/04_10.BxQhG3Gu_1nJaXo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;発電するまでの流れは、ディーニウムから濃縮ディーニウム、濃縮ディーニウムからディーノリウム、ディーノリウムから無濾過デューテリウム、無濾過デューテリウムから液体デューテリウム、そして、液体デューテリウムを空のリアクターコアに充填して先進的なリアクターコアを作ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_11.DXBLh6Vg_27MGJT.webp&quot; srcset=&quot;/_astro/04_11.DXBLh6Vg_19lfO5.webp 640w, /_astro/04_11.DXBLh6Vg_1Tljfz.webp 750w, /_astro/04_11.DXBLh6Vg_1gMjQK.webp 828w, /_astro/04_11.DXBLh6Vg_Z2tNNf5.webp 1080w, /_astro/04_11.DXBLh6Vg_ZQgKSQ.webp 1280w, /_astro/04_11.DXBLh6Vg_ZyeI3O.webp 1668w, /_astro/04_11.DXBLh6Vg_27MGJT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのリアクターコアをリアクターに搬入すると、晴れてリアクターを使った発電を開始することが出来ます・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_12.C8HRdnTx_Pttwx.webp&quot; srcset=&quot;/_astro/04_12.C8HRdnTx_BMXMK.webp 640w, /_astro/04_12.C8HRdnTx_1mN2ef.webp 750w, /_astro/04_12.C8HRdnTx_Jf2Pq.webp 828w, /_astro/04_12.C8HRdnTx_1j47lu.webp 1080w, /_astro/04_12.C8HRdnTx_Z28zY7d.webp 1280w, /_astro/04_12.C8HRdnTx_Z1PxVhb.webp 1668w, /_astro/04_12.C8HRdnTx_Pttwx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リアクターには小さいものと大きいものがあり、大きいものになるとこれぐらい大きくなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_13.MO4CG4MD_Z1Rh95S.webp&quot; srcset=&quot;/_astro/04_13.MO4CG4MD_Z2pEfqJ.webp 640w, /_astro/04_13.MO4CG4MD_Z1EEc0f.webp 750w, /_astro/04_13.MO4CG4MD_Z2idbo4.webp 828w, /_astro/04_13.MO4CG4MD_Z1oGvgV.webp 1080w, /_astro/04_13.MO4CG4MD_dPw4i.webp 1280w, /_astro/04_13.MO4CG4MD_vRyTk.webp 1668w, /_astro/04_13.MO4CG4MD_Z1Rh95S.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしていよいよ、発電のレベルは宇宙クラスに進出します。太陽帆（ソーラーセイル）を使って太陽からエネルギーを採取、そのソーラーセイルから発電するための熱を手に入れることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_14.CD3CEYvd_Z1JC2HF.webp&quot; srcset=&quot;/_astro/04_14.CD3CEYvd_mGsWs.webp 640w, /_astro/04_14.CD3CEYvd_17GwnW.webp 750w, /_astro/04_14.CD3CEYvd_u8x08.webp 828w, /_astro/04_14.CD3CEYvd_Z1h2oSI.webp 1080w, /_astro/04_14.CD3CEYvd_luCrv.webp 1280w, /_astro/04_14.CD3CEYvd_DwFhx.webp 1668w, /_astro/04_14.CD3CEYvd_Z1JC2HF.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、そのソーラーセイルを稼働させ続けるためには材料を補充し続ける必要があります。4種類の「イカロスリペアキット」を作り続けるラインを作りましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_15.DTVwVycE_GCyDX.webp&quot; srcset=&quot;/_astro/04_15.DTVwVycE_Z2aA5Ra.webp 640w, /_astro/04_15.DTVwVycE_Z1pA2qF.webp 750w, /_astro/04_15.DTVwVycE_Z2391Ou.webp 828w, /_astro/04_15.DTVwVycE_1adcsU.webp 1080w, /_astro/04_15.DTVwVycE_Z2hqSYM.webp 1280w, /_astro/04_15.DTVwVycE_Z1YoQ9K.webp 1668w, /_astro/04_15.DTVwVycE_GCyDX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしてイカロスリペアキットが充分に届いたソーラーセイルは熱を生み出します。
その熱を使って、火力発電の時と同じ要領で、イカロスライトレシーバーから生み出される高圧蒸気でタービンを動かしてジェネレーターを回します。タービンを回したことで排出された低圧蒸気はもちろん外気へ逃がす必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/04_16.B71vTqWG_Z1xsOVf.webp&quot; srcset=&quot;/_astro/04_16.B71vTqWG_Z1U065Q.webp 640w, /_astro/04_16.B71vTqWG_Z1a02Em.webp 750w, /_astro/04_16.B71vTqWG_Z1My23b.webp 828w, /_astro/04_16.B71vTqWG_Z14Sc7i.webp 1080w, /_astro/04_16.B71vTqWG_xDPdV.webp 1280w, /_astro/04_16.B71vTqWG_PFS3X.webp 1668w, /_astro/04_16.B71vTqWG_Z1xsOVf.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;The DISMANTLER - Quick Dismantle&lt;a href=&quot;#the-dismantler---quick-dismantle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;破壊神です。
建設工事現場にあるクレーンのような外見をしており、この先でぼんやり光っている球体の中にある設備を全て一気に撤去する事ができます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_01.BLgLgTZA_1u7zAk.webp&quot; srcset=&quot;/_astro/05_01.BLgLgTZA_ZaVXu1.webp 640w, /_astro/05_01.BLgLgTZA_z34Vt.webp 750w, /_astro/05_01.BLgLgTZA_Z3uTrl.webp 828w, /_astro/05_01.BLgLgTZA_1WHdph.webp 1080w, /_astro/05_01.BLgLgTZA_Z1tVS3q.webp 1280w, /_astro/05_01.BLgLgTZA_Z1bTPdo.webp 1668w, /_astro/05_01.BLgLgTZA_1u7zAk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;光っている球体の大きさは変えることが可能です。そして、その球体の中に入っている設備を、このクレーンのメニューUIから確認することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_02.ChIzhPnc_Z7vWSC.webp&quot; srcset=&quot;/_astro/05_02.ChIzhPnc_TTDNa.webp 640w, /_astro/05_02.ChIzhPnc_1ETHeE.webp 750w, /_astro/05_02.ChIzhPnc_12lHPP.webp 828w, /_astro/05_02.ChIzhPnc_l3EUk.webp 1080w, /_astro/05_02.ChIzhPnc_1XAHgy.webp 1280w, /_astro/05_02.ChIzhPnc_2gCK6A.webp 1668w, /_astro/05_02.ChIzhPnc_Z7vWSC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「DISMANTLE ALL」をクリックすると、全ての設備が音もなく消えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/05_03.BJVhn56E_Z2eeEpV.webp&quot; srcset=&quot;/_astro/05_03.BJVhn56E_Z26lFs6.webp 640w, /_astro/05_03.BJVhn56E_Z1llC1B.webp 750w, /_astro/05_03.BJVhn56E_Z1XTBpq.webp 828w, /_astro/05_03.BJVhn56E_Z1KE1AY.webp 1080w, /_astro/05_03.BJVhn56E_Z86YfK.webp 1280w, /_astro/05_03.BJVhn56E_9U3zh.webp 1668w, /_astro/05_03.BJVhn56E_Z2eeEpV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Space Market 2&lt;a href=&quot;#space-market-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;草を売りまくって、プルトニウム燃料棒を買う・・・！
このModで建設できる設備を使うと、そんなことが可能になります。
その設備とは、「Space Market 2」という設備であり、外見は「Space Elevator」と瓜二つです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_01.Cwr4TGKe_4wGHl.webp&quot; srcset=&quot;/_astro/06_01.Cwr4TGKe_Z21NEJx.webp 640w, /_astro/06_01.Cwr4TGKe_Z1gNBj3.webp 750w, /_astro/06_01.Cwr4TGKe_Z1TmAGR.webp 828w, /_astro/06_01.Cwr4TGKe_x7kwi.webp 1080w, /_astro/06_01.Cwr4TGKe_2aEmRw.webp 1280w, /_astro/06_01.Cwr4TGKe_2sGpHy.webp 1668w, /_astro/06_01.Cwr4TGKe_4wGHl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この設備のメニュー内で任意の製品を売って、また別の製品を買うことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_02.B3OMWBdK_Z1vwFSC.webp&quot; srcset=&quot;/_astro/06_02.B3OMWBdK_2ldSHY.webp 640w, /_astro/06_02.B3OMWBdK_Z1XXbEs.webp 750w, /_astro/06_02.B3OMWBdK_2sEWKE.webp 828w, /_astro/06_02.B3OMWBdK_Z12W34F.webp 1080w, /_astro/06_02.B3OMWBdK_zzYgy.webp 1280w, /_astro/06_02.B3OMWBdK_RC26A.webp 1668w, /_astro/06_02.B3OMWBdK_Z1vwFSC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、前述の「Recipe Randomizer - CL」で材料が手に入らなくなってしまい、生産することが出来なくなってしまった製品も、手に入れることが出来るようになります。
僕の場合は、材料を購入して、生産できるようにしたりもしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/06_03.D3lkP-Jp_Z17GqCk.webp&quot; srcset=&quot;/_astro/06_03.D3lkP-Jp_1wWPOe.webp 640w, /_astro/06_03.D3lkP-Jp_2hWTfI.webp 750w, /_astro/06_03.D3lkP-Jp_1EoTQT.webp 828w, /_astro/06_03.D3lkP-Jp_ZE6MNn.webp 1080w, /_astro/06_03.D3lkP-Jp_XqewQ.webp 1280w, /_astro/06_03.D3lkP-Jp_1gshmS.webp 1668w, /_astro/06_03.D3lkP-Jp_Z17GqCk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Water Pools Plus&lt;a href=&quot;#water-pools-plus&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう水がどこにあるのかを気にする必要はありません。
このModでプールを設置することで、揚水機を設置できる場所を生み出すことが出来ます。プールの中の見た目は漆黒ですが、ちゃんとそこには水が存在しているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_01.CJXOBZK__Z1nzaVk.webp&quot; srcset=&quot;/_astro/07_01.CJXOBZK__12qpSC.webp 640w, /_astro/07_01.CJXOBZK__1Mqtk7.webp 750w, /_astro/07_01.CJXOBZK__19RtVi.webp 828w, /_astro/07_01.CJXOBZK__ZTYx7n.webp 1080w, /_astro/07_01.CJXOBZK__HxudQ.webp 1280w, /_astro/07_01.CJXOBZK__10zx3S.webp 1668w, /_astro/07_01.CJXOBZK__Z1nzaVk.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんなにも多く設置してしまえば、こんなにも多くの水場の上に揚水機を設置出来てしまいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07_02.S0J7zDVt_ZGLL2F.webp&quot; srcset=&quot;/_astro/07_02.S0J7zDVt_2cOoK1.webp 640w, /_astro/07_02.S0J7zDVt_Z27mFCq.webp 750w, /_astro/07_02.S0J7zDVt_2kgsMG.webp 828w, /_astro/07_02.S0J7zDVt_Zec8dI.webp 1080w, /_astro/07_02.S0J7zDVt_1okT7v.webp 1280w, /_astro/07_02.S0J7zDVt_1GmVWx.webp 1668w, /_astro/07_02.S0J7zDVt_ZGLL2F.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Big Storage Tank and MegaPump&lt;a href=&quot;#big-storage-tank-and-megapump&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;大量の水が手に入る。
このModでは、通常と同じサイズの揚水機で何倍もの大量の水を搬出することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/08_01.BAT3jlZj_20YBY2.webp&quot; srcset=&quot;/_astro/08_01.BAT3jlZj_Z9Ug7B.webp 640w, /_astro/08_01.BAT3jlZj_A4MiS.webp 750w, /_astro/08_01.BAT3jlZj_Z2tc4V.webp 828w, /_astro/08_01.BAT3jlZj_2tzfMY.webp 1080w, /_astro/08_01.BAT3jlZj_ZX4PEI.webp 1280w, /_astro/08_01.BAT3jlZj_ZF2MOG.webp 1668w, /_astro/08_01.BAT3jlZj_20YBY2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この揚水機からはパイプラインを5本伸ばすことが出来ます。ちなみにオーバークロックしても、通常のパイプラインMk.2では搬出し切ることが出来ませんねぇ。大量過ぎますねぇ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/08_02.CBTjcwNa_TKezG.webp&quot; srcset=&quot;/_astro/08_02.CBTjcwNa_Z117w4D.webp 640w, /_astro/08_02.CBTjcwNa_Zg7sD9.webp 750w, /_astro/08_02.CBTjcwNa_ZSFs1X.webp 828w, /_astro/08_02.CBTjcwNa_1nkRoD.webp 1080w, /_astro/08_02.CBTjcwNa_Z24je44.webp 1280w, /_astro/08_02.CBTjcwNa_Z1Lhbe2.webp 1668w, /_astro/08_02.CBTjcwNa_TKezG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;All Nodes Pure&lt;a href=&quot;#all-nodes-pure&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これで工場の回転を速くしてしまいましょう。
「Recipe Randomizer - CL」を使うと、とんでもない数量の製品が材料として要求されることがあります。
そのため、原料の数量も大量に用意する必要が出てきました。
そこで使用したのが、この「All Nodes Pure」です。全ての鉱床の濃度が「Pure」になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/09_01.D1iQJY7t_WWKkR.webp&quot; srcset=&quot;/_astro/09_01.D1iQJY7t_M35wh.webp 640w, /_astro/09_01.D1iQJY7t_1x38WL.webp 750w, /_astro/09_01.D1iQJY7t_Tu9yW.webp 828w, /_astro/09_01.D1iQJY7t_1qxo9O.webp 1080w, /_astro/09_01.D1iQJY7t_Z216HiS.webp 1280w, /_astro/09_01.D1iQJY7t_Z1I4EsQ.webp 1668w, /_astro/09_01.D1iQJY7t_WWKkR.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Pure」は「Impure」の4倍の量の鉱石を採掘できますからね。このModがあるかないかでゲームスピードは大きく変わってきますね。その分だけ大量に設備を設置できるようになりますが、おそらくRAMのリソースの消費量もデカくなったような気がします・・・（ちなみに僕が作っているワールドは、RAMを10GB以上使います。）
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/09_02.y6RhFYGX_CY217.webp&quot; srcset=&quot;/_astro/09_02.y6RhFYGX_LoLnL.webp 640w, /_astro/09_02.y6RhFYGX_1woOOg.webp 750w, /_astro/09_02.y6RhFYGX_SPPqr.webp 828w, /_astro/09_02.y6RhFYGX_16yEP4.webp 1080w, /_astro/09_02.y6RhFYGX_Z2l5qCD.webp 1280w, /_astro/09_02.y6RhFYGX_Z233nMB.webp 1668w, /_astro/09_02.y6RhFYGX_CY217.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;All Weapons Magazine Size 100&lt;a href=&quot;#all-weapons-magazine-size-100&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;戦闘がスゴく楽しくなります。
このModで、銃やノーべリスクを一気に100発まで放出することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_01.1wFPgXB__ZTFYt1.webp&quot; srcset=&quot;/_astro/10_01.1wFPgXB__22oBNs.webp 640w, /_astro/10_01.1wFPgXB__Z2hMsyY.webp 750w, /_astro/10_01.1wFPgXB__29PFQ8.webp 828w, /_astro/10_01.1wFPgXB__Zr6lE4.webp 1080w, /_astro/10_01.1wFPgXB__1bqFGa.webp 1280w, /_astro/10_01.1wFPgXB__1tsIwc.webp 1668w, /_astro/10_01.1wFPgXB__ZTFYt1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リロードなしで放出できるので、これだけ大量のノーべリスクも一気に設置することが出来ます。絶対に起爆するなよ。こんな目の前で絶対に起爆するなよ。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/10_02.BXMiI9FV_ZVCdO1.webp&quot; srcset=&quot;/_astro/10_02.BXMiI9FV_IhEXv.webp 640w, /_astro/10_02.BXMiI9FV_1thIp0.webp 750w, /_astro/10_02.BXMiI9FV_PIJ1b.webp 828w, /_astro/10_02.BXMiI9FV_Zt2A04.webp 1080w, /_astro/10_02.BXMiI9FV_19urla.webp 1280w, /_astro/10_02.BXMiI9FV_1rwubc.webp 1668w, /_astro/10_02.BXMiI9FV_ZVCdO1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Infinite Zoop&lt;a href=&quot;#infinite-zoop&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;とても気持ちよく建設できるModです。
このModを入れて研究を完了させると、土台や壁を一気にZoop出来る数が増えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_01.4zzKecft_Z1f3U14.webp&quot; srcset=&quot;/_astro/11_01.4zzKecft_Z24pgnm.webp 640w, /_astro/11_01.4zzKecft_Z1jpcVR.webp 750w, /_astro/11_01.4zzKecft_Z1VXckG.webp 828w, /_astro/11_01.4zzKecft_ZLthc7.webp 1080w, /_astro/11_01.4zzKecft_Q3K97.webp 1280w, /_astro/11_01.4zzKecft_195MY9.webp 1668w, /_astro/11_01.4zzKecft_Z1f3U14.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Zoop出来る数を増やすための研究材料は、だんだん難しい製品になっていくので、初期の内に100個の土台をZoop出来たりはしません。その部分は、ゲーム性を保持した良設計になっていると思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/11_02.B9Q6nRkY_sOsUI.webp&quot; srcset=&quot;/_astro/11_02.B9Q6nRkY_r40sf.webp 640w, /_astro/11_02.B9Q6nRkY_1c43SJ.webp 750w, /_astro/11_02.B9Q6nRkY_yv4uU.webp 828w, /_astro/11_02.B9Q6nRkY_Vp6JF.webp 1080w, /_astro/11_02.B9Q6nRkY_Z2veYI2.webp 1280w, /_astro/11_02.B9Q6nRkY_Z2dcVS0.webp 1668w, /_astro/11_02.B9Q6nRkY_sOsUI.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、個ぐらいZoop出来るようになると、とんでもないほどの爽快感が待ち構えています。
バニラでは一度に10個までしかZoop出来ませんので、個Zoop出来るようになると、縦✕横で　　倍のZoopを実現することが出来ます。一気にコンクリートやシリカが消費される様を見るのは圧巻です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Awesome Points x100&lt;a href=&quot;#awesome-points-x100&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;沢山交換できるようになります。
こっちのModでは、Awesome Sinkで獲得できるクーポンの数が100倍増えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1057&quot; height=&quot;588&quot; src=&quot;/_astro/12_01.XeXpS-wf_Zd3IFd.webp&quot; srcset=&quot;/_astro/12_01.XeXpS-wf_Z18p8EA.webp 640w, /_astro/12_01.XeXpS-wf_4InHi.webp 750w, /_astro/12_01.XeXpS-wf_D21X8.webp 828w, /_astro/12_01.XeXpS-wf_Zd3IFd.webp 1057w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのため、パイオニア像やトカゲイヌ像を大量に購入できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;594&quot; src=&quot;/_astro/12_02.L-xabxHi_Z11LlyU.webp&quot; srcset=&quot;/_astro/12_02.L-xabxHi_Z1loj1G.webp 640w, /_astro/12_02.L-xabxHi_1mb5tX.webp 750w, /_astro/12_02.L-xabxHi_WqiDe.webp 828w, /_astro/12_02.L-xabxHi_Z11LlyU.webp 1054w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Big Statue」というModも利用すれば、「大量に」、「大きい」像を設置することが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;594&quot; src=&quot;/_astro/12_03.BcNqyUWe_VfMtD.webp&quot; srcset=&quot;/_astro/12_03.BcNqyUWe_XKVJr.webp 640w, /_astro/12_03.BcNqyUWe_ZpMmrg.webp 750w, /_astro/12_03.BcNqyUWe_Z2jY1qL.webp 828w, /_astro/12_03.BcNqyUWe_VfMtD.webp 1059w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Storage Teleporter&lt;a href=&quot;#storage-teleporter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そんなに長いベルトコンベアはもう要らないよっ。
このModで追加される設備「Item Teleporter」を使用すると、別の場所にある「Item Teleporter」からまた別の場所に設置した「Item Teleporter」に物資をテレポートさせることが出来るようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_01.B0YKeLHq_Z17IC2l.webp&quot; srcset=&quot;/_astro/13_01.B0YKeLHq_2bYl6F.webp 640w, /_astro/13_01.B0YKeLHq_Z28cJgL.webp 750w, /_astro/13_01.B0YKeLHq_2jqp9l.webp 828w, /_astro/13_01.B0YKeLHq_ZE8Ydo.webp 1080w, /_astro/13_01.B0YKeLHq_Xo37P.webp 1280w, /_astro/13_01.B0YKeLHq_1gq5WR.webp 1668w, /_astro/13_01.B0YKeLHq_Z17IC2l.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_01_05.C-DJSUex_1xCks6.webp&quot; srcset=&quot;/_astro/13_01_05.C-DJSUex_drqgs.webp 640w, /_astro/13_01_05.C-DJSUex_Z29VdJx.webp 750w, /_astro/13_01_05.C-DJSUex_1FmCGx.webp 828w, /_astro/13_01_05.C-DJSUex_Z183JEz.webp 1080w, /_astro/13_01_05.C-DJSUex_srvQF.webp 1280w, /_astro/13_01_05.C-DJSUex_ZqNou7.webp 1668w, /_astro/13_01_05.C-DJSUex_1xCks6.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_02.BuwEu36H_Z1goFkX.webp&quot; srcset=&quot;/_astro/13_02.BuwEu36H_ZKoL5d.webp 640w, /_astro/13_02.BuwEu36H_ZoHDI.webp 750w, /_astro/13_02.BuwEu36H_ZCWH2x.webp 828w, /_astro/13_02.BuwEu36H_ZMO2w1.webp 1080w, /_astro/13_02.BuwEu36H_OHYOd.webp 1280w, /_astro/13_02.BuwEu36H_17K2Ef.webp 1668w, /_astro/13_02.BuwEu36H_Z1goFkX.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_03.DK-YQJ2p_ZmmHIG.webp&quot; srcset=&quot;/_astro/13_03.DK-YQJ2p_zpDIi.webp 640w, /_astro/13_03.DK-YQJ2p_1kpH9M.webp 750w, /_astro/13_03.DK-YQJ2p_GQHKX.webp 828w, /_astro/13_03.DK-YQJ2p_6cU5g.webp 1080w, /_astro/13_03.DK-YQJ2p_1IJWqu.webp 1280w, /_astro/13_03.DK-YQJ2p_21M0gw.webp 1668w, /_astro/13_03.DK-YQJ2p_ZmmHIG.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Item Teleporter」にはそれぞれにID（というよりも、位置付けとしてはグループですね。）を設定できます。
そして、そのIDごとにワールド上で設置されている「Item Teleporter」の場所を確認することが出来る、「Storage Teleporter HUB」という設備もあったりします。「Item Teleporter」をしこたま設置した時に重宝しそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/13_04.DokKD7TC_ZBvUnE.webp&quot; srcset=&quot;/_astro/13_04.DokKD7TC_Zp6vfQ.webp 640w, /_astro/13_04.DokKD7TC_kSxaD.webp 750w, /_astro/13_04.DokKD7TC_ZhErdb.webp 828w, /_astro/13_04.DokKD7TC_Z8VhyH.webp 1080w, /_astro/13_04.DokKD7TC_1tAJLw.webp 1280w, /_astro/13_04.DokKD7TC_1LCMBy.webp 1668w, /_astro/13_04.DokKD7TC_ZBvUnE.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Faster Manual Crafting Redux&lt;a href=&quot;#faster-manual-crafting-redux&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;手動のクラフトも高速にしてしまえ。
そうです、このModで己のクラフトスピードさえも速くすることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/14_01.CD46x_f0_Z8oVXg.webp&quot; srcset=&quot;/_astro/14_01.CD46x_f0_5PW5x.webp 640w, /_astro/14_01.CD46x_f0_PQ0w2.webp 750w, /_astro/14_01.CD46x_f0_di18d.webp 828w, /_astro/14_01.CD46x_f0_kaFPG.webp 1080w, /_astro/14_01.CD46x_f0_1WHIbU.webp 1280w, /_astro/14_01.CD46x_f0_2fJL1W.webp 1668w, /_astro/14_01.CD46x_f0_Z8oVXg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕のように「Recipe Randomizer - CL」によって手動クラフトでないと製造できない製品が材料になった場合に、このModが役立つと思います。
このModを入れる前は、食事を摂っている間や、風呂に入っている間も、Satisfactoryを起動してクラフトしていました。そうしないといつまで経っても終わらないから。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/14_02.u1XzQJt9_4EVTv.webp&quot; srcset=&quot;/_astro/14_02.u1XzQJt9_1zkddT.webp 640w, /_astro/14_02.u1XzQJt9_2kkgEo.webp 750w, /_astro/14_02.u1XzQJt9_1GLhgz.webp 828w, /_astro/14_02.u1XzQJt9_xfzIs.webp 1080w, /_astro/14_02.u1XzQJt9_2aMC4G.webp 1280w, /_astro/14_02.u1XzQJt9_2sOETI.webp 1668w, /_astro/14_02.u1XzQJt9_4EVTv.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、このModを使うとクラッシュすることがよくあります・・・。
なので、このModが入っている時にクラフトする時は事前にセーブをしておきましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Auto - Sort Inventory&lt;a href=&quot;#auto---sort-inventory&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これが地味にスゴイ役立つ。
例えば、自分の遺体から転がった所持品を拾った際に、自動でソートしてくれるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15_01.Bc0GuRcA_Z1bU0PV.webp&quot; srcset=&quot;/_astro/15_01.Bc0GuRcA_12Nmhp.webp 640w, /_astro/15_01.Bc0GuRcA_1MNpHT.webp 750w, /_astro/15_01.Bc0GuRcA_1afqk5.webp 828w, /_astro/15_01.Bc0GuRcA_ZIkn1Y.webp 1080w, /_astro/15_01.Bc0GuRcA_TcEjf.webp 1280w, /_astro/15_01.Bc0GuRcA_1ceH9h.webp 1668w, /_astro/15_01.Bc0GuRcA_Z1bU0PV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先ほど拾った所持品はこのように並び替えられます。いちいちソートボタンをクリックする必要がないので、スゴイ助かります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/15_02.C8aZIQXE_Z74pkx.webp&quot; srcset=&quot;/_astro/15_02.C8aZIQXE_zTKdA.webp 640w, /_astro/15_02.C8aZIQXE_1kTNE5.webp 750w, /_astro/15_02.C8aZIQXE_HlOgg.webp 828w, /_astro/15_02.C8aZIQXE_lvdtp.webp 1080w, /_astro/15_02.C8aZIQXE_1Y3fOD.webp 1280w, /_astro/15_02.C8aZIQXE_2h5iEF.webp 1668w, /_astro/15_02.C8aZIQXE_Z74pkx.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;FicsIt-Cam&lt;a href=&quot;#ficsit-cam&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Satisfactoryの美麗な世界を記録する、最高のファインダーです。
このModは、いわゆる「カメラMod」です。
Satisfactoryで自分が作った工場とその周りの綺麗なバイオームを、スクリーンショットもしくは録画したい時に重宝するModです。
普通に録画しようとすると、常に表示されているHUDのせいで何だかどうも腑に落ちない映像になってしまいます。このHUDは、小さくすることは出来ますが、消すことは出来ません。（出来たら教えて欲しい。）
しかしながら、このModであれば、あらかじめカメラワークを設定したデータを好きなタイミングで実行することで、いつでも同じカメラワークで映像を録画することが出来ます。あっ、ちなみにこのMod自体に映像を録画する機能は無いので、録画はOBSとかでやると良いでしょう。
簡単な操作方法は、以下の動画にまとめました。Mod制作者の方による公式の使用方法は、動画内のリンクからどうぞ。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1rOmQuJH3qY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;「FicsIt-Cam」を使うと、こんな感じの映像を収録できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16_01.B7lCypx4_Z5LTCS.webp&quot; srcset=&quot;/_astro/16_01.B7lCypx4_5V70i.webp 640w, /_astro/16_01.B7lCypx4_PVaqM.webp 750w, /_astro/16_01.B7lCypx4_dnb2X.webp 828w, /_astro/16_01.B7lCypx4_mMIb4.webp 1080w, /_astro/16_01.B7lCypx4_20kKwi.webp 1280w, /_astro/16_01.B7lCypx4_2imNmk.webp 1668w, /_astro/16_01.B7lCypx4_Z5LTCS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;撮影する時間帯を、実際の時間帯とは別のものに設定することも可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16_02.DloyJ8as_1dNn1k.webp&quot; srcset=&quot;/_astro/16_02.DloyJ8as_1hzrgN.webp 640w, /_astro/16_02.DloyJ8as_22zuHi.webp 750w, /_astro/16_02.DloyJ8as_1p1vjt.webp 828w, /_astro/16_02.DloyJ8as_1Go0Ph.webp 1080w, /_astro/16_02.DloyJ8as_Z1Kg5Cq.webp 1280w, /_astro/16_02.DloyJ8as_Z1se2Mo.webp 1668w, /_astro/16_02.DloyJ8as_1dNn1k.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;撮影するタイミングは、「/fic play XXXX」を実行した瞬間なので、ベストタイミングを狙って動画にすることが可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/16_03.DK3X08z9_1luBIe.webp&quot; srcset=&quot;/_astro/16_03.DK3X08z9_1BPmpl.webp 640w, /_astro/16_03.DK3X08z9_2mPpPP.webp 750w, /_astro/16_03.DK3X08z9_1Jhqs1.webp 828w, /_astro/16_03.DK3X08z9_1O5fxb.webp 1080w, /_astro/16_03.DK3X08z9_Z1CyPUw.webp 1280w, /_astro/16_03.DK3X08z9_Z1kwN5u.webp 1668w, /_astro/16_03.DK3X08z9_1luBIe.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NoFog&lt;a href=&quot;#nofog&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ああ、視界がスッキリしているって、なんて心がスッキリするの！
霧が無くなります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを快適に&lt;a href=&quot;#satisfactoryを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/41sOwvs&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/41sOwvs&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BjNiIe&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Razer Orochi V2 ゲーミングマウス ワイヤレス 超軽量60g HyperSpeed Bluetooth 2つの無線モード 最大950時間バッテリー持続 5G 高性能 18000 DPI オプティカルセンサー 日本正規代理店保証品 RZ01-03730100-R3A1&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BjNiIe&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gpqqWA&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gpqqWA&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D43yxk&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター 27インチ 165Hz IPS WQHD 1ms HDRi HDR400 FreeSync Premium 2.1ch treVoloスピーカー 高機能スタンド ゲームモード FPS RPG レーシング&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D43yxk&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D69Gp7&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz EX-GDQ271JA&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D69Gp7&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年09月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202409/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202409/</guid><description>kinkingame135mlのYouTube等の更新状況になります。アズールレーン、Chocolate FactoryやSatisfactoryのシリーズを更新しています。</description><pubDate>Wed, 02 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年9月に投稿した動画の一覧&lt;a href=&quot;#2024年9月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【アズールレーン】通商破壊でメアリー・セレストを放置して勝利&lt;a href=&quot;#アズールレーン通商破壊でメアリーセレストを放置して勝利&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/3oRUZUnC1qg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】最高速ベイントールで桜島を1日散策する&lt;a href=&quot;#palworld最高速ベイントールで桜島を1日散策する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/IsTxV8wpNZA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】チョコで風力発電できるわけがない #12 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryチョコで風力発電できるわけがない-12--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AnTUBCFJXHI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk: The Last Autumn】総集編 | 極寒の氷の世界で極限生活 Pre-winter【ゆっくり実況】&lt;a href=&quot;#frostpunk-the-last-autumn総集編--極寒の氷の世界で極限生活-pre-winterゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2vpveuRBSXk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】チョコでベルトコンベアを作れるわけがない！ #13 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryチョコでベルトコンベアを作れるわけがない-13--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uYwlgMhMNj8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ちゃんとレシピをリセットしてからスーパーコンピューター！ #36 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryちゃんとレシピをリセットしてからスーパーコンピューター-36--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GvnY0L6IA_Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】モジュラーエンジンを製造する三重塔を建てる！ #37 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryモジュラーエンジンを製造する三重塔を建てる-37--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/elRWlIOAYGE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】爆弾で作る溶融モジュラーフレーム #38 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory爆弾で作る溶融モジュラーフレーム-38--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GZBXlXBB1Vo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】絶対に絶対に絶対に作ることが出来ないターボモーター #39 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory絶対に絶対に絶対に作ることが出来ないターボモーター-39--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/09/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kwulFTAlExs/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年08月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202408/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202408/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Chocolate Factoryのシリーズを更新しています。PalworldもSatisfactoryも上げています。</description><pubDate>Thu, 12 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年8月に投稿した動画の一覧&lt;a href=&quot;#2024年8月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】スイーツパッケージなんて作れるわけがない！ #10 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryスイーツパッケージなんて作れるわけがない-10--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/y9R4Mmu86rI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】クッキーで発電できるわけがない #11 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryクッキーで発電できるわけがない-11--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LcV-z1AFgn4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】テラナイト51体でボルドラゴに挑む！&lt;a href=&quot;#palworldテラナイト51体でボルドラゴに挑む&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xNB1a45Rqz8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】銅とコンクリートで作る放射性物質濃縮ソリウム #30 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory銅とコンクリートで作る放射性物質濃縮ソリウム-30--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XNisgnkqFfI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】絶対に作ることが出来ないアルクラッド・アルミシート #31 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory絶対に作ることが出来ないアルクラッドアルミシート-31--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zP4gBN0Djsk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】レシピが途中でリセットされる石英製品 #32 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryレシピが途中でリセットされる石英製品-32--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6W4UAB2iGaw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】コンクリートと布で作るクラスター爆弾ノーベリスク #33 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryコンクリートと布で作るクラスター爆弾ノーベリスク-33--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/yW1T6huwXVk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】桁外れに鉄鉱石が必要な布地で組立指揮システムを作る！ #34 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory桁外れに鉄鉱石が必要な布地で組立指揮システムを作る-34--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/-AWEFvshLT4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく改良される太陽光発電 #35 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく改良される太陽光発電-35--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/08/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LnSRDOc5wRk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年07月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202407/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202407/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Chocolate Factoryのシリーズを更新しています。Palworldも上げています。</description><pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年7月に投稿した動画の一覧&lt;a href=&quot;#2024年7月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】チョコで煉瓦を作れるわけがない #02 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryチョコで煉瓦を作れるわけがない-02--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FuvQmLsNOxE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】砂糖で電線を作れるわけがない #03 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factory砂糖で電線を作れるわけがない-03--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/cP3R8zCClWQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Palworld】密猟団のオイルリグにルナクインで挑むパルテイマーは自分をペガサスだと思い込んでいる&lt;a href=&quot;#palworld密猟団のオイルリグにルナクインで挑むパルテイマーは自分をペガサスだと思い込んでいる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Rzb3KXiSPS4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】チョコで展望台を作れるわけがない #04 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryチョコで展望台を作れるわけがない-04--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ub5FhLxD3M0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】綿菓子で発電できるわけがない #05 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factory綿菓子で発電できるわけがない-05--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jBjWvXa8ZcQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】ペロキャンで武器を作れるわけがない #06 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryペロキャンで武器を作れるわけがない-06--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/y3VQGQaWRxo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】ロリポップで建物の色を変えられるわけがない #07 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryロリポップで建物の色を変えられるわけがない-07--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/4gm_D9DC2kQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】綿菓子で発電できるわけがない！！ #08 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factory綿菓子で発電できるわけがない-08--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xmK5P5ggkjI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】チョコで空を移動できるわけがない #09 | 菓子と甘味でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#chocolate-factoryチョコで空を移動できるわけがない-09--菓子と甘味でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/07/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/J0tHYRfzC3U/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Luma Dream Machine】プロンプトガイドやFAQを検証してみた</title><link>https://endorphinbath.com/posts/luma-dream-machine-prompt-and-faq/</link><guid isPermaLink="true">https://endorphinbath.com/posts/luma-dream-machine-prompt-and-faq/</guid><description>この記事は、動画生成AI「Luma Dream Machine」のプロンプトガイドとFAQについて解説しています。実際にガイドにある内容を使ってプロンプトしてみています。</description><pubDate>Sat, 06 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コイツ、どうやってプロンプトしていけばイイんだ！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこらへんを把握してから使っていきたいよな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動画生成AIのプロンプトのコツを抑えたい&lt;a href=&quot;#動画生成aiのプロンプトのコツを抑えたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というのが、今回の記事の主旨です。
そこで今回取り扱うのが、「Luma AI」という会社が提供している、「Dream Machine」という動画生成AIです。
先日、Luma Dream Machineの年間サブスクリプションに登録してしまったので、（本当は月間にしたかった・・・。）これは使い倒さなければと思い、Luma Dream Machineを掘り下げてみようと思います。
色々とプロンプトを検証しながら、動画生成AIに対するプロンプトのコツを掴んでいきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Luma Dream Machineのプロンプトガイド&lt;a href=&quot;#luma-dream-machineのプロンプトガイド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、「Luma AI」から掲示されている、「Dream Machine」のプロンプトガイドを一通り見ていきます。
そのプロンプトガイド（に加えてFAQ）は以下のリンク内で公開されています。サイトがNotionで作成されているので、更新が早そうです。&lt;/p&gt;&lt;a href=&quot;https://www.notion.so/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.so/images/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Notion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Notion | Where teams and agents work together&lt;/div&gt;&lt;div&gt;A collaborative AI workspace, built on your company context. Build and orchestrate agents right alongside your team&apos;s projects, meetings, and connected apps.&lt;/div&gt;&lt;div&gt;www.notion.so&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.notion.so/images/meta/default.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プロンプトガイドの確認&lt;a href=&quot;#プロンプトガイドの確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、プロンプトガイドの方から確認していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;プロンプトの方法（画像からビデオにする場合）&lt;a href=&quot;#プロンプトの方法画像からビデオにする場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;JPG、JPEG、またはPNG画像を生成ページの画像アイコンをクリックしてアップロードします。シーンを説明するプロンプトを提供することもできます。「Enhance Prompt」を有効にすると、シーンで起こしたいことを簡単に説明するだけで済みます。例えば、&lt;code&gt;&amp;lt;image of a car&amp;gt; + &quot;a red car driving on a road&quot;&lt;/code&gt; 特にビデオで起こしたい動作の種類を説明するのに役立ちます。期待する出力が得られない場合は、「Enhance Prompt」を無効にしてみてください。これには、画像を説明し、シーンで起こしたいことを説明する必要があります。&lt;/p&gt;&lt;p&gt;非強化プロンプトでは、動作が少ないか全くない場合があります。必要に応じて、プロンプトに動きの指示を含めるようにしてください。いずれの場合も、画像の重要な詳細、実行されているアクションの種類、シーンの異なる部分がどのように動くかをできるだけ詳しく説明すると役立ちます。例えば、&lt;code&gt;A woman dancing ballet, her arms gracefully extending upward as she twirls around, the dancers behind her bowing low to the ground&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;例えば、以下の画像で「A blue car driving on a road is flying over a skyscraper gradually.」とプロンプトしてみます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;329&quot; src=&quot;/_astro/03.BZPJkg1M_Z1ksOkx.webp&quot; srcset=&quot;/_astro/03.BZPJkg1M_Z2o3TII.webp 640w, /_astro/03.BZPJkg1M_21CTF0.webp 750w, /_astro/03.BZPJkg1M_Z1chdBq.webp 828w, /_astro/03.BZPJkg1M_Z1ksOkx.webp 1080w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そうすると、車は走りましたが、摩天楼の上空を飛ぶ現象は起きませんでした。少しプロンプトの内容が奇想天外だったかもしれません。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;756&quot; height=&quot;898&quot; src=&quot;/_astro/04.yU6Me_cj_Vp1W0.webp&quot; srcset=&quot;/_astro/04.yU6Me_cj_Z287PV6.webp 640w, /_astro/04.yU6Me_cj_Z57FSB.webp 750w, /_astro/04.yU6Me_cj_Vp1W0.webp 756w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;次に、「A blue car driving on a road is driving on the highway.」とプロンプトして、日常的な情景を生成するようにしてみます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1061&quot; height=&quot;285&quot; src=&quot;/_astro/05.DIRLGvha_Z2oOMKD.webp&quot; srcset=&quot;/_astro/05.DIRLGvha_1DAcy8.webp 640w, /_astro/05.DIRLGvha_Z1N0fiy.webp 750w, /_astro/05.DIRLGvha_Z1pID16.webp 828w, /_astro/05.DIRLGvha_Z2oOMKD.webp 1061w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;生成してみると、画像にある橋を高速道路とみなしているのか、この情景のまま車がひたすら走り続ける動画が出来上がります。また、道路が全く動かないので、走っている感じはあまりしませんでした。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;897&quot; src=&quot;/_astro/06.Bn1IlCUP_d60JL.webp&quot; srcset=&quot;/_astro/06.Bn1IlCUP_MdYq2.webp 640w, /_astro/06.Bn1IlCUP_Z1eMrXO.webp 750w, /_astro/06.Bn1IlCUP_Z276Mh7.webp 828w, /_astro/06.Bn1IlCUP_d60JL.webp 900w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;この動画では、最後に場面転換をしようとしています。高速道路で車が追い抜かれるシーンが生成されているのでしょうか。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;878&quot; height=&quot;902&quot; src=&quot;/_astro/07.C2VmKNz5_1JSaLH.webp&quot; srcset=&quot;/_astro/07.C2VmKNz5_Z3tLRe.webp 640w, /_astro/07.C2VmKNz5_1xoz3T.webp 750w, /_astro/07.C2VmKNz5_16HEcw.webp 828w, /_astro/07.C2VmKNz5_1JSaLH.webp 878w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プロンプトの方法（テキストからビデオにする場合）&lt;a href=&quot;#プロンプトの方法テキストからビデオにする場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;良い結果を得るための素晴らしい方法は、「Enhanced Prompt」を使用することです。これを有効にすることで、 &lt;code&gt;&quot;海で泳ぐテディベア&quot;&lt;/code&gt; のような短いプロンプトを使用でき、Dream Machineが自動的に追加の説明を生成して、より詳細な生成を支援します。期待する結果が得られない場合は、「Enhance Prompt」を無効にしてみてください。非強化プロンプトは、シーンの内容と希望するアクションを3～4文で説明する必要があります。例： &lt;code&gt;&quot;In a somber, nostalgic style, a young man sits on a tree stump in a forest, the warm autumn leaves surrounding him. He wears a brown jacket, dark shirt, and blue jeans, his fingers deftly moving along the fretboard of an acoustic guitar.&quot;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;一般的に、以下の点を具体的にすることで、より良い結果が得られます：&lt;/p&gt;&lt;p&gt;カメラの動き： &lt;code&gt;&quot;A dramatic zoom in&quot;&lt;/code&gt;, &lt;code&gt;&quot;An FPV drone shot&quot;&lt;/code&gt; アクションと動き： &lt;code&gt;&quot;A teddy bear swimming with its arms and feet as the turbulent water splashes all around&quot;&lt;/code&gt; オブジェクトの特徴： &lt;code&gt;&quot;A white teddy bear wearing sunglasses with soft fur texture&quot;&lt;/code&gt; 設定と背景：&lt;code&gt;&quot;A beautiful cloudy sunset near a Caribbean beach&quot;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;試しに、カメラの動きを指定してみます。「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow with a dramatic zoom in.」とプロンプトして、「Enhance Prompt」を無効にします。
すると、以下のようなシーンが生成されました。次節のプロンプトでカメラの動きを指定していないものがありますが、それと比べてリアルな描写になっています。しかし、このカメラの動きで生成された動画がなぜか動きません・・・。ほぼ静画です・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;752&quot; height=&quot;415&quot; src=&quot;/_astro/11.b8EwaUQw_Z1xi1vh.webp&quot; srcset=&quot;/_astro/11.b8EwaUQw_2oTXJh.webp 640w, /_astro/11.b8EwaUQw_Z1GiCHi.webp 750w, /_astro/11.b8EwaUQw_Z1xi1vh.webp 752w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;もう一つ提示されているカメラの動きも指定してみます。「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow. They are filmed with an FPV drone shot.」とプロンプトします。
すると、以下のようなシーンが生成されました。ドローンから撮影しているテイストが加わることで、こちらも現実的な描写になっています。しかし、ウサギが周りにいません・・・。右端に見えているのがウサギでしょうか？（ちなみに家の中にウサギがいますが、沢山はいませんね。）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;768&quot; height=&quot;428&quot; src=&quot;/_astro/08.WZar9tNK_e3OJv.webp&quot; srcset=&quot;/_astro/08.WZar9tNK_ZdtRuA.webp 640w, /_astro/08.WZar9tNK_KtDQL.webp 750w, /_astro/08.WZar9tNK_e3OJv.webp 768w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;次に、「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow. They are filmed with FPV shot by drone moving around that building.」とプロンプトしてみると、このようなものに。
ドローンの視点は、建物の周りを周回しながら展開してほしかったですが、この時は建物が表示されておらず、ただウサギが沢山いただけの動画でした。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;768&quot; height=&quot;432&quot; src=&quot;/_astro/09.D9Nlsx-7_IqmM8.webp&quot; srcset=&quot;/_astro/09.D9Nlsx-7_80bIo.webp 640w, /_astro/09.D9Nlsx-7_1fQbTo.webp 750w, /_astro/09.D9Nlsx-7_IqmM8.webp 768w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;次に、「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow. They are filmed with FPV shot by drone moving around them.」とプロンプトして、ドローンの視点を当てる対象を、家ではなくウサギにします。
しかし、この時も建物が表示されておらず、ただウサギが沢山いただけの動画でした。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;786&quot; height=&quot;450&quot; src=&quot;/_astro/09_05.BNUVBsDS_Z2j35nJ.webp&quot; srcset=&quot;/_astro/09_05.BNUVBsDS_2aCEAW.webp 640w, /_astro/09_05.BNUVBsDS_oPkc9.webp 750w, /_astro/09_05.BNUVBsDS_Z2j35nJ.webp 786w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;同様に「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow. They are filmed with FPV shot by drone moving around that building.」とプロンプトして、「Enhance Prompt」を有効にしたパターンです。
こちらは家がちゃんと表示されていて、ドローンがその家の周りを周回しながら撮影している様子でした。「Enhance Prompt」は有効にした方がかなり要望に対する確度が上がりそうな所感です。（ただ単に僕のプロンプトが下手なだけかもしれませんが・・・。）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;771&quot; height=&quot;430&quot; src=&quot;/_astro/10.Cz4cvtxz_Z19Dx0A.webp&quot; srcset=&quot;/_astro/10.Cz4cvtxz_6enf1.webp 640w, /_astro/10.Cz4cvtxz_15cTBn.webp 750w, /_astro/10.Cz4cvtxz_Z19Dx0A.webp 771w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;FAQの確認&lt;a href=&quot;#faqの確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、FAQの方を確認していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;サブスクリプション（有料プラン）で何が得られるのか？&lt;a href=&quot;#サブスクリプション有料プランで何が得られるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;キューがある場合、優先度の高い生成が提供される商用利用権透かしなしのダウンロード（6/17 6AM PST以降にすべての新しいビデオに導入）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;それでは、実際に無料プラント有料プランで、生成されるものを比較していきます。
比較したプロンプトはこんな感じです。
「A lot of stuffed rabbits constructing a building in the land of sweets in right in the middle of the meadow.」（たくさんのぬいぐるみのウサギたちが、草原の真ん中にあるお菓子の国で建物を建設しています。）
無料プランの状態で動画を生成すると、このような状態で生成されました。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1891&quot; height=&quot;834&quot; src=&quot;/_astro/21.Dz_8NnI7_1p9brK.webp&quot; srcset=&quot;/_astro/21.Dz_8NnI7_Z1hRGlR.webp 640w, /_astro/21.Dz_8NnI7_kzTBN.webp 750w, /_astro/21.Dz_8NnI7_1wO336.webp 828w, /_astro/21.Dz_8NnI7_25HvwU.webp 1080w, /_astro/21.Dz_8NnI7_DgBLh.webp 1280w, /_astro/21.Dz_8NnI7_Z2hlJq9.webp 1668w, /_astro/21.Dz_8NnI7_1p9brK.webp 1891w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そして、Standardプランの状態で動画を生成すると、このような状態で生成されました。より建物っぽいものが登場しています。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1895&quot; height=&quot;834&quot; src=&quot;/_astro/22._2pK8QY7_2tiyqB.webp&quot; srcset=&quot;/_astro/22._2pK8QY7_2bld0z.webp 640w, /_astro/22._2pK8QY7_ZGlOez.webp 750w, /_astro/22._2pK8QY7_uRjbI.webp 828w, /_astro/22._2pK8QY7_ByzOP.webp 1080w, /_astro/22._2pK8QY7_1HhMWW.webp 1280w, /_astro/22._2pK8QY7_Z1dkyet.webp 1668w, /_astro/22._2pK8QY7_2tiyqB.webp 1895w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;右上の「LUMA」の透かしが依然として表示され続けるのかと思いきや、生成された動画をダウンロードすることで、右上の透かしは無くせるようです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1802&quot; height=&quot;901&quot; src=&quot;/_astro/23.cdefVXHI_Z216xts.webp&quot; srcset=&quot;/_astro/23.cdefVXHI_TfuIt.webp 640w, /_astro/23.cdefVXHI_1E41NW.webp 750w, /_astro/23.cdefVXHI_BKCDz.webp 828w, /_astro/23.cdefVXHI_1vi4Jr.webp 1080w, /_astro/23.cdefVXHI_1IRlC.webp 1280w, /_astro/23.cdefVXHI_Zq64aY.webp 1668w, /_astro/23.cdefVXHI_Z216xts.webp 1802w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;過去に無料プランで生成した動画に対しても、右上の透かしは無くせるようです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1686&quot; height=&quot;881&quot; src=&quot;/_astro/24.BYjsReIO_Z1uzfDU.webp&quot; srcset=&quot;/_astro/24.BYjsReIO_Z1L7ja.webp 640w, /_astro/24.BYjsReIO_2c2N1m.webp 750w, /_astro/24.BYjsReIO_GoEK.webp 828w, /_astro/24.BYjsReIO_svgKR.webp 1080w, /_astro/24.BYjsReIO_1vHVl5.webp 1280w, /_astro/24.BYjsReIO_Z1wA9uC.webp 1668w, /_astro/24.BYjsReIO_Z1uzfDU.webp 1686w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;また、「キューがある場合、優先度の高い生成が提供される」のかどうかは、体感としてはあまり分かりませんでしたが、アクティブユーザーが増えると生成スピードが速くなるんでしょうかね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サブスクリプションに登録すると無料クレジットが引かれるのはなぜか？&lt;a href=&quot;#サブスクリプションに登録すると無料クレジットが引かれるのはなぜか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;これは当社のミスコミュニケーションによるもので、現在は修正されています！ 有料階層は現在、30回の無料生成＋120回の有料生成を受け取ることができ、これは以前の有料ユーザーにも適用されます。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;この記載の通り、Starndardプランに年間登録した時は無料クレジットもちゃんと有料クレジット中に持ち越されていました。無料プランで月間30枚、Standardプランで月間120枚のクレジットが付与されます。（2024-06-27時点）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1013&quot; height=&quot;676&quot; src=&quot;/_astro/25.bszrQAIX_Z2ucT1m.webp&quot; srcset=&quot;/_astro/25.bszrQAIX_Z1b3f25.webp 640w, /_astro/25.bszrQAIX_1lgaBW.webp 750w, /_astro/25.bszrQAIX_Z1WNp99.webp 828w, /_astro/25.bszrQAIX_Z2ucT1m.webp 1013w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「ビデオ生成エラー、再試行してください。（ネットワークエラー）」と表示されるのはなぜか？&lt;a href=&quot;#ビデオ生成エラー再試行してくださいネットワークエラーと表示されるのはなぜか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;画像からビデオを作成している場合、アップロードした画像の形式がサポートされていないか、画像ファイルが大きすぎる可能性があります。画像をjpg、jpeg、またはpng形式に変換し、画像サイズを縮小してみてください。このエラーメッセージの改善に取り組んでおり、皆様のフィードバックに感謝しています。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5秒以上の生成/ネガティブプロンプトの追加/アスペクト比の変更は可能か？&lt;a href=&quot;#5秒以上の生成ネガティブプロンプトの追加アスペクト比の変更は可能か&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;現時点ではサポートされていません。今後のバージョンのDream Machineのために追加のコントロールに取り組んでいます。皆様のフィードバックに感謝しています。今後のバージョンで見たいものがあれば、Discordで共有してください。&lt;a href=&quot;https://discord.com/invite/lumaai&quot; target=&quot;_blank&quot;&gt;https://discord.com/invite/lumaai&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Discordで利用可能になるのか？&lt;a href=&quot;#discordで利用可能になるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Dream Machineは現在、&lt;a href=&quot;https://lumalabs.ai/dream-machine&quot; target=&quot;_blank&quot;&gt;https://lumalabs.ai/dream-machine&lt;/a&gt; でのみ利用可能です。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Discordで利用できるようになると、すぐに動画を生成できて便利そうですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Dream Machineのビデオを商用利用することは可能か？&lt;a href=&quot;#dream-machineのビデオを商用利用することは可能か&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;無料プランでは、当社の利用規約に定義されているように商用利用の許可は与えられません。この制限を解除するには、いずれかの有料プランに登録してください。&lt;a href=&quot;https://lumalabs.ai/legal/tos&quot; target=&quot;_blank&quot;&gt;https://lumalabs.ai/legal/tos&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;生成が得られないのはなぜか？&lt;a href=&quot;#生成が得られないのはなぜか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。
新しい生成の場合、ページをリフレッシュするか、ビデオをクリックする必要があるかもしれません。ページをリフレッシュしても動作しない場合は、Discordでヘルプチケットを送信してお知らせください。
新しい生成の場合、ページをリフレッシュするか、ビデオをクリックする必要があるかもしれません。ページをリフレッシュしても動作しない場合は、Discordでヘルプチケットを送信してお知らせください。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;新しい「延長」機能はクレジットを消費するのか？&lt;a href=&quot;#新しい延長機能はクレジットを消費するのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;はい。「延長」ボタンはビデオを5秒間延長し、1回の生成クレジットを消費します。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;早期機能にアクセスするにはどうすればよいか？&lt;a href=&quot;#早期機能にアクセスするにはどうすればよいか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;近くDream Machineエディタが利用可能になります！ ここでサインアップし、最新情報をお待ちください。&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLScgsh3Cf2VXf8k7k9iVd-nP5NZk-TSRfq4Tkvh7inv8kS9Ulg/viewform&quot; target=&quot;_blank&quot;&gt;https://docs.google.com/forms/d/e/1FAIpQLScgsh3Cf2VXf8k7k9iVd-nP5NZk-TSRfq4Tkvh7inv8kS9Ulg/viewform&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;未使用のクレジットは翌月に繰り越されるか？&lt;a href=&quot;#未使用のクレジットは翌月に繰り越されるか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;いいえ、クレジットはサインアップ日（無料プラン）またはサブスクリプション日（有料プラン）から1か月後にリセットされます。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;一時的な1日制限はどのように機能するのか？&lt;a href=&quot;#一時的な1日制限はどのように機能するのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;無料プランのユーザーとして、1日の生成制限に達すると、24時間時計がスタートし、新しいプロンプトを送信できるまで24時間待つ必要があります。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;無料プランのユーザーは月間30枚の動画を生成することが可能ですが、1日に生成できる動画の枚数も決まっているようです。僕自身も、無料プランの時に、1日の生成上限に達して新しく動画を生成できなくなったことがありました。制限が解除されるまで待つ外に無さそうです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サブスクライブしたユーザーとして透かしなしのビデオをダウンロードするにはどうすればよいか？&lt;a href=&quot;#サブスクライブしたユーザーとして透かしなしのビデオをダウンロードするにはどうすればよいか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が公式ドキュメントの内容です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;いずれかの有料プランユーザーは、生成ページまたは詳細ページで「ダウンロード」ボタンをクリックすることで透かしなしのビデオをダウンロードできます。PCでは、新しいタブが開き、透かしなしのビデオが表示され、Chromeでは「…」をクリックしてダウンロード、Firefoxでは右クリックして「名前を付けて保存」を選択します。モバイルでは、ダウンロードが自動的に開始され、完了時にカメラロールに保存されます。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;これは先程、生成した動画の中に透かしがないことを確認できました。その時は、PCのChromeブラウザで確認しました。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ：ログイン時に認証エラーになることがある&lt;a href=&quot;#おまけログイン時に認証エラーになることがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ある日、このDream Machineにログインしようとした時に、「OAuth error: invalid_grant」というテキストのみが表示されて、ログインできなくなった時がありました。
X（旧Twitter）で呟いているアカウントは見つけられなかったため、その現象が原因がサーバーの障害なのかどうかが不明でした。（Googleアカウントでしかログインできないので、そのアカウントで認証エラーになったら詰む。Lumaを使えない。）
まあ、2,3日放っておいてログインし直したら再び使えるようになったので、たまにそういうことが起こるみたいですと心に留めておきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Luma Dream Machineのプロンプトガイドでは、「Enhance Prompt」を有効化もしくは無効化にしてプロンプトする方法が紹介されているが、有効化した方が目的の構成の動画になりやすい。&lt;/li&gt;
&lt;li&gt;サブスクリプションに登録すると、生成した動画をダウンロードする際に透かしが無くなる。&lt;/li&gt;
&lt;li&gt;サブスクリプションに登録すると、無料プラン時の生成クレジットも保持される。&lt;/li&gt;
&lt;li&gt;Dream Machineのビデオを商用利用は、有料プランのみに許可される。&lt;/li&gt;
&lt;li&gt;Dream Machineの無料プランには、プランのクレジット数とは別に、1日の生成数の上限もある。&lt;/li&gt;
&lt;li&gt;Dream Machineへのログイン時に認証エラーになることがある。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「Enhance Prompt」を無効化にしている状態でも、目的の動画を作れるようにしたいです！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生成AI関連の書籍&lt;a href=&quot;#生成ai関連の書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZMaLuU&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;画像生成AI Stable Diffusion スタートガイド Generative AI イラストレーション&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZMaLuU&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZKMUvB&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;はじめてでもここまでできる Stable Diffusion画像生成 本格 活用ガイド&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZKMUvB&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4faMZgs&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Gemini 1.5 LlamaIndex LangChain 人工知能プログラミング実践入門&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4faMZgs&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3D94jFs&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;本当に役立つAIの作り方・使い方 ChatGPT×GPTsカスタマイズ大全&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3D94jFs&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;プロンプトをマスターするまでまだまだ慣れが必要だなぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まだまだ試行錯誤が足りない。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年06月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202406/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202406/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Satisfactoryの新しいシリーズが更新されています。Chocolate Factoryのシリーズも始動しています。</description><pubDate>Fri, 05 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年6月に投稿した動画の一覧&lt;a href=&quot;#2024年6月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく配備される水力タービン #25 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく配備される水力タービン-25--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/tazUBj3bVvM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく構築される蒸気タービン #26 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく構築される蒸気タービン-26--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bUF9WGHwnuY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ノベノベノーベノーベリスク🐧本編は概要欄のURLから #ゆっくり実況 #Shorts #gaming #ゲーム&lt;a href=&quot;#satisfactoryノベノベノーベノーベリスク本編は概要欄のurlから-ゆっくり実況-shorts-gaming-ゲーム&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/q6lCa3jW9lQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく生産される電磁パルスノーベリスク #27 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく生産される電磁パルスノーベリスク-27--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ibijSQiI0yg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく改良される蒸気タービンと風力タービン #28 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく改良される蒸気タービンと風力タービン-28--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/A5T6qSIqUgQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電力不足を解決するべく建設される送電塔 #29 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電力不足を解決するべく建設される送電塔-29--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sBD25-_C-u8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ELDEN RING】タコじゃなくて俺を見ろ、テオドリックス&lt;a href=&quot;#elden-ringタコじゃなくて俺を見ろテオドリックス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wpI6KmsE_3M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Chocolate Factory】菓子と甘味でゆっくり工業化 #01【ゆっくり実況】&lt;a href=&quot;#chocolate-factory菓子と甘味でゆっくり工業化-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/06/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/cJuef4x0XyI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】JPEGやPNGの画像ファイルをWEBP形式に変換するCwebpを使う</title><link>https://endorphinbath.com/posts/powershell-convert-jpg-to-webp/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-convert-jpg-to-webp/</guid><description>PowerShellとGoogle提供のツールCwebpを使い、JPEGやPNG画像を一括で軽量なWEBPに変換する方法を紹介します。インストール手順や変換前後の画像サイズの比較しています。Squooshだと一気に変換できないんですよね。</description><pubDate>Thu, 06 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、画像を1枚ずつWebpに変えるのが面倒だな・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ一括で変えられるようにしよう。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;画像のサイズを小さくしたい&lt;a href=&quot;#画像のサイズを小さくしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というのが、今回の記事の主旨です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JPEGとかPNGって重いんですよね。&lt;a href=&quot;#jpegとかpngって重いんですよね&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;スマホのカメラで何かしらを撮影すると大体JPEG形式になりますよね。また、スクリーンショットを撮ると、JPEGだったりPNGだったりで保存されます。&lt;/p&gt;&lt;p&gt;しかし、これらの拡張子で保存された画像ファイルは重いことに気付きました。まあ、PNGの拡張子が開発されたのは1990年代らしいですし、JPEGに至っては1980年代後半らしいです。そりゃあ、30年以上前の規格よりも効率的な拡張子がホイホイ存在していても、何ら不思議なことではない。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/01.DUxxWwSK_ZXluKh.webp&quot; srcset=&quot;/_astro/01.DUxxWwSK_1xnMUy.webp 640w, /_astro/01.DUxxWwSK_1xPuAY.webp 750w, /_astro/01.DUxxWwSK_1yeWGO.webp 828w, /_astro/01.DUxxWwSK_ZXluKh.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこで今回は、JPEGやPNGよりもサイズが軽くて同程度の画質の画像を実現できる「WEBP」拡張子の画像を作っていきます。&lt;/p&gt;&lt;p&gt;WEBPは、Googleによって2010年に初版が発行された画像フォーマットです。（2010年となると、現在の情報化社会の時代ではそんなに新しくもない気がしてしまいますが、前述のヤツらよりはよっぽど新しいです。）
WEBPはアルファチャンネルを持っているので、PNGからの変換も可能になります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;これまではSquooshを使っていたが・・・&lt;a href=&quot;#これまではsquooshを使っていたが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最近までは、「Squoosh」というGoogleから提供されている画像圧縮かつWebpに変換できるツールを利用していました。&lt;/p&gt;&lt;p&gt;同じWebp形式への圧縮でも、他のサービスと比べて圧縮率が高く、気に入って使っていたのですが、1つ難点として、「1枚ずつしか圧縮することが出来ない」というのがありました。&lt;/p&gt;&lt;a href=&quot;https://squoosh.app/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://squoosh.app/c/favicon-c9cf50ef.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@SquooshApp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Squoosh&lt;/div&gt;&lt;div&gt;Squoosh is the ultimate image optimizer that allows you to compress and compare images with different codecs in your browser.&lt;/div&gt;&lt;div&gt;squoosh.app&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://squoosh.app/c/icon-large-maskable-c2078ced.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;一気にWebpに変換できるツールを作りたい&lt;a href=&quot;#一気にwebpに変換できるツールを作りたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Squooshのように1枚1枚圧縮率などを設定するほどのこだわりが無いのであれば、一気に変換できた方が良いですね。&lt;/p&gt;&lt;p&gt;ということで今回は、Powershellを使って、フォルダ内にあるJPGなどの画像をWebpに変換するコマンドを練っていきましょう。&lt;/p&gt;&lt;p&gt;以前にExif情報から画像ファイルをリネームして、その画像をjpgやpngからwebpに変換して、このwebp画像に再びExif情報を反映するツールを作りましたが、この時はSquooshでwebp画像を作っていました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-rename-all-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルを一括リネームして、Exif情報も反映する&lt;/div&gt;&lt;div&gt;PowerShellを使用して画像ファイルを一括でリネームする方法を紹介します。「yyyyMMddHHmmss」形式で変えて、最終的にはGoogleフォトに反映させていきましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240205_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cwebpというものを使う&lt;a href=&quot;#cwebpというものを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Powershellから画像をWebpに変換するためのツールに、「Cwebp」というものを使います。&lt;/p&gt;&lt;p&gt;Cwebpは、Webpを開発しているGoogleによって提供されているツールで、「Libwebp」というライブラリの中の一機能になります。&lt;/p&gt;&lt;p&gt;Cwebpのリファレンスはこちらになります。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/speed/webp/docs/cwebp?hl=hi&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cwebp | WebP | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/google-green.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cwebpのインストール&lt;a href=&quot;#cwebpのインストール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Cwebpは、Powershellにビルトインされているライブラリではないので、インストールします。&lt;/p&gt;&lt;p&gt;公式からダウンロードできるリポジトリが提供されてはいますが、僕の場合は上手くインストールできませんでした。&lt;/p&gt;&lt;a href=&quot;https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;storage.googleapis.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Index of downloads.webmproject.org/releases/webp&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;storage.googleapis.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこで今回は、「Scoop」というパッケージ管理ツールを使って、「Cwebp」の機能を持つライブラリである「Libwebp」をインストールしたいと思います。&lt;/p&gt;&lt;a href=&quot;https://scoop.sh/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://scoop.sh/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;@ScoopInstaller&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Scoop&lt;/div&gt;&lt;div&gt;A command-line installer for Windows&lt;/div&gt;&lt;div&gt;scoop.sh&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://scoop.sh/social-card.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Powershell を開いたら、 C ドライブのルートディレクトリに移動して、「Scoop」のインストール後、「Libwebp」をインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd \ &lt;/span&gt;&lt;span&gt;# Change to &quot;C:\&quot; directory.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Invoke-RestMethod&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Uri https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;get.scoop.sh | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Invoke-Expression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cd C:\Users\&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;USERNAME&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;scoop install libwebp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;以下の&lt;code&gt;help&lt;/code&gt;コマンドが動いたら、「Cwebp」をコマンドで使う準備は整いました！&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cwebp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Webpに変換するコード&lt;a href=&quot;#webpに変換するコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回出来たコードはこちらです。&lt;a href=&quot;https://qiita.com/ShortArrow/items/4d5b20884a86f236e920&quot; target=&quot;_blank&quot;&gt;こちらの記事&lt;/a&gt;を参考にさせていただきました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$TargetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$null&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$TargetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $Args[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$Files&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$TargetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Name &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*.jpg&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$Files&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$TargetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Name &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Include &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*.png&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$File&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$Files&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$FullName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TargetFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;File&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$Extension&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$FullName&lt;/span&gt;&lt;span&gt;).Extension;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$GenerateFileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;FullName.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;FullName.Length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;Extension.Length&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.webp&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&amp;lt;Source File Name: &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;File&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cwebp &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;preset photo &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;metadata &lt;/span&gt;&lt;span&gt;&quot;exif,icc&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;sharp_yuv &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;q &lt;/span&gt;&lt;/span&gt;&lt;span&gt;75&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;o &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$GenerateFileName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;progress &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;short &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;----------------&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;{0} .webp images converted.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$updatedCount&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のフォルダの状態で実行すると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;817&quot; height=&quot;425&quot; src=&quot;/_astro/11.BMu9bMea_DtwFC.webp&quot; srcset=&quot;/_astro/11.BMu9bMea_jp2xQ.webp 640w, /_astro/11.BMu9bMea_Z2tcdlJ.webp 750w, /_astro/11.BMu9bMea_DtwFC.webp 817w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行後はこんな感じに画像がWebpに変換されます。
&lt;img loading=&quot;lazy&quot; width=&quot;823&quot; height=&quot;440&quot; src=&quot;/_astro/12.CumRYJRz_Ztffrg.webp&quot; srcset=&quot;/_astro/12.CumRYJRz_joM63.webp 640w, /_astro/12.CumRYJRz_10CmP8.webp 750w, /_astro/12.CumRYJRz_Ztffrg.webp 823w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行するとこんな感じにログが出力されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;Source File Name: 20240605_01.png&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;67734 42.67&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;Source File Name: 20240605_10.png&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;68358 42.78&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;Source File Name: 20340605_07.png&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;25408 41.78&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3 .webp images converted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記で使用した、&lt;code&gt;cwebp&lt;/code&gt;コマンドのオプションは以下になります。&lt;/p&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;オプション&lt;/th&gt;&lt;th&gt;効果&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;-metadata&lt;/td&gt;&lt;td&gt;変換前から変換後のファイルにメタ情報をコピーすることが出来る。（&lt;code&gt;all&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;exif&lt;/code&gt;, &lt;code&gt;icc&lt;/code&gt;, &lt;code&gt;xmp&lt;/code&gt; から選ぶ。カンマ区切りでも表記できる。）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-sharp_yuv&lt;/td&gt;&lt;td&gt;より圧縮率を上げることが出来る。しかし、圧縮速度が遅くなるらしい。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-progress&lt;/td&gt;&lt;td&gt;変換中の進捗度を表示する。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-short&lt;/td&gt;&lt;td&gt;変換後のファイルサイズとPSNR（Peak-Signal-To-Noise ratio: 平たく言うと「劣化していない」率のこと。）の情報だけを表示する。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-q&lt;/td&gt;&lt;td&gt;変換前の画質を100とした場合の、変換後の圧縮率。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;-o&lt;/td&gt;&lt;td&gt;変換後の絶対ファイル名。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Webp に変換する前とその後の比較&lt;a href=&quot;#webp-に変換する前とその後の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Webp に変換する前後の画像の画質を比較してみます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;PNG から WEBP に変換する&lt;a href=&quot;#png-から-webp-に変換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらが変換前の PNG です。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/21.DebTUR4d_Z1mftBQ.webp&quot; srcset=&quot;/_astro/21.DebTUR4d_1yNTdm.webp 640w, /_astro/21.DebTUR4d_Z21gyhx.webp 750w, /_astro/21.DebTUR4d_ZaGU4.webp 828w, /_astro/21.DebTUR4d_Z20GMxz.webp 1080w, /_astro/21.DebTUR4d_Z19fXuF.webp 1280w, /_astro/21.DebTUR4d_ZuTQyQ.webp 1668w, /_astro/21.DebTUR4d_Z1mftBQ.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらが変換後の WEBP です。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/01.DCBKSiiy_Z1qDtvs.webp&quot; srcset=&quot;/_astro/01.DCBKSiiy_1np4nE.webp 640w, /_astro/01.DCBKSiiy_Z1dT2ys.webp 750w, /_astro/01.DCBKSiiy_1rku6S.webp 828w, /_astro/01.DCBKSiiy_Z1qlszL.webp 1080w, /_astro/01.DCBKSiiy_2c0wwN.webp 1280w, /_astro/01.DCBKSiiy_Z58vCD.webp 1668w, /_astro/01.DCBKSiiy_Z1qDtvs.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ほとんど変化はないと思います。
これで、この画像の場合、容量が 974 KB → 67 KB にダウンサイズされるので、 Webp は例えばクラウドストレージを使う上で頭を悩ませる容量不足には、もってこいの拡張子です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;JPG から WEBP に変換する&lt;a href=&quot;#jpg-から-webp-に変換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらが変換前の JPG です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/23.dzN-F_z1_RimlJ.webp&quot; srcset=&quot;/_astro/23.dzN-F_z1_1rD120.webp 640w, /_astro/23.dzN-F_z1_Z2rtLSK.webp 750w, /_astro/23.dzN-F_z1_Z2emMlS.webp 828w, /_astro/23.dzN-F_z1_Z2qNG03.webp 1080w, /_astro/23.dzN-F_z1_RimlJ.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらが変換後の WEBP です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/24.yfe_FUSM_YBG7p.webp&quot; srcset=&quot;/_astro/24.yfe_FUSM_1cNXxw.webp 640w, /_astro/24.yfe_FUSM_Z1pW28T.webp 750w, /_astro/24.yfe_FUSM_2jj8cz.webp 828w, /_astro/24.yfe_FUSM_2wK5RI.webp 1080w, /_astro/24.yfe_FUSM_YBG7p.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この画像の場合、容量が 401 KB → 248 KB にダウンサイズされます。先程よりは圧縮率が低いです。さっきの PNG 画像は黒い部分が多かったから圧縮率が高かったのでしょうか。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;画像のサイズを小さくしたい&lt;/strong&gt;: JPEG と PNG のサイズの重さと WEBP の利点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cwebp&lt;/strong&gt; のツール紹介&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cwebpのインストール&lt;/strong&gt;: インストール手順&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webpに変換するコード&lt;/strong&gt;: Powershell コードの紹介&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webpに変換する前とその後の比較&lt;/strong&gt;: PNG と JPG の2パターン&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これでデジタル資産のサイズを減らせる嬉しい！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Powershell関連の書籍&lt;a href=&quot;#powershell関連の書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49taHTY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;動くサンプルで学べる Windows PowerShell コマンド&amp;amp;スクリプティングガイド PowerShell 4.0対応&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49taHTY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BoLRbt&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PowerShell実践ガイドブック　クロスプラットフォーム対応の次世代シェルを徹底解説&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BoLRbt&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、これで100枚の画像を一気にWebpに出来る！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;かなりダウンサイズ出来るな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】画像ファイルのExif情報を任意の日付に編集する</title><link>https://endorphinbath.com/posts/powershell-edit-exif-of-image-files/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-edit-exif-of-image-files/</guid><description>PowerShell上でExiftoolを使って、画像ファイルのExif情報を編集し日付を一括変更する方法を紹介します。友人と共有した写真の日付設定をGoogleフォトで行うのは面倒ですが、これで簡単に整理できます。</description><pubDate>Wed, 05 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、Googleフォトでいちいち写真の日付を変えるのが面倒だな・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ一括で変えられるようにしよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleフォトの写真の日付設定を楽にしたい！&lt;a href=&quot;#googleフォトの写真の日付設定を楽にしたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というのが、今回の記事の主旨です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Googleフォトで写真の日付を設定できますよね。&lt;a href=&quot;#googleフォトで写真の日付を設定できますよね&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Googleフォトで画像や写真の情報を表示すると、その画像の日付を設定することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/01.DCBKSiiy_Z1qDtvs.webp&quot; srcset=&quot;/_astro/01.DCBKSiiy_1np4nE.webp 640w, /_astro/01.DCBKSiiy_Z1dT2ys.webp 750w, /_astro/01.DCBKSiiy_1rku6S.webp 828w, /_astro/01.DCBKSiiy_Z1qlszL.webp 1080w, /_astro/01.DCBKSiiy_2c0wwN.webp 1280w, /_astro/01.DCBKSiiy_Z58vCD.webp 1668w, /_astro/01.DCBKSiiy_Z1qDtvs.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;でも、この設定をする作業が大変なのだ。&lt;a href=&quot;#でもこの設定をする作業が大変なのだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかしながら、LINEなどで友人・知人から共有された（Exif情報が付加されていない）写真は、Googleフォト上のタイムライン内で、自分が撮った写真とは全然違う時系列で表示されてしまいがちです。&lt;/p&gt;&lt;p&gt;例えば、自分が&lt;code&gt;2024-06-10 13:23:25&lt;/code&gt;に撮った浅草寺雷門の写真と、同じ時間帯に友人が撮ってその翌日の夜にLINEでアルバムにアップロードされた浅草寺雷門の写真は、&lt;code&gt;2024-06-10 13:23:25&lt;/code&gt;と（例えば）&lt;code&gt;2024-06-11 20:41:59&lt;/code&gt;の日時の写真としてバラけて表示されてしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/02._XGaTh3y_1PT5O0.webp&quot; srcset=&quot;/_astro/02._XGaTh3y_NTMFL.webp 640w, /_astro/02._XGaTh3y_Omumc.webp 750w, /_astro/02._XGaTh3y_OKWs2.webp 828w, /_astro/02._XGaTh3y_1PT5O0.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それは、Googleフォトがアップロードされた画像の日付を設定する際に参照している情報が不足していることが原因で発生します。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/01.DCBKSiiy_Z1qDtvs.webp&quot; srcset=&quot;/_astro/01.DCBKSiiy_1np4nE.webp 640w, /_astro/01.DCBKSiiy_Z1dT2ys.webp 750w, /_astro/01.DCBKSiiy_1rku6S.webp 828w, /_astro/01.DCBKSiiy_Z1qlszL.webp 1080w, /_astro/01.DCBKSiiy_2c0wwN.webp 1280w, /_astro/01.DCBKSiiy_Z58vCD.webp 1668w, /_astro/01.DCBKSiiy_Z1qDtvs.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この設定項目で1枚ずつ日付を設定していくことが出来るのですが、その作業には骨が折れます・・・。（まあ、昔は愚直に500枚ぐらい編集していた時もありましたが・・・うわぁもうあんな事やってられませんわ。鳥肌が立つッ。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Exifを編集して、日付設定を楽にしよう。&lt;a href=&quot;#exifを編集して日付設定を楽にしよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そこで今回は、1枚ずつ設定するなんてことはしないで、一度の入力でおおよその日付（時間）を設定するためのコマンドを練っていきます。&lt;/p&gt;&lt;p&gt;このコマンドを使うことで、LINEなどで友人・知人から共有された（Exif情報が付加されていない）写真を、Googleフォト上のタイムライン内で適切な時系列で表示できるようになります。&lt;/p&gt;&lt;p&gt;また、以前にExif情報から画像ファイルをリネームして、その画像をjpgやpngからwebpに変換して、このwebp画像に再びExif情報を反映するツールを作りました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-rename-all-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルを一括リネームして、Exif情報も反映する&lt;/div&gt;&lt;div&gt;PowerShellを使用して画像ファイルを一括でリネームする方法を紹介します。「yyyyMMddHHmmss」形式で変えて、最終的にはGoogleフォトに反映させていきましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240205_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、この時は自分のスマホやカメラで撮っていない写真にExif情報を反映する機能を作らなかったので、今回はその機能を作るためのコマンドの知見を深めていきたいと思います。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleフォトの日付は、Exif情報によって初期設定される。&lt;a href=&quot;#googleフォトの日付はexif情報によって初期設定される&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google フォトにアップロードした画像の日付は、まあ大体こんな感じでデフォルト設定されます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Exif タグの&lt;code&gt;CreateDate&lt;/code&gt;などを参照する。（厳密にどのタグを参照しているかは詳しくは調べていません。）&lt;/li&gt;
&lt;li&gt;その Exif タグに該当する日付の情報があったら、その日時を設定する。&lt;/li&gt;
&lt;li&gt;その Exif タグに該当する日付の情報がなかったら、ファイルの作成日時を日付として設定する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;その 3 番目の状態で画像の日付が設定されるので、後で見返しづらい Google フォトになってしまうわけです。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/03.DVMqmsfU_Z1QFYCN.webp&quot; srcset=&quot;/_astro/03.DVMqmsfU_GAUna.webp 640w, /_astro/03.DVMqmsfU_H3C3A.webp 750w, /_astro/03.DVMqmsfU_Hs59q.webp 828w, /_astro/03.DVMqmsfU_Z1QFYCN.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして・・・、「『Exif』とは何ぞや？」となります。&lt;/p&gt;&lt;p&gt;「Exif」とは、画像ファイルに付加できるメタ情報のことで、その情報には、撮影したカメラの機種名、ISO、レンズなどの情報が格納されています。&lt;/p&gt;&lt;p&gt;この Exif では、撮影した位置情報なども扱えるので、 Web 上に画像をアップロードする際には、 Exif 情報の取り扱いにも注意ですね。まあ、そういった個人情報を隠すために一般的な SNS ではアップロードされると、Exif情報が消える仕様になっているのかもしれません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Exiftoolというライブラリを使う。&lt;a href=&quot;#exiftoolというライブラリを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;多彩なタグを扱える、多才なExiftoolくん。&lt;a href=&quot;#多彩なタグを扱える多才なexiftoolくん&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回も、Exif情報を編集するために「Exiftool」というライブラリを使っていきたいと思います。&lt;/p&gt;&lt;a href=&quot;https://exiftool.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://exiftool.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;exiftool.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ExifTool by Phil Harvey&lt;/div&gt;&lt;div&gt;A command-line application and Perl library for reading and writing EXIF, GPS, IPTC, XMP, makernotes and other meta information in image, audio and video files. For Windows, MacOS, and Unix systems.&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「Exiftool」はスゴイですね。Exifタグ以外にも、色々なタグを編集できるみたいです。&lt;/p&gt;&lt;a href=&quot;https://exiftool.org/TagNames/EXIF.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;exiftool.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;EXIF Tags&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;PDFとか、Quicktimeとか、9割ぐらいは何に使うのか分からないぐらいコアです・・・。
下記のPDF資料に載っています。&lt;/p&gt;&lt;a href=&quot;https://exiftool.org/TagNames.pdf&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;exiftool.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;それでは早速、Exiftoolを使う。&lt;a href=&quot;#それでは早速exiftoolを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Exiftoolを使ったPowershellコマンドがこちらになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$number&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Format &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;yyyyMMddHH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;UFormat &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;%Y&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;).AddYears(&lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;UFormat &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;%Y&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$is_correct&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getUnitOfDatetime&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$num&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$num&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getZeroPaddedUnit4&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&quot;{0:0000}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getZeroPaddedUnit2&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&quot;{0:00}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;$numStr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$is_correct&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input prefix of pictures (yyyyMMddHH)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$date_formatted.length&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$is_correct&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$y&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getZeroPaddedUnit4(getUnitOfDatetime(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$m&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getZeroPaddedUnit2(getUnitOfDatetime(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$d&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getZeroPaddedUnit2(getUnitOfDatetime(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$h&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; getZeroPaddedUnit2(getUnitOfDatetime(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted.Substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$new_create_date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}-{1}-{2} {3}:00:00&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$y&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$m&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$d&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$h&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$new_create_date&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path . &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;($_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*.exe&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-isnot&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.IO.DirectoryInfo&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOG-INFO&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.GetType&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&quot;true&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Exif&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$jpgFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AllDates&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_create_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;jpgFilePath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Rename&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$number_zeropadded&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0:0000}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$number&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.IO.Path&lt;/span&gt;&lt;span&gt;]::GetExtension($_)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_formatted&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;number_zeropadded&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOG-INFO&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;.\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$number&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOG-INFO&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.GetType&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&quot;false&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Exif info of {0} images are fixed with prompted dates.&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;$number&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これを実行すると、以下のように元画像は&lt;code&gt;.jpg_original&lt;/code&gt;のファイルとなり、&lt;code&gt;.jpg&lt;/code&gt;に Exif 情報が設定されたファイルが出来上がります。
&lt;img loading=&quot;lazy&quot; width=&quot;828&quot; height=&quot;471&quot; src=&quot;/_astro/07.o3HVsRXW_1kr47f.webp&quot; srcset=&quot;/_astro/07.o3HVsRXW_Z2ewoH4.webp 640w, /_astro/07.o3HVsRXW_ZWMUHq.webp 750w, /_astro/07.o3HVsRXW_1kr47f.webp 828w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;今回のコマンドの解説&lt;a href=&quot;#今回のコマンドの解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;# Rename&lt;/code&gt;でコメントしている部分は今回の内容とは関係ないので説明は省きます。以下の記事をご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/powershell-rename-all-image-files/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【PowerShell】画像ファイルを一括リネームして、Exif情報も反映する&lt;/div&gt;&lt;div&gt;PowerShellを使用して画像ファイルを一括でリネームする方法を紹介します。「yyyyMMddHHmmss」形式で変えて、最終的にはGoogleフォトに反映させていきましょう。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/02/20240205_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;code&gt;# Exif&lt;/code&gt;でコメントしている部分の説明に入ります。&lt;code&gt;$_.FullName&lt;/code&gt;の部分で、繰り返しているファイル群から1つのファイルの絶対パスを取得して、そのパスを&lt;code&gt;exiftool&lt;/code&gt;の引数に渡しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$jpgFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、&lt;code&gt;-AllDates&lt;/code&gt;オプションを指定することで、&lt;code&gt;CreateDate&lt;/code&gt;、&lt;code&gt;ModifyDate&lt;/code&gt;、&lt;code&gt;DateTimeOriginal&lt;/code&gt;の3つのExifタグを編集できるようです。（ソースは&lt;a href=&quot;https://sokoyama.com/change-exifdate-modifydate/&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AllDates&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_create_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;jpgFilePath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ちなみに、&lt;code&gt;$new_create_date&lt;/code&gt;を以下のように記述していますが、こちらは&lt;code&gt;&quot;{0}-{1}-{2} {3}:00:00&quot;&lt;/code&gt;ではなく&lt;code&gt;&quot;{0}:{1}:{2} {3}:00:00&quot;&lt;/code&gt;と記述しても日付がちゃんと反映されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$new_create_date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0}-{1}-{2} {3}:00:00&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$y&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$m&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$d&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$h&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$new_create_date&lt;/code&gt;変数に使う、&lt;code&gt;$date_formatted&lt;/code&gt;変数を宣言する際に、指定する日付はPowershellコンソール内で入力させるようになっています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input prefix of pictures (yyyyMMddHH)&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;今回のコマンドの効果&lt;a href=&quot;#今回のコマンドの効果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このようなコマンドを作ることで、例えば、自分が&lt;code&gt;2024-06-10 13:23:25&lt;/code&gt;に撮った浅草寺雷門の写真と、同じ時間帯に友人が撮ってその翌日の夜に LINE でアルバムにアップロードされた浅草寺雷門の写真を、&lt;code&gt;2024061013&lt;/code&gt;と指定して Exif を編集することで、ほぼ同じ時間帯の写真として Google フォト上で表示させることが出来ます。&lt;/p&gt;&lt;p&gt;例えば、先程のこの写真を&lt;code&gt;2024061420&lt;/code&gt;と打ち込んでExifを編集することで・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/01.DCBKSiiy_Z1qDtvs.webp&quot; srcset=&quot;/_astro/01.DCBKSiiy_1np4nE.webp 640w, /_astro/01.DCBKSiiy_Z1dT2ys.webp 750w, /_astro/01.DCBKSiiy_1rku6S.webp 828w, /_astro/01.DCBKSiiy_Z1qlszL.webp 1080w, /_astro/01.DCBKSiiy_2c0wwN.webp 1280w, /_astro/01.DCBKSiiy_Z58vCD.webp 1668w, /_astro/01.DCBKSiiy_Z1qDtvs.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右側にある日付の情報を見比べると分かります。&lt;code&gt;2024-06-15 21:00&lt;/code&gt;から&lt;code&gt;2024-06-14 20:00&lt;/code&gt;に設定し直されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;908&quot; src=&quot;/_astro/10.CTK_f4tO_16W8kj.webp&quot; srcset=&quot;/_astro/10.CTK_f4tO_ZfC4nm.webp 640w, /_astro/10.CTK_f4tO_2dfWts.webp 750w, /_astro/10.CTK_f4tO_ZbGDE8.webp 828w, /_astro/10.CTK_f4tO_17zxCf.webp 1080w, /_astro/10.CTK_f4tO_ZkfA47.webp 1280w, /_astro/10.CTK_f4tO_Z4mBjn.webp 1668w, /_astro/10.CTK_f4tO_16W8kj.webp 1911w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、 Google フォト上で 1 枚ずつ写真の日付を設定し直す必要が無くなりました！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事のまとめです。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Googleフォトの日付設定の問題点およびExif情報&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google フォトで手動で日付を変更するのは手間がかかる。&lt;/li&gt;
&lt;li&gt;Google フォトでは Exif 情報がないと、共有された写真の日付が正味の値として反映されない。&lt;/li&gt;
&lt;li&gt;Exif 情報とは画像ファイルに付加されたメタ情報のことで、カメラの機種や撮影日時などを含む。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Exiftoolの利用&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Exiftool とは、 Exif 情報を編集するためのツールである。&lt;/li&gt;
&lt;li&gt;Exiftool で一括で Exif 情報を編集する、PowerShell スクリプトを作った。&lt;/li&gt;
&lt;li&gt;PowerShell コンソールで日付を入力して設定する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AllDates&lt;/code&gt;オプションを使って、&lt;code&gt;CreateDate&lt;/code&gt;、&lt;code&gt;ModifyDate&lt;/code&gt;、&lt;code&gt;DateTimeOriginal&lt;/code&gt;の 3 つのタグを編集する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これでもう、友人から写真が 100 枚ぐらい送られて来ても怖くない！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでテンキーのキーボードが要らなくなるワァ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;後で思い出の写真が見返しやすくなるな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Cloud Shell】「Source: Gemini Code Assist + Google Cloud Code」って何ですか。</title><link>https://endorphinbath.com/posts/gcp-shell-editor-cloud-code-permit/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gcp-shell-editor-cloud-code-permit/</guid><description>Google Cloud Shellでプロファイルのインポートエラーを解決するための手順を紹介した記事です。Cloud Codeを担う「Gemini for Google Cloud」がプロジェクトで有効化されていないと発生する場合があります。</description><pubDate>Tue, 04 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_006.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわあ、これスゴイ面倒くさい・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;出鼻をくじかれた。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Shellでプロファイルをちゃんとインポートできない！&lt;a href=&quot;#cloud-shellでプロファイルをちゃんとインポートできない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;久しぶりにCloud Shellを開いて、開発を進めようと思った矢先に、プロファイルをロードしようとした時の話です。
いつもどおり、「Import Profile」でプロファイルをエディタに反映しようとすると、次のエラー文が表示されます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;The set project ID (blurred text) was invalid, or the current account lacks permission to view it.
Source: Gemini Code Assist + Google Cloud Code&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;実際に表示される画面はこんな感じです。右下に表示されていますね。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;652&quot; src=&quot;/_astro/01.Ce3xBXEd_2jmcAR.webp&quot; srcset=&quot;/_astro/01.Ce3xBXEd_2Xbhh.webp 640w, /_astro/01.Ce3xBXEd_1VOHxY.webp 750w, /_astro/01.Ce3xBXEd_Zs7SzB.webp 828w, /_astro/01.Ce3xBXEd_Z28xSfy.webp 1080w, /_astro/01.Ce3xBXEd_1sld7H.webp 1280w, /_astro/01.Ce3xBXEd_2jmcAR.webp 1364w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;うわあメンドクセえ・・・。
「Source: Gemini Code Assist + Google Cloud Code」って何ですか。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Cloudのコンソール上で権限を設定する&lt;a href=&quot;#google-cloudのコンソール上で権限を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Source: Gemini Code Assist + Google Cloud Code」とエラー文には記載されていますが、その権限を担うAPIの名称はその通りではありません。
そして、Google Cloudのコンソール上で、「APIとサービス」＞「有効なAPIとサービス」＞「＋APIとサービスを有効にする」と進んで、その設定に必要なAPIを検索します。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;846&quot; src=&quot;/_astro/02.IXTb1J5w_2brW9M.webp&quot; srcset=&quot;/_astro/02.IXTb1J5w_Z1wPvOw.webp 640w, /_astro/02.IXTb1J5w_5C599.webp 750w, /_astro/02.IXTb1J5w_1hQdzr.webp 828w, /_astro/02.IXTb1J5w_ZpXYct.webp 1080w, /_astro/02.IXTb1J5w_EJdUD.webp 1280w, /_astro/02.IXTb1J5w_Z2fS8gM.webp 1668w, /_astro/02.IXTb1J5w_2brW9M.webp 1919w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;「Cloud Code」や、「Cloud AI Companion」や、「Gemini for Google Cloud」で検索してみます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;844&quot; src=&quot;/_astro/03.ClqDni7L_2bIAB8.webp&quot; srcset=&quot;/_astro/03.ClqDni7L_10fWny.webp 640w, /_astro/03.ClqDni7L_Z2rszrH.webp 750w, /_astro/03.ClqDni7L_Z1fer1p.webp 828w, /_astro/03.ClqDni7L_27jGa3.webp 1080w, /_astro/03.ClqDni7L_Z1R9evL.webp 1280w, /_astro/03.ClqDni7L_hpx5J.webp 1668w, /_astro/03.ClqDni7L_2bIAB8.webp 1919w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;「Gemini for Google Cloud」というAPIを有効にします。
2024-06-14時点では、「Gemini for Google Cloud」という名称になっていますが、現在GoogleのGemini周りの開発は過渡期ですので、今後もコロコロAPIの名称が変わる可能性はありそうです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;856&quot; src=&quot;/_astro/04.CJBqPiFh_gn3eu.webp&quot; srcset=&quot;/_astro/04.CJBqPiFh_7uYmK.webp 640w, /_astro/04.CJBqPiFh_1JXAlq.webp 750w, /_astro/04.CJBqPiFh_u3Yo4.webp 828w, /_astro/04.CJBqPiFh_Z2kEzMf.webp 1080w, /_astro/04.CJBqPiFh_Z1f4rCH.webp 1280w, /_astro/04.CJBqPiFh_Tmf0e.webp 1668w, /_astro/04.CJBqPiFh_gn3eu.webp 1917w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;少し時間を置いて再びインポートする&lt;a href=&quot;#少し時間を置いて再びインポートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;APIを有効にしたら、少し時間を置きましょう。3分くらいでしょうか。ああ、カップヌードルが食べたくなってきました。
時間が経ったら、再度、「Import Profile」でプロファイルをエディタに反映します。
また先程と同じように、こんな感じの表示にはなると思いますが、とりあえずエディタをダイアログからリロードして・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;652&quot; src=&quot;/_astro/01.Ce3xBXEd_2jmcAR.webp&quot; srcset=&quot;/_astro/01.Ce3xBXEd_2Xbhh.webp 640w, /_astro/01.Ce3xBXEd_1VOHxY.webp 750w, /_astro/01.Ce3xBXEd_Zs7SzB.webp 828w, /_astro/01.Ce3xBXEd_Z28xSfy.webp 1080w, /_astro/01.Ce3xBXEd_1sld7H.webp 1280w, /_astro/01.Ce3xBXEd_2jmcAR.webp 1364w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そうしたら、Cloud Shell Editorの「Settings」で、Cloud Codeの設定をします。
「cloudcode.project」を検索窓に打ち込んで、Google Cloudプロジェクトを設定する項目を表示させます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1193&quot; height=&quot;551&quot; src=&quot;/_astro/10.DhktBLHf_1b1Adh.webp&quot; srcset=&quot;/_astro/10.DhktBLHf_ZfVlki.webp 640w, /_astro/10.DhktBLHf_MuK3g.webp 750w, /_astro/10.DhktBLHf_Z12qlud.webp 828w, /_astro/10.DhktBLHf_Z1xw22r.webp 1080w, /_astro/10.DhktBLHf_1b1Adh.webp 1193w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;その表示させた項目に、先程「Gemini for Google Cloud」APIを有効化したプロジェクトのIDを入力します。
先程表示されたエラー文である、「The set project ID (blurred text) was invalid, or the current account lacks permission to view it.」の文字列が表示されなければ、問題ないでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事では、Cloud Shell EditorでCloud Codeの権限設定をする際に必要な作業をまとめました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Cloudのコンソール上で権限を有効化する&lt;/li&gt;
&lt;li&gt;Cloud Shell Editorで権限を有効化したプロジェクトを設定する&lt;/li&gt;
&lt;li&gt;設定完了！&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;APIの名称が半年も経たない内に2回ぐらい変わっていますね・・・。開発が激しい・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Shell Editorの紹介記事がここにあります&lt;a href=&quot;#cloud-shell-editorの紹介記事がここにあります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回取り扱った、Cloud Shell Editorの色々な事柄は、以下の記事で色々紹介しています。よろしければご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;急にエラーが出てきておどろいたぞ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;名前がコロコロ変わって探しづらい時期です。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ミニマリスト】服を選ぶ方法をシステム化したい！</title><link>https://endorphinbath.com/posts/minimalist-how-to-coordinate-outfits/</link><guid isPermaLink="true">https://endorphinbath.com/posts/minimalist-how-to-coordinate-outfits/</guid><description>ミニマリストとして服選びによる決断疲れを減らしつつ、少しおしゃれを楽しむ手段を考えている記事です。毎日同じ感じの服を着る中でも、どの部分を固定するかどうかを考えていきます。</description><pubDate>Mon, 03 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～ん・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;服って・・・・・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;悩ましいよな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;毎日毎日、服を選ぶのは疲れる・・・&lt;a href=&quot;#毎日毎日服を選ぶのは疲れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;疲れますよね。
あと、所持品の量も出来るだけ少なくしたい。
そこで、服による決断疲れは減らしたいけど、少しだけオシャレしたい時もあるんですよね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ぼくの服ルール4ヶ条&lt;a href=&quot;#ぼくの服ルール4ヶ条&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで僕は、日々の服のコーディネートの決断疲れと余剰な服を無くすために、以下の事柄に着手し始めようと考えました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;同じ服を毎日着る。&lt;/li&gt;
&lt;li&gt;服のジャンルを限定する。&lt;/li&gt;
&lt;li&gt;「パジャマ」という概念を無くす。&lt;/li&gt;
&lt;li&gt;「くつ下」という概念を無くす。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;同じ服を毎日着る。&lt;a href=&quot;#同じ服を毎日着る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、決断疲れを無くすための手段としてありがちなヤツですよね。
「スティー◯・ジョ◯ズは、毎日タートルネックとジーパンとニューバランスを身に着けている！」、「マー◯・ザッ◯ーバーグは、毎日半袖のTシャツを着ている！」、というようなヤツです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/01.BqNtToXA_2bMMs6.webp&quot; srcset=&quot;/_astro/01.BqNtToXA_Z1WvJhN.webp 640w, /_astro/01.BqNtToXA_Z1W42Bn.webp 750w, /_astro/01.BqNtToXA_Z1VEzvx.webp 828w, /_astro/01.BqNtToXA_2bMMs6.webp 1024w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;この手段は、「服の制服化」として、毎日の決断疲れを無くせますし、その毎日の服を購入・調達する際にも決断する必要が無くなります。また、一気に買って、購入の手数も減らせそうですね。
そこで僕は、毎日の服は、「紺色のTシャツ」と「黒い長ズボン・パンツ」を身に着けることに決めました。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/02.BdXzFDn__ZyRNQo.webp&quot; srcset=&quot;/_astro/02.BdXzFDn__ZWu4ON.webp 640w, /_astro/02.BdXzFDn__ZLXaUL.webp 750w, /_astro/02.BdXzFDn__Z2wv8eP.webp 828w, /_astro/02.BdXzFDn__Z14NT2A.webp 1080w, /_astro/02.BdXzFDn__Z9JVmN.webp 1280w, /_astro/02.BdXzFDn__Z1PQaAs.webp 1668w, /_astro/02.BdXzFDn__ZyRNQo.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;服のジャンルを限定する。&lt;a href=&quot;#服のジャンルを限定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかし、同じ服を毎日着るとは言っても、私達は「日本」という国に住んでいるというのが厄介です。
「日本」という国は、四季折々ですよね。低緯度帯ではなければ、高緯度帯でもない。
そんな「日本」という島国では、長袖だったり半袖だったり、上着が必要なのかどうか、はたまたカジュアルなのかフォーマルなのかといった、色々なジャンルの服を日々用意する必要があります。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/03.r0pulqjz_QJq3e.webp&quot; srcset=&quot;/_astro/03.r0pulqjz_ZfD5b5.webp 640w, /_astro/03.r0pulqjz_Z57bh3.webp 750w, /_astro/03.r0pulqjz_Z1OE8A7.webp 828w, /_astro/03.r0pulqjz_lNkR2.webp 1080w, /_astro/03.r0pulqjz_1gRiwO.webp 1280w, /_astro/03.r0pulqjz_ZpdUFP.webp 1668w, /_astro/03.r0pulqjz_QJq3e.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;「しかし、その中でも、必ずしも必要がない服のジャンルがあるのではないか？」
そう考えた僕は、どうしても必須な服のジャンルを選定することにしました。
まずは、夏に必要な服です。
夏に必要な服というのは、ほとんどの人が「半袖」のものになると思います。そして、僕にとっては、最初に「半袖のTシャツ」が必ず必要な服になるので、「半袖のTシャツ」というジャンルをベースに服のコーディネートを考えていきます。（あと、「半ズボン」も。）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/04.D9jlqn_9_t3EgB.webp&quot; srcset=&quot;/_astro/04.D9jlqn_9_Z11Qu4z.webp 640w, /_astro/04.D9jlqn_9_Z11oMo9.webp 750w, /_astro/04.D9jlqn_9_Z110kij.webp 828w, /_astro/04.D9jlqn_9_t3EgB.webp 1024w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そして、秋（もしくは春）になると、肌寒い場面が垣間見えてきます。この時は「上着」というジャンルの服が必要になってきます。そこで僕にとっては、「長袖のノーカラーシャツ」が必要になってくるわけです。あと、「長ズボン・パンツ」も必要ですね。（「長袖のノーカラーシャツ」は、オフィスカジュアルとして問題なく活用できます。）
そして、とうとう最も寒い季節である冬になると、さらに寒くなってくるので、「分厚い上着」というジャンルが必要になってきますね。そこで僕がチョイスするのは、「ウルトラライトダウン」になってきます。（ウルトラライトダウンは最高ですよ！）
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/05.PMcG3U5J_Z1OrmAu.webp&quot; srcset=&quot;/_astro/05.PMcG3U5J_t5LMO.webp 640w, /_astro/05.PMcG3U5J_DBFGQ.webp 750w, /_astro/05.PMcG3U5J_Z15UgBd.webp 828w, /_astro/05.PMcG3U5J_Z2knrLG.webp 1080w, /_astro/05.PMcG3U5J_Z1pju6T.webp 1280w, /_astro/05.PMcG3U5J_1XLptn.webp 1668w, /_astro/05.PMcG3U5J_Z1OrmAu.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そして最後に、冠婚葬祭用に、「黒いセットアップ」を追加しておきますか。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/06.D7pby4J3_Z2cP05.webp&quot; srcset=&quot;/_astro/06.D7pby4J3_QCvHn.webp 640w, /_astro/06.D7pby4J3_129pBp.webp 750w, /_astro/06.D7pby4J3_ZHnwGE.webp 828w, /_astro/06.D7pby4J3_Zx8Ubh.webp 1080w, /_astro/06.D7pby4J3_mU2tv.webp 1280w, /_astro/06.D7pby4J3_Z1jbbJ9.webp 1668w, /_astro/06.D7pby4J3_Z2cP05.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;というわけで、僕に必要な服のジャンルは、以下のものになったというわけです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;半袖のTシャツ&lt;/li&gt;
&lt;li&gt;半ズボン（これはもしかしたら「長ズボン・パンツ」でも行けるかも・・・？）&lt;/li&gt;
&lt;li&gt;長袖のノーカラーシャツ&lt;/li&gt;
&lt;li&gt;長ズボン・パンツ&lt;/li&gt;
&lt;li&gt;ウルトラライトダウン&lt;/li&gt;
&lt;li&gt;黒いセットアップ&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;こう見ると、日本のような四季折々の環境下でも、僕には不要な服が結構あることが分かりました。（例えば、「長袖のTシャツ」や「長袖のパーカー」など。）
そこで、以上にリストアップしたジャンル以外の服は、所持しないようにしました。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/07.CpyANEev_Z1QpBiC.webp&quot; srcset=&quot;/_astro/07.CpyANEev_Z1u2MyR.webp 640w, /_astro/07.CpyANEev_Z1jvSEP.webp 750w, /_astro/07.CpyANEev_218hP2.webp 828w, /_astro/07.CpyANEev_Z2mlGtO.webp 1080w, /_astro/07.CpyANEev_Z1rhIO2.webp 1280w, /_astro/07.CpyANEev_1VNaLf.webp 1668w, /_astro/07.CpyANEev_Z1QpBiC.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「パジャマ」という概念を無くす。&lt;a href=&quot;#パジャマという概念を無くす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;薄々感づいてはいましたが・・・、「パジャマ」もしくは「寝巻き」って、必須なものではないんですよね。
僕は、旅行に行くときに、荷物の量を少しでも減らすために、「次の日程で着る服で寝る」ということをやっていました。つまり、「パジャマ」を旅行の際に持っていかないわけです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/08.H9An6eIa_2owFk5.webp&quot; srcset=&quot;/_astro/08.H9An6eIa_Vqd2H.webp 640w, /_astro/08.H9An6eIa_16W6VJ.webp 750w, /_astro/08.H9An6eIa_ZCzPmk.webp 828w, /_astro/08.H9An6eIa_1SAA8S.webp 1080w, /_astro/08.H9An6eIa_Z2gwA0g.webp 1280w, /_astro/08.H9An6eIa_17yjA1.webp 1668w, /_astro/08.H9An6eIa_2owFk5.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そして、そんなことを何回か繰り返すたびに、ふとある日に気付いてしまったわけです。
「あれ・・・、この旅行でやっていることって、日々の暮らしでも取り入れれば『パジャマ』を所持しなくて済むんじゃないか？」
そう思って決行したら案の定、「パジャマ」という概念は、僕には無用の長物だったようです・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/09.CTA1cgv4_17CH0A.webp&quot; srcset=&quot;/_astro/09.CTA1cgv4_Cti75.webp 640w, /_astro/09.CTA1cgv4_CUYMv.webp 750w, /_astro/09.CTA1cgv4_DkrSl.webp 828w, /_astro/09.CTA1cgv4_17CH0A.webp 1024w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「くつ下」という概念を無くす。&lt;a href=&quot;#くつ下という概念を無くす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「くつ下」って・・・、なんで履いているんですかねえ？
「くつ下」は一般的には、2つの目的によって使用されていると思っています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;靴を素足で履きたくないため。&lt;/li&gt;
&lt;li&gt;裸足だと寒いため。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;つまり、この2つの目的が不要であれば、「くつ下」を所持する必要がなくなる、もしくは数を減らせるわけです！
まず、「靴を素足で履きたくない」という欲求を無くすために、僕はコレを1年中履くことにしました。
「サンダル」
まあ、詳細に書くと、「スポーツサンダル」なんですけど。
「スポーツサンダル」は、ハイキングや軽い運動に使用するために製造されているサンダルで、このジャンルのサンダルは、基本的に足の周りを保護している作りになっています
そのため、普通のサンダルに比べて、スポーツサンダルは足の素肌が見えにくいのです。なので、場合によっては、職場でも常用できたりします。（ちなみに僕は職場で履いていました。）しかし、履けるかどうかは職場の環境によるのでしょうね。
安く抑えるのであれば、このAtikaのスポーツサンダルですかね。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3Dhlvsi&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;[アティカ] スポーツサンダル メンズ [水陸両用・通気性] アウトドア 釣り ウォーキングサンダル サンダル Rocky2&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3Dhlvsi&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;少し高価なものを買うとするならば、このKEENの「NEWPORT H2」が選択肢に入ってきます。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/49wNcJP&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;[キーン] サンダル NEWPORT H2 ニューポート エイチツー メンズ&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/49wNcJP&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;次に、「裸足だと寒い」という欲求を解消出来るかどうかですね。
これに関しては、僕個人が、冬の雪が降っている時期にも決行してみて、案外過ごせてしまいました。。。
なので、「裸足だと寒い」という目的もクリアです。（試す時は、人によっては、しもやけ（凍瘡）になる可能性もあるので、自己責任でお願いします。）
これでめでたく、「くつ下」という概念が無くなりました！
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; src=&quot;/_astro/12.CRlg5-Nb_2eDKRq.webp&quot; srcset=&quot;/_astro/12.CRlg5-Nb_1DHtLX.webp 640w, /_astro/12.CRlg5-Nb_1Eabso.webp 750w, /_astro/12.CRlg5-Nb_1EyDye.webp 828w, /_astro/12.CRlg5-Nb_2eDKRq.webp 1024w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;このルールで、おれは生きていく・・・！&lt;a href=&quot;#このルールでおれは生きていく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ということで、前節で定めたルールを基に服を着て生活をします・・・！
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/13.DGboCX6K_PN5Qu.webp&quot; srcset=&quot;/_astro/13.DGboCX6K_SmNhw.webp 640w, /_astro/13.DGboCX6K_13SHby.webp 750w, /_astro/13.DGboCX6K_ZFDf7v.webp 828w, /_astro/13.DGboCX6K_kR0Fi.webp 1080w, /_astro/13.DGboCX6K_1fUXl5.webp 1280w, /_astro/13.DGboCX6K_ZqafRz.webp 1668w, /_astro/13.DGboCX6K_PN5Qu.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;という感じで、1～2年暮らしてみて、ふと僕は当時の暮らしを振り返って思いました。
「う～ん、なんか少しだけオシャレしたくなってきたなあ？」&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;（服に飽きないために）新・ぼくの服ルール4ヶ条&lt;a href=&quot;#服に飽きないために新ぼくの服ルール4ヶ条&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで僕は、日々の服のコーディネートの決断疲れと余剰な服を無くすために、そして、少し服を楽しみながら生活していくために、ルールを見直すことにしました。
そこで、改善した服のルールが、以下の事柄です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;同じ「感じ」の服を毎日着る。&lt;/li&gt;
&lt;li&gt;服のジャンルを限定する。&lt;/li&gt;
&lt;li&gt;「パジャマ」という概念を無くす。&lt;/li&gt;
&lt;li&gt;「くつ下」という概念を無くす。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;変わったのは、1項目だけです。以下で、詳細に書いていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;同じ「感じ」の服を毎日着る。&lt;a href=&quot;#同じ感じの服を毎日着る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;同じ服を毎日着るのではなく、同じ「感じ」の服を毎日着る。
僕の場合、同じ服を毎日着るのはどうも飽きてしまい、少しだけでも毎日に変化がほしいと思ってしまいました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;変数にする部分と、定数にする部分を決める。&lt;a href=&quot;#変数にする部分と定数にする部分を決める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そこで、僕の場合は一体「どの部分に変化があれば楽しめるのか。」を考えることにしました。
毎日着る服の中に取り入れることが出来る変化って、色々ありますよね。「ジャンル」、「色」、「模様」、「シルエット（サイズ）」、etc・・・。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;703&quot; height=&quot;399&quot; src=&quot;/_astro/14.C--iyn4R_Z1Vy4wN.webp&quot; srcset=&quot;/_astro/14.C--iyn4R_Z20L7AE.webp 640w, /_astro/14.C--iyn4R_Z1Vy4wN.webp 703w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;僕の場合は、「模様」がたまに違えば、服を楽しめる、ということに気付くことが出来ました。
つまり、僕の場合に定められる、「変数」と「定数」の部分は以下になります。
変数&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;模様&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;定数&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ジャンル&lt;/li&gt;
&lt;li&gt;色&lt;/li&gt;
&lt;li&gt;シルエット（サイズ）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;大抵はユニクロでいいが、たまに違うものが欲しい。&lt;a href=&quot;#大抵はユニクロでいいがたまに違うものが欲しい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ほとんどの場合は、ユニクロの品質が良くて長持ちしてシンプルな服で良いのですよ。それが良いのですよ。
しかしそれだけだと、せっかく毎日自分の目に入るものだし、味気無いかなあ？
なのでたまには、Zozotownとかで買ってもいいんじゃない！？　うわっ、Zozotownとか久しぶりに見た。&lt;/p&gt;&lt;a href=&quot;https://zozo.jp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;zozo.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;zozo.jp&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zozo.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;たまに、自分が気に入った「模様」の服を手に入れて着たりしたら、飽きないと思うんだよなあ。普段はユニクロだから、その分お金も浮いてますしね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「定数」にする部分について&lt;a href=&quot;#定数にする部分について&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「ジャンル」、「色」、「シルエット（サイズ）」と、挙げましたが・・・。
「ジャンル」に関しては、行く時、行く先々などのTPOによったり、会う相手によったりするので、まあ一概には言えませんよね。なので、この記事では特に触れません。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;1024&quot; src=&quot;/_astro/15.CF917tYg_Z1hTPLg.webp&quot; srcset=&quot;/_astro/15.CF917tYg_1XcjT6.webp 640w, /_astro/15.CF917tYg_28IdN8.webp 750w, /_astro/15.CF917tYg_obgu4.webp 828w, /_astro/15.CF917tYg_Z1MPUWs.webp 1080w, /_astro/15.CF917tYg_ZRLXhF.webp 1280w, /_astro/15.CF917tYg_2viViB.webp 1668w, /_astro/15.CF917tYg_Z1hTPLg.webp 1792w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;そして、「色」ですが、これに関しては決める「基準」というのが一応あることにはあります。
その基準というのが、「ブルベ・イエベ」という考え方です。
「ブルベ・イエベ」というのは、「ブルー（青）ベースか、イエロー（黄色）ベースか」という観点で、自分に合う服の色を決めていく、コーディネート方法です。
どう判断するかというのは、色々な記事で載っていますが、ざっと挙げると以下です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;自分の手の平（もしくは前腕）の色は、赤みがかっているか、黄色がかっているか。&lt;/li&gt;
&lt;li&gt;自分の手の平（もしくは前腕）は、銀色の背景の中にある方が明るいのか、金色の背景の中にある方が明るいのか。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;前者に該当する方が「ブルベ」、後者に該当する方が「イエベ」になるわけです。まあ、詳しい判断方法は下記のWebサイトに載っています。この中から好きな色を選んだりして試行錯誤していくと良いんですかねえ。&lt;/p&gt;&lt;a href=&quot;https://depaco.daimaru-matsuzakaya.jp/articles/list/b220225a/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://depaco.daimaru-matsuzakaya.jp/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;depaco.daimaru-matsuzakaya.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【イエベ・ブルべの見分け方】わかりやすいセルフチェック&amp;amp;似合うコスメの選び方をパーソナルカラーのプロがレクチャー♪&lt;/div&gt;&lt;div&gt;「この色、可愛い！」と思って買ったメイクアイテムが、実際につけてみたらあまり似合わなかった、なんて経験はありませんか？自分のベースカラーやパーソナルカラーを知っておけば、似合うアイテムを上手にセレクトできるようになるんです。&lt;/div&gt;&lt;div&gt;depaco.daimaru-matsuzakaya.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://depaco.daimaru-matsuzakaya.jp/img/simpleblog/196/t/220225a_thumb.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.checco.tv/blog/article-221003-10/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.checco.tv/blog/wp-content/themes/kurasso-2021/common/img/checco_app_20230116.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;商品レビュー記事 | Checco（チェコ）編集部&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[2025年最新版]あなたはブルベ？イエベ？すぐわかる診断方法とは！？&lt;/div&gt;&lt;div&gt;[2025年最新版] あなたはブルベ？イエベ？すぐわかる診断方法とは？ コスメや服を選ぶ際、ブルベ、イエベを意識していますか？ 自分のパーソナルカラーを知ると、似合うアイテムが選びやすくなるので、買い物の失敗も防げます。 この記事では、ブル&lt;/div&gt;&lt;div&gt;www.checco.tv&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.checco.tv/blog/wp-content/uploads/2022/10/image-1.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、「シルエット（サイズ）」ですが、これはなんか、「Iライン」とか「Yライン」とかいう考え方があります。（他にも、XラインとかOラインもあるらしい。そこらへんはもうお腹いっぱいかな・・・。）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Iライン・・・スマートな印象を与える。&lt;/li&gt;
&lt;li&gt;Yライン・・・スタイルが良い印象を与える。&lt;/li&gt;
&lt;li&gt;Aライン・・・ずっしりとした印象を与える。ふくよかな印象もあるかも。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;自分はどんな感じで過ごしていきたいかを考えて、決めていきます。
「ファッション シルエット i y a」でググればもっと詳細が出てきそうです。&lt;/p&gt;&lt;a href=&quot;https://www.clubd.co.jp/mensfashion/post-6460snk1/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.clubd.co.jp/wp-content/themes/webmagazine/favicon.ico?v=20250827&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;AUEN [オーエン]（旧DCOLLECTION） - 30代・40代・50代からのメンズファッション通販 AUEN - メンズファッションオンラインストア「AUEN [オーエン]」は、“あなたの毎日を、応援します。”をブランドメッセージに掲げ、大人が自然体で魅力を発揮できるスタイルを提案します。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Aラインシルエットとは？メンズがおしゃれに着こなすポイントやコーデを解説 - AUEN [オーエン]（旧DCOLLECTION） - 30代・40代・50代からのメンズファッション通販 AUEN&lt;/div&gt;&lt;div&gt;「Aラインシルエットって何？」と疑問に思っているメンズもいるでしょう。 Aラインシルエットとは、上半身は細身、&lt;/div&gt;&lt;div&gt;www.clubd.co.jp&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の記事は、服を楽しみながら日々の決断疲れを減らすためのガイドラインである「ぼくの服ルール4ヶ条」を作成するまでの、ミニマリスト的な思考を巡らす記事でした。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;同じ「感じ」の服を毎日着る。&lt;/li&gt;
&lt;li&gt;服のジャンルを限定する。&lt;/li&gt;
&lt;li&gt;「パジャマ」という概念を無くす。&lt;/li&gt;
&lt;li&gt;「くつ下」という概念を無くす。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;服って選ぶの大変だなあって、思いました・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いっつも同じような服だけど、そんなに色々考えていたのか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;システムの構築は大変なんだぞ・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年05月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202405/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202405/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Satisfactoryの新しいシリーズが更新されています。フェーズ3に入りました。</description><pubDate>Sun, 02 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年5月に投稿した動画の一覧&lt;a href=&quot;#2024年5月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】総集編 | 荒廃の焦土をゆっくり緑地化【ゆっくり実況】&lt;a href=&quot;#terra-nil総集編--荒廃の焦土をゆっくり緑地化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VgPuHdffVpM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】Infinite Zoopで時短してみます #17 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryinfinite-zoopで時短してみます-17--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/odXI_hHvCuU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄鉱石を貪る石油精製施設 #18 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory鉄鉱石を貪る石油精製施設-18--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LH_lDs24occ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】爆弾で作るヘビーモジュラーフレーム #19 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory爆弾で作るヘビーモジュラーフレーム-19--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9kNRSnZf_J8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ガスマスクには梱包した廃重油が必要で、梱包するためには燃料を梱包する必要があってアアッ何だこれは！？ #20 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryガスマスクには梱包した廃重油が必要で梱包するためには燃料を梱包する必要があってアアッ何だこれは-20--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FvVdUdimys4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ローターを暴飲暴食するコンピューターのためにデリバリーを改善する #21 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryローターを暴飲暴食するコンピューターのためにデリバリーを改善する-21--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gKmrZy6m0VI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ローターを暴飲暴食するウンピューター先輩は、燃料式発電もしないと作れない #22 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryローターを暴飲暴食するウンピューター先輩は燃料式発電もしないと作れない-22--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lpBDAnvfzOQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ローターを暴飲暴食するコンピューター先輩のためにテレポーテーション！ #23 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryローターを暴飲暴食するコンピューター先輩のためにテレポーテーション-23--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Iqcd5qeA8mQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】強化鉄板不足に対応するべく強化鉄板専用工場を建設する #24 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory強化鉄板不足に対応するべく強化鉄板専用工場を建設する-24--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/05/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SEr9z-XSz4Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Googleドライブ】キーボードショートカットが更新されるみたいなので一覧表にまとめた</title><link>https://endorphinbath.com/posts/googledrive-updated-keyboard-shortcut/</link><guid isPermaLink="true">https://endorphinbath.com/posts/googledrive-updated-keyboard-shortcut/</guid><description>Google Driveのキーボードショートカットをまとめました。2024年8月1日からはこの仕様になるみたいです。</description><pubDate>Sat, 01 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん？　何だコレ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;キーボードショートカット・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleドライブのキーボードショートカットが新しくなるらしい&lt;a href=&quot;#googleドライブのキーボードショートカットが新しくなるらしい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google ドライブを開いていたら、ひょんとこんな掲示がされていました。
&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;867&quot; src=&quot;/_astro/01.MXX6lfFX_Z1w9dwU.webp&quot; srcset=&quot;/_astro/01.MXX6lfFX_D0RDR.webp 640w, /_astro/01.MXX6lfFX_ZUApnQ.webp 750w, /_astro/01.MXX6lfFX_2jEBRB.webp 828w, /_astro/01.MXX6lfFX_Z1ymGKk.webp 1080w, /_astro/01.MXX6lfFX_ZsLyAM.webp 1280w, /_astro/01.MXX6lfFX_1E49jg.webp 1668w, /_astro/01.MXX6lfFX_Z1w9dwU.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「キーボード ショートカットの更新 … 2024 年 8 月 1 日木曜日に、ドライブのキーボード ショートカットが更新され、頭文字検索が利用できるようになります。」とあります。
そして、「ショートカットを表示」をクリックしてみると、こんな風にショートカットキーが更新されていることが紹介されています。
&lt;img loading=&quot;lazy&quot; width=&quot;1022&quot; height=&quot;701&quot; src=&quot;/_astro/02.CgBqp98D_2eEc0L.webp&quot; srcset=&quot;/_astro/02.CgBqp98D_Z1ai7KU.webp 640w, /_astro/02.CgBqp98D_cXhGS.webp 750w, /_astro/02.CgBqp98D_1p4l9B.webp 828w, /_astro/02.CgBqp98D_2eEc0L.webp 1022w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこで、これらの更新されたキーボードショートカットキーの一覧を確認できないのかと思い、「ヘルプセンターですべて見る」に遷移しました。&lt;/p&gt;&lt;a href=&quot;https://support.google.com/drive/answer/2563044?hl=ja&amp;amp;co=GENIE.Platform%3DDesktop&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.google.com/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;support.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ウェブ上の Google ドライブのキーボード ショートカット - パソコン - Google ドライブ ヘルプ&lt;/div&gt;&lt;div&gt;Google ドライブでキーボード ショートカットを使用して、移動、選択、編集の操作を行うことができます。 注: 言語やキーボードの形式によっては、一部のショートカットを使用できない場合があります。 以下&lt;/div&gt;&lt;div&gt;support.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、 2024 年 5 月 22 日時点では、まだ全てのショートカットキーが紹介されていませんでした。&lt;/p&gt;&lt;p&gt;なので、少し気が早いですが、「ショートカット」で表示したショートカットキーの一覧を、本記事でまとめてみました。（これらのショートカットキーの内容はもう当分更新されないだろうと踏んでいます・・・！）&lt;/p&gt;&lt;p&gt;それでは、 ChatGPT にも手伝ってもらったりしながら、一覧表を作っていきましょう！ というか作りました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;キーボードショートカット一覧&lt;a href=&quot;#キーボードショートカット一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上記の画像にあった一覧表が操作内容で分類されていたので、その形式に則ってまとめていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;表示&lt;a href=&quot;#表示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;













































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;下のアイテムを選択&lt;/td&gt;&lt;td&gt;下&lt;/td&gt;&lt;td&gt;J または 下&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上のアイテムを選択&lt;/td&gt;&lt;td&gt;上&lt;/td&gt;&lt;td&gt;K または 上&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;右のアイテムを選択&lt;/td&gt;&lt;td&gt;右&lt;/td&gt;&lt;td&gt;L または 右&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;左のアイテムを選択&lt;/td&gt;&lt;td&gt;左&lt;/td&gt;&lt;td&gt;H または 左&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アイテムを選択/選択解除&lt;/td&gt;&lt;td&gt;Shift + Space&lt;/td&gt;&lt;td&gt;Ctrl + Space または X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を下に拡張&lt;/td&gt;&lt;td&gt;Shift + ↓&lt;/td&gt;&lt;td&gt;Shift + ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を上に拡張&lt;/td&gt;&lt;td&gt;Shift + ↑&lt;/td&gt;&lt;td&gt;Shift + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を右に拡張&lt;/td&gt;&lt;td&gt;Shift + →&lt;/td&gt;&lt;td&gt;Shift + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を左に拡張&lt;/td&gt;&lt;td&gt;Shift + ←&lt;/td&gt;&lt;td&gt;Shift + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を変更せずに下へ移動&lt;/td&gt;&lt;td&gt;Ctrl + ↓&lt;/td&gt;&lt;td&gt;Ctrl + ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を変更せずに上へ移動&lt;/td&gt;&lt;td&gt;Ctrl + ↑&lt;/td&gt;&lt;td&gt;Ctrl + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を変更せずに右へ移動&lt;/td&gt;&lt;td&gt;Ctrl + →&lt;/td&gt;&lt;td&gt;Ctrl + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択を変更せずに左へ移動&lt;/td&gt;&lt;td&gt;Ctrl + ←&lt;/td&gt;&lt;td&gt;Ctrl + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;表示されているすべてのアイテムを選択&lt;/td&gt;&lt;td&gt;Ctrl + A&lt;/td&gt;&lt;td&gt;Ctrl + A または Shift + A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;すべての選択を解除&lt;/td&gt;&lt;td&gt;Esc&lt;/td&gt;&lt;td&gt;Shift + N&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムをクリップボードにコピー&lt;/td&gt;&lt;td&gt;Ctrl + C&lt;/td&gt;&lt;td&gt;Ctrl + C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムのタイトルをクリップボードにコピー&lt;/td&gt;&lt;td&gt;Ctrl + Shift + C&lt;/td&gt;&lt;td&gt;Ctrl + Shift + C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムを切り取ってクリップボードに貼り付けます&lt;/td&gt;&lt;td&gt;Ctrl + X&lt;/td&gt;&lt;td&gt;Ctrl + X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クリップボードからアイテムを貼り付けます&lt;/td&gt;&lt;td&gt;Ctrl + V&lt;/td&gt;&lt;td&gt;Ctrl + V&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クリップボードのアイテムをショートカットとして貼り付け&lt;/td&gt;&lt;td&gt;Ctrl + Shift + V&lt;/td&gt;&lt;td&gt;Ctrl + Shift + V&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;移動&lt;a href=&quot;#移動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;





































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ナビゲーションパネル&lt;/td&gt;&lt;td&gt;Alt + G を押してから N または Alt + G を押してから F&lt;/td&gt;&lt;td&gt;G を押してから N または G を押してから F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アイテムビュー&lt;/td&gt;&lt;td&gt;Alt + G を押してから I&lt;/td&gt;&lt;td&gt;G を押してから I&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ページのコンテンツ&lt;/td&gt;&lt;td&gt;Alt + G を押してから C&lt;/td&gt;&lt;td&gt;G を押してから C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;詳細/履歴/環境パネル&lt;/td&gt;&lt;td&gt;Alt + G を押してから D&lt;/td&gt;&lt;td&gt;G を押してから D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アップロード状況&lt;/td&gt;&lt;td&gt;Alt + G を押してから U&lt;/td&gt;&lt;td&gt;G を押してから U&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ダウンロード状況&lt;/td&gt;&lt;td&gt;Alt + G を押してから A&lt;/td&gt;&lt;td&gt;G を押してから A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ページの先頭&lt;/td&gt;&lt;td&gt;Alt + G を押してから T&lt;/td&gt;&lt;td&gt;G を押してから T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;パス内の1つのフォルダに移動&lt;/td&gt;&lt;td&gt;Alt + G を押してから P または Alt + ↑&lt;/td&gt;&lt;td&gt;G を押してから P&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Workspace サイドバーに移動&lt;/td&gt;&lt;td&gt;Ctrl + Alt + .&lt;/td&gt;&lt;td&gt;Ctrl + Alt + .&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;次の領域&lt;/td&gt;&lt;td&gt;Ctrl + F6&lt;/td&gt;&lt;td&gt;Ctrl + F6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;前の領域&lt;/td&gt;&lt;td&gt;Ctrl + Shift + F6&lt;/td&gt;&lt;td&gt;Ctrl + Shift + F6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フィルタツールバーを開く&lt;/td&gt;&lt;td&gt;Ctrl + Shift + F&lt;/td&gt;&lt;td&gt;Ctrl + Shift + F&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アプリケーション&lt;a href=&quot;#アプリケーション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;






















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;キーボードショートカットを表示&lt;/td&gt;&lt;td&gt;Ctrl + /&lt;/td&gt;&lt;td&gt;Shift + / または Ctrl + /&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;詳細ウィンドウを表示/非表示&lt;/td&gt;&lt;td&gt;Alt + V を押してから D&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;履歴パネルを表示/非表示&lt;/td&gt;&lt;td&gt;Alt + V を押してから A&lt;/td&gt;&lt;td&gt;I&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;承認パネルを表示/非表示&lt;/td&gt;&lt;td&gt;Alt + V を押してから E&lt;/td&gt;&lt;td&gt;E&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ギャラリー表示とリスト表示を切り替え&lt;/td&gt;&lt;td&gt;Alt + V を押してから L&lt;/td&gt;&lt;td&gt;V&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ドライブを検索&lt;/td&gt;&lt;td&gt;/&lt;/td&gt;&lt;td&gt;/&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;検索候補で検索を実施します&lt;/td&gt;&lt;td&gt;‘&lt;/td&gt;&lt;td&gt;‘&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;次の表示サイズ（行の高さと要素の間隔）を選択&lt;/td&gt;&lt;td&gt;Alt + T を押してから Q&lt;/td&gt;&lt;td&gt;qq&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最後のメッセージを表示&lt;/td&gt;&lt;td&gt;Alt + G を押してから K&lt;/td&gt;&lt;td&gt;M&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;作成&lt;a href=&quot;#作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;







































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;フォルダ&lt;/td&gt;&lt;td&gt;Alt + Cを押してからF&lt;/td&gt;&lt;td&gt;Shift + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ドキュメント&lt;/td&gt;&lt;td&gt;Alt + Cを押してからT&lt;/td&gt;&lt;td&gt;Shift + T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プレゼンテーション&lt;/td&gt;&lt;td&gt;Alt + Cを押してからP&lt;/td&gt;&lt;td&gt;Shift + P&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スプレッドシート&lt;/td&gt;&lt;td&gt;Alt + Cを押してからS&lt;/td&gt;&lt;td&gt;Shift + S&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フォーム&lt;/td&gt;&lt;td&gt;Alt + Cを押してからO&lt;/td&gt;&lt;td&gt;Shift + O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;図形描画&lt;/td&gt;&lt;td&gt;Alt + Cを押してからD&lt;/td&gt;&lt;td&gt;Shift + D&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アップロード&lt;a href=&quot;#アップロード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ファイルをアップロード&lt;/td&gt;&lt;td&gt;Alt + Cを押してからU&lt;/td&gt;&lt;td&gt;Shift + U&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フォルダをアップロード&lt;/td&gt;&lt;td&gt;Alt + Cを押してからI&lt;/td&gt;&lt;td&gt;Shift + I&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;メニュー&lt;a href=&quot;#メニュー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;


































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;新規作成&lt;/td&gt;&lt;td&gt;Alt + N&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;その他の操作&lt;/td&gt;&lt;td&gt;Alt + A または Shift + F10&lt;/td&gt;&lt;td&gt;A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のフォルダの操作&lt;/td&gt;&lt;td&gt;Alt + Shift + A&lt;/td&gt;&lt;td&gt;F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;並べ替え&lt;/td&gt;&lt;td&gt;Alt + R&lt;/td&gt;&lt;td&gt;R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;設定&lt;/td&gt;&lt;td&gt;Ctrl + Shift + S&lt;/td&gt;&lt;td&gt;T&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;操作&lt;a href=&quot;#操作&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;





































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作内容&lt;/th&gt;&lt;th&gt;新しいショートカット&lt;/th&gt;&lt;th&gt;以前のショートカット&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;アイテムを開く&lt;/td&gt;&lt;td&gt;Enter または O&lt;/td&gt;&lt;td&gt;Enter または O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新しいタブでアイテムを開く&lt;/td&gt;&lt;td&gt;Ctrl + Enter&lt;/td&gt;&lt;td&gt;Ctrl + Enter&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アイテム名を変更&lt;/td&gt;&lt;td&gt;F2&lt;/td&gt;&lt;td&gt;N&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムを共有&lt;/td&gt;&lt;td&gt;Ctrl + Alt + A&lt;/td&gt;&lt;td&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムをプレビュー&lt;/td&gt;&lt;td&gt;Ctrl + Alt + P&lt;/td&gt;&lt;td&gt;P&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;削除&lt;/td&gt;&lt;td&gt;Delete または Shift + 3&lt;/td&gt;&lt;td&gt;Delete または Shift + 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムを移動&lt;/td&gt;&lt;td&gt;Ctrl + Alt + M&lt;/td&gt;&lt;td&gt;Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中のアイテムのショートカットを追加&lt;/td&gt;&lt;td&gt;Ctrl + Alt + R&lt;/td&gt;&lt;td&gt;Shift + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択したアイテムにスターを追加または削除&lt;/td&gt;&lt;td&gt;Ctrl + Alt + S&lt;/td&gt;&lt;td&gt;S&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;直前の操作を元に戻す&lt;/td&gt;&lt;td&gt;Ctrl + Z&lt;/td&gt;&lt;td&gt;Ctrl + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最後に元に戻した操作をやり直す&lt;/td&gt;&lt;td&gt;Ctrl + Y&lt;/td&gt;&lt;td&gt;Ctrl + Shift + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ファイルのホバーカードを表示します&lt;/td&gt;&lt;td&gt;Alt + 右&lt;/td&gt;&lt;td&gt;Alt + 右&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以上が、今回 Google ドライブ上で確認できたキーボードショートカットの一覧でした。&lt;/p&gt;&lt;p&gt;多くの操作が、 Alt キーを押してから実行する仕様へと変更されていることが分かりました。&lt;/p&gt;&lt;p&gt;個人的には、コピペなどは以前から使っていましたが、「その他の操作」と「現在のフォルダの操作」のショートカットキーは知らなかったので、今後使っていきたいなと思いました。&lt;/p&gt;&lt;p&gt;2024 年 8 月 1 日木曜日からは、 Google ドライブ上ですぐにキーボードショートカットを確認したい場合は、&lt;code&gt;Ctrl + /&lt;/code&gt;で確認するか、この記事を確認することにします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;だいたい右クリックで操作してしまってはいましたが、&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これを機会にショートカットキーを覚えるのも良いかもしれん。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】大規模言語モデル達の間ではReStructuredTextスタイルはあまり知られていないらしい</title><link>https://endorphinbath.com/posts/llm-knows-python-restructuredtextstyle/</link><guid isPermaLink="true">https://endorphinbath.com/posts/llm-knows-python-restructuredtextstyle/</guid><description>大規模言語モデルはPythonのSphinx用のReStructuredTextスタイルのdocstringを生成させる記事になります。汎用大規模言語モデルにも得手不得手があるようです。</description><pubDate>Fri, 31 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれっ、またGoogleスタイルだ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コイツら知らないのかもしれない。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;コイツら、Googleスタイルばかり返してくる&lt;a href=&quot;#コイツらgoogleスタイルばかり返してくる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;息抜きの記事として、書いていきます。&lt;/p&gt;&lt;p&gt;Pythonのプロジェクトで、ドキュメンテーションする時に「Sphinx」などがよく使われると思います。
そのSphinxでは、「reStructuredText」スタイルで記載されたdocstringから、Python機能群をドキュメントにしていきます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Sphinx uses the reStructuredText markup language by default, and can read MyST markdown via third-party extensions. Both of these are powerful and straightforward to use, and have functionality for complex documentation and publishing workflows. They both build upon Docutils to parse and write documents.&lt;/p&gt;&lt;p&gt;ようこそ! — Sphinx documentation&lt;/p&gt;&lt;/blockquote&gt;&lt;a href=&quot;https://www.sphinx-doc.org/en/master/index.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.sphinx-doc.org/en/master/_static/favicon.svg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.sphinx-doc.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Sphinx — Sphinx documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.sphinx-doc.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「reStructuredText」スタイルとは、以下のような形式のdocstringを指します。
コロンからフィールド名を指定して、説明文を記述していく文書形式になります。&lt;code&gt;:param&lt;/code&gt;で引数の説明文、&lt;code&gt;:type&lt;/code&gt;で引数の型を記載できたりします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;my_arg&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_other_arg&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;A function just for me.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param my_arg: The first of my arguments.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type my_arg: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param my_other_arg: The second of my arguments.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type my_other_arg: int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:returns: A message (just for me, of course).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、本記事は、Sphinxで利用できるdocstringを大規模言語モデル達に、出力してもらった時のことになります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;大規模言語モデルへのプロンプト&lt;a href=&quot;#大規模言語モデルへのプロンプト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回使った大規模言語モデルは、以下の通りになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Gemini 1.5&lt;/li&gt;
&lt;li&gt;Claude 3 Sonnet&lt;/li&gt;
&lt;li&gt;Command R+&lt;/li&gt;
&lt;li&gt;ChatGPT 4&lt;/li&gt;
&lt;li&gt;ChatGPT 3.5&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、それらの大規模言語モデルに今回プロンプトする内容は以下になります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下のPythonで書かれた[# ソースコード]に、[# スタイル]でdocstringを英語で追記して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# スタイル]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ReStructuredTextスタイル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# ソースコード]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def fetch_repositories(github, fetch_type: str, username: str | None):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if fetch_type not in [&quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raise ValueError(f&quot;&apos;fetch_type&apos; is not support &apos;{fetch_type}&apos;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if username == None:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user = github.get_user()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;else:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user = github.get_user(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos = user.get_repos(type=fetch_type)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プロンプトした結果&lt;a href=&quot;#プロンプトした結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Claude 3 Sonnet&lt;a href=&quot;#claude-3-sonnet&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、Claude 3 Sonnetに対してプロンプトした結果です。&lt;/p&gt;&lt;p&gt;このモデルでは、「ReStructuredTextスタイル」と指定したのに、「Googleスタイル」で出力されてしまっています。&lt;/p&gt;&lt;p&gt;「Googleスタイル」とは、docstringの記法の中の一つです。「Args:」や、「Returns:」という風にフィールドを指定して、説明文を記述していきます。&lt;/p&gt;&lt;p&gt;確かによく使われている記法ではありますが・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;Fetch repositories from GitHub based on the specified fetch type and username.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github (github.MainClass.Github): An instance of the PyGitHub library&apos;s Github class,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;representing the authenticated connection to GitHub.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch_type (str): The type of repositories to fetch. Must be one of &quot;all&quot;, &quot;owner&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;public&quot;, &quot;private&quot;, or &quot;forks&quot;. Raises a ValueError if an unsupported type is provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;username (str | None): The username of the GitHub user whose repositories should be fetched.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;If None, the authenticated user&apos;s repositories will be fetched.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github.PaginatedList.PaginatedList: A paginated list of repositories matching the specified&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch type and username.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Raises:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ValueError: If an unsupported fetch_type is provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not support &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Gemini 1.5&lt;a href=&quot;#gemini-15&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、Gemini 1.5に対してプロンプトした結果です。&lt;/p&gt;&lt;p&gt;コイツも、Googleスタイルで出力してしまっています・・・。（さすがGoogleのAIだなぁ。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; List[Repository]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;指定されたGitHubユーザーのリポジトリを取得します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;引数:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github (Github): GitHubオブジェクト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch_type (str): 取得するリポジトリの種類。 &quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot; のいずれかを指定できます。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;username (str | None): リポジトリを取得するユーザー名。省略した場合、現在のユーザーのリポジトリを取得します。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;戻り値:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;List[Repository]: 取得したリポジトリのリスト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;例:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;github = Github(login=&quot;your-username&quot;, password=&quot;your-password&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;repos = fetch_repositories(github, fetch_type=&quot;all&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;for repo in repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;... &lt;/span&gt;&lt;span&gt;    print(repo.name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;my-repo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;another-repo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;repos = fetch_repositories(github, fetch_type=&quot;public&quot;, username=&quot;github&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span&gt;for repo in repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;... &lt;/span&gt;&lt;span&gt;    print(repo.name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github-cli&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;エラー:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &apos;fetch_type&apos; には無効な値が渡されました。有効な値は &quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot; です。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not support &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Command R+&lt;a href=&quot;#command-r&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Command R+に対してプロンプトした結果です。コイツも、Googleスタイルで出力しています・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fetches a user&apos;s repositories from GitHub based on the provided fetch type.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github (object): Authenticated GitHub API object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch_type (str): Type of repositories to fetch. Can be &quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, or &quot;forks&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;username (str, optional): Username of the user whose repositories are to be fetched. If not provided, defaults to the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list: List of repository objects fetched from GitHub.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Raises:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ValueError: If an unsupported fetch type is provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; does not support the value &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ChatGPT 4&lt;a href=&quot;#chatgpt-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかし、ここで他の大規模言語モデルと違う動きを見せたのがChatGPTです。&lt;/p&gt;&lt;p&gt;このモデル群は、しっかり「ReStructuredTextスタイル」でdosctringを生成してくれます。&lt;/p&gt;&lt;p&gt;それでは、ChatGPT 4に対してプロンプトした結果です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fetches a list of GitHub repositories based on the specified fetch type and username.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param github: The GitHub instance.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type github: GitHub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param fetch_type: Type of repositories to fetch, valid options are &quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type fetch_type: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param username: Username of the GitHub account to fetch repositories for. If None, fetches repositories for the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type username: str | None, optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:returns: A list of repository objects.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: List[Repository]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises ValueError: If `fetch_type` is not a supported type.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not supported &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ChatGPT 3.5&lt;a href=&quot;#chatgpt-35&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、ChatGPT 3.5に対してプロンプトした結果です。コイツも、「ReStructuredTextスタイル」で生成してくれます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fetches repositories based on the specified type and optionally, username.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param github: GitHub instance.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type github: GitHub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param fetch_type: Type of repositories to fetch. It can be one of &quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, or &quot;forks&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type fetch_type: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param username: Optional. Username of the user whose repositories are to be fetched. If not provided, fetches repositories of the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type username: str or None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: List of repositories.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: list of Repository&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises ValueError: If the provided fetch_type is not supported.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not supported: &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;それじゃあ、ChatGPTはGoogleスタイルを知らなかったりするのか？&lt;a href=&quot;#それじゃあchatgptはgoogleスタイルを知らなかったりするのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;おまけで、ChatGPTに「Googleスタイル」でdosctringを生成するように依頼してみます。逆に「Googleスタイル」を存じあげなかったりするかもしれません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;以下のPythonで書かれた[# ソースコード]に、[# スタイル]でdocstringを英語で追記して。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# スタイル]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Googleスタイル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# ソースコード]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def fetch_repositories(github, fetch_type: str, username: str | None):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if fetch_type not in [&quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raise ValueError(f&quot;&apos;fetch_type&apos; is not support &apos;{fetch_type}&apos;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if username == None:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user = github.get_user()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;else:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user = github.get_user(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos = user.get_repos(type=fetch_type)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;-----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ChatGPT 3.5に対してプロンプトした結果がこちらです。ちゃんと「Googleスタイル」で生成できていますね。デキるヤツです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fetch repositories from GitHub for a given user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github: An instance of the GitHub API client.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch_type (str): The type of repositories to fetch. Can be one of [&quot;all&quot;, &quot;owner&quot;, &quot;public&quot;, &quot;private&quot;, &quot;forks&quot;].&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;username (str | None): The username of the GitHub user. If None, fetches repositories for the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;List: A list of repository objects matching the specified criteria.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not supported: &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、いくつかの大規模言語モデルにPythonのSphinx用のdocstringを生成することをテーマとした記事となりました。&lt;/p&gt;&lt;p&gt;プロンプトした結果は以下のとおりです。&lt;/p&gt;


































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;大規模言語モデル&lt;/th&gt;&lt;th&gt;ReStructuredTextスタイル&lt;/th&gt;&lt;th&gt;Googleスタイル&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Gemini 1.5&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Claude 3 Sonnet&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Command R+&lt;/td&gt;&lt;td&gt;✕&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ChatGPT 4&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ChatGPT 3.5&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;本記事は、以下の流れの構成でお届けしました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ReStructuredTextスタイルについて説明しました。&lt;/li&gt;
&lt;li&gt;5つの大規模言語モデル（Gemini 1.5、Claude 3 Sonnet、Command R+、ChatGPT 4、ChatGPT 3.5）にプロンプトし、その結果を紹介しました。&lt;/li&gt;
&lt;li&gt;特に、ChatGPT 4とChatGPT 3.5がReStructuredTextスタイルに対応していることを確認しました。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Pythonでドキュメントを作る時は、ChatGPTを使うことにしよう・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ハハア、こんなところに違いがあるのか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「汎用的な」大規模言語モデルでも、やっぱり得手不得手があるんだな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ</title><link>https://endorphinbath.com/posts/gcp-shell-editor-eclipse-theia/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gcp-shell-editor-eclipse-theia/</guid><description>Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。</description><pubDate>Wed, 15 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、これは便利ですなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、コイツ、動くぞ・・・っ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Cloudで無料で使えるオンラインエディタがある&lt;a href=&quot;#google-cloudで無料で使えるオンラインエディタがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;開発環境の整備って面倒ですよね。&lt;/p&gt;&lt;p&gt;僕がパソコンを買い替えたら、ブラウザやソフトウェアのインストール、および初期設定。そして少し落ち着いたら開発環境も構築します。&lt;/p&gt;&lt;p&gt;僕は、業界のデファクトスタンダードである、Visual Studio Codeを使っているので、前の端末で使っていたプロファイルをインポートして、そしたらシェルで動かすものもインストールして設定してどうのこうの・・・。
こういった作業って面倒ですよね。&lt;/p&gt;&lt;p&gt;そこで最近、Google Cloudで無料で使えるオンラインエディタがあることを知りました。
しかも、他のクラウドサービスである、AWSやAzureで使用できるエディタはどうやら、有料らしい・・・。&lt;/p&gt;&lt;p&gt;そこで今回、そのGoogle Cloudのエディタ、「Cloud Shell Editor」を使っていきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Shell Editorについて&lt;a href=&quot;#cloud-shell-editorについて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、Google Cloudから提供されている「Cloud Shell」で利用できる「Cloud Shell Editor」を利用していきたいと思います。&lt;/p&gt;&lt;p&gt;このエディタは、「Eclipse Theia」というオープンソースのエディタをベースに開発されているようです。&lt;/p&gt;&lt;a href=&quot;https://github.com/eclipse-theia/theia&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub - eclipse-theia/theia: Eclipse Theia is a cloud &amp;amp; desktop IDE framework implemented in TypeScript.&lt;/div&gt;&lt;div&gt;Eclipse Theia is a cloud &amp;amp; desktop IDE framework implemented in TypeScript. - eclipse-theia/theia&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://repository-images.githubusercontent.com/83050680/d5349a80-d3d5-11e9-8fe8-382569d2fac3&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;僕がこのエディタを使っている理由が4つです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;VSCodeの設定をそのまま利用できる。&lt;/li&gt;
&lt;li&gt;開発環境がCloud上にあるため、端末の種類を問わず開発環境にアクセスできる。&lt;/li&gt;
&lt;li&gt;その開発環境で何かやらかした場合は、VMを再起動してデフォルト状態からやり直せる。&lt;/li&gt;
&lt;li&gt;色々なツールがプリインストールされている。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「Cloud Shell Editor」は、VSCodeと同様に、&lt;code&gt;.code-profile&lt;/code&gt;ファイルや&lt;code&gt;settings.json&lt;/code&gt;などを使ってプロファイルを設定できます。なので、他の端末で使っていた設定をインポートできますし、逆に設定したプロファイルをエクスポートして別の端末のVSCodeのプロファイルとして設定することも可能です。（つまり、拡張機能もVSCodeと同じものがほとんど利用できる！）&lt;/p&gt;&lt;p&gt;そんな感じで、VSCodeとほとんど同じようなエディタを、Google CloudのVM上で利用できます。&lt;/p&gt;&lt;p&gt;なので、MacだろうがWindowsだろうがいつでも同じ状態のエディタで作業することが出来ます。そんな開発環境で、何かインストール作業で取り返しのつかないミスをしてしまったとしても、VMなので、再起動すれば最初の状態に戻して、作業をやり直すことも可能です。&lt;/p&gt;&lt;p&gt;そのやり直した状態からでも、既に様々なツールがVM上にプリインストールされているので、一般的な開発作業はエディタを開いた瞬間から開始することが出来ます。Git、Python、Java、Goや、Google CloudをCUIから操作する「gcloud」コマンドがデフォルトで利用できます。&lt;/p&gt;&lt;p&gt;それでは、その他の機能も詳しく見ていきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Shell EditorのUI&lt;a href=&quot;#cloud-shell-editorのui&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、UIを見ていきます。&lt;/p&gt;&lt;p&gt;UIのカラーテーマは、「Night Owl (No Italics)」を使用しています。&lt;/p&gt;&lt;p&gt;まずは、Cloud Shellを起動します・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/01.DiLeSI0G_12vYvC.webp&quot; srcset=&quot;/_astro/01.DiLeSI0G_Z1eQNC7.webp 640w, /_astro/01.DiLeSI0G_1e1deH.webp 750w, /_astro/01.DiLeSI0G_Z1aVnSS.webp 828w, /_astro/01.DiLeSI0G_Z1vJARH.webp 1080w, /_astro/01.DiLeSI0G_26BoeR.webp 1280w, /_astro/01.DiLeSI0G_ZawDUz.webp 1668w, /_astro/01.DiLeSI0G_12vYvC.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;VMがプロビジョニングされたら、エディタを開きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/02.CBUTOS6W_j6WYf.webp&quot; srcset=&quot;/_astro/02.CBUTOS6W_Z25k9Ld.webp 640w, /_astro/02.CBUTOS6W_nxR5B.webp 750w, /_astro/02.CBUTOS6W_Z21oJ2Y.webp 828w, /_astro/02.CBUTOS6W_Z2f9Cp5.webp 1080w, /_astro/02.CBUTOS6W_1ncmHu.webp 1280w, /_astro/02.CBUTOS6W_ZSVFrW.webp 1668w, /_astro/02.CBUTOS6W_j6WYf.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;何もフォルダを開いていない状態はこんな感じ。まさにVSCodeって感じ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/03.CQnJ2RKA_FgSr4.webp&quot; srcset=&quot;/_astro/03.CQnJ2RKA_2gAOC9.webp 640w, /_astro/03.CQnJ2RKA_ZkHhjX.webp 750w, /_astro/03.CQnJ2RKA_2kwfln.webp 828w, /_astro/03.CQnJ2RKA_Z1QwNcW.webp 1080w, /_astro/03.CQnJ2RKA_1KObTC.webp 1280w, /_astro/03.CQnJ2RKA_ZvjQfO.webp 1668w, /_astro/03.CQnJ2RKA_FgSr4.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、ホームディレクトリを開くと、Cloud ShellのREADMEが表示されます。
左側にはExplorerやOutlineが表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/04.BemlDx8V_Z1h9rK7.webp&quot; srcset=&quot;/_astro/04.BemlDx8V_Z23pmnN.webp 640w, /_astro/04.BemlDx8V_psEt1.webp 750w, /_astro/04.BemlDx8V_Z1YtVEz.webp 828w, /_astro/04.BemlDx8V_1gdYoN.webp 1080w, /_astro/04.BemlDx8V_ZbB9hy.webp 1280w, /_astro/04.BemlDx8V_Z2sKcs0.webp 1668w, /_astro/04.BemlDx8V_Z1h9rK7.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Gitは標準搭載ですので、すぐに&lt;code&gt;git clone&lt;/code&gt;をして開発を始めることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;909&quot; src=&quot;/_astro/05.uyTrIPyu_vV3DP.webp&quot; srcset=&quot;/_astro/05.uyTrIPyu_HeBz2.webp 640w, /_astro/05.uyTrIPyu_Z1T4un5.webp 750w, /_astro/05.uyTrIPyu_La2ig.webp 828w, /_astro/05.uyTrIPyu_wa0nP.webp 1080w, /_astro/05.uyTrIPyu_1BtXAe.webp 1280w, /_astro/05.uyTrIPyu_ZEE4zd.webp 1668w, /_astro/05.uyTrIPyu_vV3DP.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デバッガも搭載しています。まあ、僕はあまり使わないので「ある。」とだけ。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;885&quot; src=&quot;/_astro/06.EtxvgGEW_Z1sm2kR.webp&quot; srcset=&quot;/_astro/06.EtxvgGEW_2ciOS9.webp 640w, /_astro/06.EtxvgGEW_Z2osH8l.webp 750w, /_astro/06.EtxvgGEW_PMk87.webp 828w, /_astro/06.EtxvgGEW_Z1sMutJ.webp 1080w, /_astro/06.EtxvgGEW_28mKPF.webp 1280w, /_astro/06.EtxvgGEW_ZMLUg3.webp 1668w, /_astro/06.EtxvgGEW_Z1sm2kR.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、拡張機能のメニューもいつもの場所に表示されます。有名どころのものはほとんど使えそうな印象を受けました。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;910&quot; src=&quot;/_astro/11.B2D_ifqv_1B3QQ9.webp&quot; srcset=&quot;/_astro/11.B2D_ifqv_ZeBJnV.webp 640w, /_astro/11.B2D_ifqv_1EeLRL.webp 750w, /_astro/11.B2D_ifqv_ZJHOfO.webp 828w, /_astro/11.B2D_ifqv_1CJHks.webp 1080w, /_astro/11.B2D_ifqv_aTyD6.webp 1280w, /_astro/11.B2D_ifqv_Z26etwl.webp 1668w, /_astro/11.B2D_ifqv_1B3QQ9.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;VSCodeの設定をそのまま利用できる&lt;a href=&quot;#vscodeの設定をそのまま利用できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;.code-profileで設定をインポートおよびエクスポートできる&lt;a href=&quot;#code-profileで設定をインポートおよびエクスポートできる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;VSCodeで利用できるProfiles機能ですが、Cloud Shell Editorでも利用できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;.code-profile&lt;/code&gt;の拡張子を持ったファイルをエディタに置いて、&lt;code&gt;Import Proile...&lt;/code&gt;で自分のいつも通りの開発環境を始めることが出来てしまいます。（1回目のインポートに失敗することもありますが、めげずに再度インポートします。）
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;910&quot; src=&quot;/_astro/11.B2D_ifqv_1B3QQ9.webp&quot; srcset=&quot;/_astro/11.B2D_ifqv_ZeBJnV.webp 640w, /_astro/11.B2D_ifqv_1EeLRL.webp 750w, /_astro/11.B2D_ifqv_ZJHOfO.webp 828w, /_astro/11.B2D_ifqv_1CJHks.webp 1080w, /_astro/11.B2D_ifqv_aTyD6.webp 1280w, /_astro/11.B2D_ifqv_Z26etwl.webp 1668w, /_astro/11.B2D_ifqv_1B3QQ9.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;拡張機能もほとんど使える&lt;a href=&quot;#拡張機能もほとんど使える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程も少し触れましたが、拡張機能もVSCodeで使用しているものがほとんど使用できることに驚きます。
僕がいつも使用している拡張機能は以下ですが、これらは全て使用可能です。（2024-05-30時点）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Auto Close Tag&lt;/li&gt;
&lt;li&gt;Auto Conplete Tag&lt;/li&gt;
&lt;li&gt;Auto Rename Tag&lt;/li&gt;
&lt;li&gt;Code Spell Checker&lt;/li&gt;
&lt;li&gt;Draw.io Integration&lt;/li&gt;
&lt;li&gt;Error Lens&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Git History&lt;/li&gt;
&lt;li&gt;Markdown Preview Mermaid Support&lt;/li&gt;
&lt;li&gt;Material Icon Theme&lt;/li&gt;
&lt;li&gt;Night Owl&lt;/li&gt;
&lt;li&gt;Rainbow CSV&lt;/li&gt;
&lt;li&gt;Todo Tree&lt;/li&gt;
&lt;li&gt;YAML&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;上記以外には、プロビジョニングされた時からデフォルトでインストールされている拡張機能もあります。
僕が確認できた拡張機能は以下です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Cloud Code&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;HashiCorp Terraform&lt;/li&gt;
&lt;li&gt;Language Support for Java(TM) by Red Hat&lt;/li&gt;
&lt;li&gt;Maven for Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;clangd (C/C++ completion, navigation, and insights)&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;常に同じ開発環境にアクセスできる&lt;a href=&quot;#常に同じ開発環境にアクセスできる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このCloud Shell EditorはGoogle Cloud上にある開発環境なので、端末の種類を問わず、常に同じ開発環境にアクセスすることが出来ます。&lt;/p&gt;&lt;p&gt;そのため、PCを新調したり、何かしらの不具合があってPCを初期化したりした時に、再び開発環境を構築し直す手間が激減します。環境差異も無くなり、不要なバグ修正も減るでしょう。&lt;/p&gt;&lt;p&gt;Cloud Shellでは、5GBまでの永続ディスク ストレージが確保されるので、その範囲内で開発環境の設定および状態は保持されます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;VMを再起動してデフォルト状態からやり直せる&lt;a href=&quot;#vmを再起動してデフォルト状態からやり直せる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Cloud Shellで保持されている開発環境の設定は初期化することも出来ます。&lt;/p&gt;&lt;p&gt;開発環境をデフォルトの状態にリセットしたい場合は、エディタのウィンドウから「再起動」を選択することで&lt;code&gt;$HOME&lt;/code&gt;ディレクトリや環境変数などの状態が初期化されて、デフォルトの状態から開発を再開できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;909&quot; src=&quot;/_astro/22.DZV1_nI7_Z1CaJs7.webp&quot; srcset=&quot;/_astro/22.DZV1_nI7_2h4wUO.webp 640w, /_astro/22.DZV1_nI7_Zkez1i.webp 750w, /_astro/22.DZV1_nI7_2kYWE3.webp 828w, /_astro/22.DZV1_nI7_Z1BVMI7.webp 1080w, /_astro/22.DZV1_nI7_ZwBOvI.webp 1280w, /_astro/22.DZV1_nI7_2gqg7L.webp 1668w, /_astro/22.DZV1_nI7_Z1CaJs7.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;色々なツールがプリインストールされている&lt;a href=&quot;#色々なツールがプリインストールされている&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これから使用する開発環境に、既に色々なツールが整備されているのも助かります。
Cloud Shellでは、以下のツールがプリインストールされているみたいです。（全ては確認できていません・・・）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;minikube&lt;/li&gt;
&lt;li&gt;Skaffold&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;li&gt;gcloud&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;チュートリアル機能&lt;a href=&quot;#チュートリアル機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Cloud Shellには、「チュートリアル機能」というものがあり、何かしらの手順書などを画面の端に表示しながら開発作業を進めることが出来ます。&lt;/p&gt;&lt;p&gt;以下のように、エディタの右端にMarkdownを表示しながら作業できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;912&quot; src=&quot;/_astro/24.BEfW_XW3_CSBEz.webp&quot; srcset=&quot;/_astro/24.BEfW_XW3_Z1aybVM.webp 640w, /_astro/24.BEfW_XW3_1ijOU2.webp 750w, /_astro/24.BEfW_XW3_Z1FEgNF.webp 828w, /_astro/24.BEfW_XW3_Z1RryLi.webp 1080w, /_astro/24.BEfW_XW3_1JTqlh.webp 1280w, /_astro/24.BEfW_XW3_20Mp61.webp 1668w, /_astro/24.BEfW_XW3_CSBEz.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;詳細な説明は、以下の公式のガイドで確認することが出来ます。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/shell/docs/cloud-shell-tutorials/tutorials?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Cloud Shell でチュートリアルを作成する | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AI支援機能もある&lt;a href=&quot;#ai支援機能もある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Googleといえば、大規模言語モデルのAIを開発していますよね。Gemini。&lt;/p&gt;&lt;p&gt;「Cloud AI Companion API」というAPIをGoogle Cloud上で有効化すると、そのGeminiによるコードの入力支援機能を利用することが出来ます。（このAPIの名前は今日コロコロ変わります。つい先日に覗いたら「Gemini for Google Cloud」という名称になっていました。）&lt;/p&gt;&lt;a href=&quot;https://console.cloud.google.com/apis/library/cloudaicompanion.googleapis.com&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;console.cloud.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;console.cloud.google.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;console.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;右下のGeminiボタンを押せば、Cloud Shellのエディタを使用しているプロジェクトで「Gemini for Google Cloud」を有効化するかどうかを聞かれますので、有効化してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/31.C99rXX4j_ZXGtHj.webp&quot; srcset=&quot;/_astro/31.C99rXX4j_2ilcxK.webp 640w, /_astro/31.C99rXX4j_ZiWTom.webp 750w, /_astro/31.C99rXX4j_2mgCgY.webp 828w, /_astro/31.C99rXX4j_1yFWrB.webp 1080w, /_astro/31.C99rXX4j_6PNKf.webp 1280w, /_astro/31.C99rXX4j_Z2aiepc.webp 1668w, /_astro/31.C99rXX4j_ZXGtHj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;オートコンプリートなどを有効化するかどうかを設定することが出来ます。作業によってはウザい時があるのでその時は無効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/32.XSJ2BIaL_1DOmzw.webp&quot; srcset=&quot;/_astro/32.XSJ2BIaL_Z4yN3B.webp 640w, /_astro/32.XSJ2BIaL_2ojdNd.webp 750w, /_astro/32.XSJ2BIaL_ZDnkn.webp 828w, /_astro/32.XSJ2BIaL_ZRYk4u.webp 1080w, /_astro/32.XSJ2BIaL_Z2kOsKQ.webp 1280w, /_astro/32.XSJ2BIaL_sdBRD.webp 1668w, /_astro/32.XSJ2BIaL_1DOmzw.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2024年5月時点に少し使った所感としては、「まあ悪くはないかな。」と言ったところでした。&lt;/p&gt;&lt;p&gt;例えば、Goの構造体を作るときにはタグも含めて記述してくれたり、関数を作成する際には引数の部分を記述してくれてカーソルがその部分にフォーカスしてくれたりします。まあでも、フォーカスはスニペットでもいけるか。
しかしながら、Geminiなどの生成AIは発展、進化が目覚ましいです。2024年10月時点に再度使用してみると、以前にあまり出来ていなかった機能が良さげに動いていました。&lt;/p&gt;&lt;p&gt;例えば、Geminiに現在編集しているファイル内のモジュールに関して質問をすることが出来ます。
以前にこの機能を使った時はちょっと微妙な動きをしていて、現在開いているファイルの内容を質問に対して、あまり的を得ていない回答をしていました。&lt;/p&gt;&lt;p&gt;ところが、2024年10月時点ではしっかり回答できているような感じがします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/33.DziOIQEz_u9wxS.webp&quot; srcset=&quot;/_astro/33.DziOIQEz_Z1zTnJH.webp 640w, /_astro/33.DziOIQEz_RXD77.webp 750w, /_astro/33.DziOIQEz_Z1vXX1t.webp 828w, /_astro/33.DziOIQEz_Z22Ea68.webp 1080w, /_astro/33.DziOIQEz_1zGP1r.webp 1280w, /_astro/33.DziOIQEz_ZGrd90.webp 1668w, /_astro/33.DziOIQEz_u9wxS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがGeminiからの回答です。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/34.M1b9CMIi_28Ryfp.webp&quot; srcset=&quot;/_astro/34.M1b9CMIi_Z2bFKt8.webp 640w, /_astro/34.M1b9CMIi_hcgnG.webp 750w, /_astro/34.M1b9CMIi_Z27KkJT.webp 828w, /_astro/34.M1b9CMIi_ZnV8oB.webp 1080w, /_astro/34.M1b9CMIi_Z1PLh5X.webp 1280w, /_astro/34.M1b9CMIi_WgNxw.webp 1668w, /_astro/34.M1b9CMIi_28Ryfp.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「GitHub Copilot」のように普及する時は来るでしょうか・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;しかし惜しいところがある。&lt;a href=&quot;#しかし惜しいところがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、惜しいところがあるんですよね・・・&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：途中で途切れることがある&lt;a href=&quot;#その1途中で途切れることがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Shellは無料で利用できるツールなのですが、それはどうやら、Google Cloudのサービス全体のリソースの余剰分を使用しているから実現できていることらしいです。&lt;/p&gt;&lt;p&gt;なので、他の有料サービスで利用されるリソースが増加したりすることで、Cloud Shellで起動されるインスタンスのリソースが制限されるようです。そのため、作業中に突然Cloud Shellの接続が途切れることがあります。
こればっかりは、無料で利用しているので仕方がないことだと思います。他のクラウド上でエディタを開ける開発環境のサービスはほとんど有料ですしね。&lt;/p&gt;&lt;p&gt;まあでもしかし、接続が途切れる5分前ぐらいにアナウンスしたりとかはして欲しいと思いますが・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：週次で利用可能時間が設けられている&lt;a href=&quot;#その2週次で利用可能時間が設けられている&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このCloud Shellには、一定の期間内で利用できる時間が設けられています。&lt;/p&gt;&lt;p&gt;2024-05-30時点で、1週間で割り当てられている利用可能時間は、50時間以内という風にデフォルトで設定されています。その利用可能時間を増やしたい場合は、「割り当ての増加リクエスト」を申請することで、増やせる可能性があるみたいです。（課金をすることで増やせるわけではないらしい。）
以下が公式で開示されている割り当ておよび上限に関するガイドです。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/shell/docs/quotas-limits?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;割り当てと上限 | Cloud Shell | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このガイドを見ると、「Cloud Shell に 120 日間アクセスしていないと$HOMEディレクトリが削除される」らしいですね・・・。削除前に事前にメール通知がされるみたいですが・・・。気を付けないと。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：ホームディレクトリから不可視ファイルを表示する方法が分からない&lt;a href=&quot;#その3ホームディレクトリから不可視ファイルを表示する方法が分からない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これはVSCodeにもあるのか、もしくは仕様なのか、もしくは設定で変えることが出来るのか、分からないのですが・・・。&lt;/p&gt;&lt;p&gt;ホームディレクトリから、ファイル・フォルダのエクスプローラを開いた時に、不可視ファイルを表示する方法が分かりませんでした。&lt;/p&gt;&lt;p&gt;例えば、下記の画像で開いているディレクトリはホームディレクトリですが、不可視ファイルは表示されていません。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;864&quot; src=&quot;/_astro/51.ych06fUH_Z2ecpWb.webp&quot; srcset=&quot;/_astro/51.ych06fUH_2pIFPf.webp 640w, /_astro/51.ych06fUH_Z1B1lA8.webp 750w, /_astro/51.ych06fUH_2dgbgr.webp 828w, /_astro/51.ych06fUH_Z2gC6JE.webp 1080w, /_astro/51.ych06fUH_Z1b1XA7.webp 1280w, /_astro/51.ych06fUH_Z1AdhAf.webp 1668w, /_astro/51.ych06fUH_Z2ecpWb.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、開くフォルダを変えると、不可視ファイルがちゃんと表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;861&quot; src=&quot;/_astro/52.B-p7rnz6_2g90T0.webp&quot; srcset=&quot;/_astro/52.B-p7rnz6_ZHxxXU.webp 640w, /_astro/52.B-p7rnz6_kSxoD.webp 750w, /_astro/52.B-p7rnz6_ZkYxWB.webp 828w, /_astro/52.B-p7rnz6_2dAf7W.webp 1080w, /_astro/52.B-p7rnz6_L9lmj.webp 1280w, /_astro/52.B-p7rnz6_npV6u.webp 1668w, /_astro/52.B-p7rnz6_2g90T0.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;開いたフォルダのルートディレクトリにあると確認できるのですが、なぜでしょうか・・・。
個人的には、ホームディレクトリからでも不可視ファイルを参照できた方が便利だと思うのです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;他の無料オンラインエディタと比較する&lt;a href=&quot;#他の無料オンラインエディタと比較する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Cloud Shell Editor」と、その他の無料オンラインエディタと比較してみます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：GitHub Codespaces&lt;a href=&quot;#その1github-codespaces&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GitHubでコードを管理している身からしたら、最初に頭に思い浮かんだ競合が「GitHub Codespaces」です。リポジトリのページで「code」をクリックしてCodespaceを作成することが出来ます。&lt;/p&gt;&lt;p&gt;「GitHub Copilot」も導入し始めて、時代の波に乗ってきていそうな気配がします。&lt;/p&gt;&lt;a href=&quot;https://github.co.jp/features/codespaces&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.githubassets.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Codespaces&lt;/div&gt;&lt;div&gt;Your instant dev environment&lt;/div&gt;&lt;div&gt;github.co.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://github.githubassets.com/images/modules/site/social-cards/codespaces.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、個人的に気になったのが、拡張機能の少なさです・・・。&lt;/p&gt;&lt;p&gt;最もキツかったのが、Goの拡張機能が無かったところです。テストコードの自動作成やテストモジュールの管理などの強力な機能を利用出来ないというのは、Cloud Shellを使った後に触ってみると「アレ？」となってしまいます。&lt;/p&gt;&lt;p&gt;2024-10-30時点では、GitHub Codespacesでも拡張機能が充分に実装されています。Cloud Shellと遜色ないレベルで拡張機能をサポートしていました。（確か以前は「Rainbow CSV」とか対応していなかったはず・・・。エディタも日に日に進化していますね。）
&lt;img loading=&quot;lazy&quot; width=&quot;1548&quot; height=&quot;899&quot; src=&quot;/_astro/61.C2wAW39q_Z1YzqLk.webp&quot; srcset=&quot;/_astro/61.C2wAW39q_ZJBAqF.webp 640w, /_astro/61.C2wAW39q_xKwuB.webp 750w, /_astro/61.C2wAW39q_1ORWsq.webp 828w, /_astro/61.C2wAW39q_Z2fpen8.webp 1080w, /_astro/61.C2wAW39q_1hnkIl.webp 1280w, /_astro/61.C2wAW39q_Z1YzqLk.webp 1548w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：Replit&lt;a href=&quot;#その2replit&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;クラウド上で触れるコードエディタとして、「Replit」もあります。&lt;/p&gt;&lt;p&gt;Replitは、ブラウザ上で完結するオンラインの統合開発環境（IDE）です。プログラミング言語をインストールしたり、複雑な環境設定を行うことなく、手軽にコードの記述、実行、デバッグを行うことができます。他の人と共同編集したりデプロイすることも可能です。&lt;/p&gt;&lt;p&gt;最近では「Ghostwriter」という、GitHub CopilotやGemini Code Assistのようなコーディング支援AIも実装され始めているようです。&lt;/p&gt;&lt;a href=&quot;https://replit.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;replit.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;replit.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;replit.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;開発する際には、「Repl」というリポジトリというかワークスペースみたいなものを作成して、作業を始めていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1892&quot; height=&quot;905&quot; src=&quot;/_astro/66.-JqmafHj_1vRBpu.webp&quot; srcset=&quot;/_astro/66.-JqmafHj_Z1VmkK2.webp 640w, /_astro/66.-JqmafHj_Z2uNtk.webp 750w, /_astro/66.-JqmafHj_Z2rspBU.webp 828w, /_astro/66.-JqmafHj_ZeyoFO.webp 1080w, /_astro/66.-JqmafHj_OiELg.webp 1280w, /_astro/66.-JqmafHj_16vshJ.webp 1668w, /_astro/66.-JqmafHj_1vRBpu.webp 1892w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、2024-10-30時点でのReplitでは、無料枠で作成できるReplの数が「3つまで」となってしまい、手広く開発したい人には開発しにくいものになってしまいました。&lt;/p&gt;&lt;p&gt;まあ、色々な開発テンプレートが用意されていることは強みなんですけどね・・・。共同編集も出来るし・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1881&quot; height=&quot;888&quot; src=&quot;/_astro/67.BiiRU0Xd_Z1SFqkD.webp&quot; srcset=&quot;/_astro/67.BiiRU0Xd_2vDpi1.webp 640w, /_astro/67.BiiRU0Xd_Z5EGE6.webp 750w, /_astro/67.BiiRU0Xd_Z2uCiMG.webp 828w, /_astro/67.BiiRU0Xd_Z1PrQb8.webp 1080w, /_astro/67.BiiRU0Xd_ZK7RXJ.webp 1280w, /_astro/67.BiiRU0Xd_24n6p4.webp 1668w, /_astro/67.BiiRU0Xd_Z1SFqkD.webp 1881w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事では、Google Cloud Shell上で利用できるエディタを利用する方法に関して紹介しました。
以下、まとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;VSCodeの設定・拡張機能を利用可能。&lt;/li&gt;
&lt;li&gt;同じ開発環境を端末を問わずに使用。&lt;/li&gt;
&lt;li&gt;VMリセット機能でデフォルト状態に戻せる。&lt;/li&gt;
&lt;li&gt;多様なツールがプリインストール。&lt;/li&gt;
&lt;li&gt;チュートリアル機能とAI支援も活用可。&lt;/li&gt;
&lt;li&gt;無料ながら、途切れることや利用時間の制限がある点には留意が必要。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;コードエディタの候補の一つとしてアリでしょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;惜しいんだよなあ～！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「touch」タイピングが速くなりそうだ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年04月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202404/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202404/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Satisfactoryの新しいシリーズが更新されています。フェーズ2に入りました。</description><pubDate>Tue, 14 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年4月に投稿した動画の一覧&lt;a href=&quot;#2024年4月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】プールで石炭発電所を拡張してみます #09 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryプールで石炭発電所を拡張してみます-09--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dIz7rv5z918/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄鉱石だけで作れる黒色火薬 #10 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory鉄鉱石だけで作れる黒色火薬-10--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gs7q3AwD5TE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】黒色火薬が要らないダイナマイトもといノーべリスク #11 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory黒色火薬が要らないダイナマイトもといノーべリスク-11--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CjmF_Bp-6yg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ワイヤーとケーブルで作るコンクリート被覆型鋼梁 #12 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryワイヤーとケーブルで作るコンクリート被覆型鋼梁-12--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/N4zAHLRHnyk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】コンクリートと鋼梁で作る太陽光電池とギガソーラー #13 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryコンクリートと鋼梁で作る太陽光電池とギガソーラー-13--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TO7wRRFg_NU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】その有り余る電力で加速しまくれるハイパーチューブ #14 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryその有り余る電力で加速しまくれるハイパーチューブ-14--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6NR79-21Ufg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電気室とブループリントで時短してみます #15 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory電気室とブループリントで時短してみます-15--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dvcn406eELo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】蓄電装置でしっかり胡座をかきます #16 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory蓄電装置でしっかり胡座をかきます-16--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/04/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/R69emoDh03g/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】Goでリポジトリの情報を取得するCloud Functionsを作って、Pythonと比較する</title><link>https://endorphinbath.com/posts/cloudfunctions-to-get-github-repo-with-golang/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cloudfunctions-to-get-github-repo-with-golang/</guid><description>Go言語でGitHubのリポジトリ情報を取得するCloud Functionsを開発し、Pythonで作成した同様の機能と比較した記事です。使ったツールや、並行処理の比較も行っています。</description><pubDate>Mon, 13 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんかメモリ食い過ぎじゃないですか・・・！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは別の言語で作り直してみるか・・・？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以前にツールを作ったが・・・&lt;a href=&quot;#以前にツールを作ったが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前に、 GitHub で管理されているリポジトリのデータを瞬時に確認するために、 GitHub API を利用して必要なデータを抽出する Cloud Functions を、 Python で作りました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/cloudfunctions-to-get-github-repo-with-python/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GitHub】Pythonでリポジトリの情報を取得するCloud Functionsを作る&lt;/div&gt;&lt;div&gt;Pythonを使用してGitHubリポジトリの情報を取得し、Cloud Functionsで処理する方法に関する記事です。PyGithubとThreadingで実装および処理を効率的にしました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240222_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、その関数を実行した時のメモリ使用量がこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;454&quot; src=&quot;/_astro/11.DpUUpVml_Z2rDlMl.webp&quot; srcset=&quot;/_astro/11.DpUUpVml_ZVsYwd.webp 640w, /_astro/11.DpUUpVml_6X6Ql.webp 750w, /_astro/11.DpUUpVml_JaJGw.webp 828w, /_astro/11.DpUUpVml_Z2rDlMl.webp 1000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行時間はこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;484&quot; src=&quot;/_astro/12.ZbdiexNN_Z8xV1H.webp&quot; srcset=&quot;/_astro/12.ZbdiexNN_Z1NmRVA.webp 640w, /_astro/12.ZbdiexNN_24mNfl.webp 750w, /_astro/12.ZbdiexNN_Z1rabFM.webp 828w, /_astro/12.ZbdiexNN_Z8xV1H.webp 984w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれっ、メモリと時間、食い過ぎじゃないかっっ！？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;別のランタイムで実行してみよう&lt;a href=&quot;#別のランタイムで実行してみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ということで、その Python で作ったツールを別のプログラミング言語で作り直して、実行時間やメモリ消費量を比較してみたいと思います。
今回使う言語は・・・、 Go です。（はじめてです。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発に使ったライブラリなど&lt;a href=&quot;#開発に使ったライブラリなど&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回使ったライブラリやツールは下記です:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Go 1.22.2&lt;/li&gt;
&lt;li&gt;go-github（Go から GitHub API にアクセスしやすくなる。）&lt;/li&gt;
&lt;li&gt;oauth2（GitHub API にアクセスするクライアントを作るために使う。）&lt;/li&gt;
&lt;li&gt;testing, assert（Go コードをテストする。）&lt;/li&gt;
&lt;li&gt;Go Coverage Badge（Go のテストのカバレッジを&lt;code&gt;README.md&lt;/code&gt;に表示するための GitHub Actions）&lt;/li&gt;
&lt;li&gt;Cloud Shell Editor (Google Cloud で無料で使える VSCode ライクのエディタ。 Eclipse Theia というエディタがベースらしい。週で利用可能時間が決まっている。)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回、主に使用する Go のライブラリは&lt;code&gt;go-github&lt;/code&gt;です。&lt;code&gt;go-github&lt;/code&gt;は、 GitHub REST API ではなく、 GitHub GraphQL API v4 を簡単に利用できるようにするライブラリで、 GitHub のリポジトリやユーザ情報を簡単に取得できます。かの有名な Google 様から提供されているみたいですね。&lt;/p&gt;&lt;a href=&quot;https://github.com/google/go-github&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub - google/go-github: Go library for accessing the GitHub v3 API&lt;/div&gt;&lt;div&gt;Go library for accessing the GitHub v3 API. Contribute to google/go-github development by creating an account on GitHub.&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://opengraph.githubassets.com/8aea9260a67b4583daca4973a044f8e6639c7adf3d6f144b3bfebc1aa043a42f/google/go-github&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;code&gt;go get&lt;/code&gt;でインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github.com/google/go-github@latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;Cloud Shell Editorについて&lt;a href=&quot;#cloud-shell-editorについて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、 Google Cloud から提供されている「Cloud Shell」で利用できる「Cloud Shell Editor」を利用していきたいと思います。&lt;/p&gt;&lt;p&gt;このエディタに関しては、解説記事を以下のページで書いています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Shell EditorのGo拡張機能が神がかっている・・・！&lt;a href=&quot;#cloud-shell-editorのgo拡張機能が神がかっている&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Cloud Shell Editor の中で Go の開発をする時は、 Python 2 だとか、&lt;code&gt;pip&lt;/code&gt;のバージョンが古いとか言ったみたいな出来事は起こりませんでした。普通に開発をスタートすることが出来ます。&lt;/p&gt;&lt;p&gt;そして、 Cloud Shell Editor では元々Goの拡張機能がインストールされているんですけど、その拡張機能がスゴイ・・・！（Go 公式のものや、 Microsoft から提供されていものがあるようです。僕はGo公式のものを使っていますが。）
&lt;img loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;345&quot; src=&quot;/_astro/13.D1McmiQG_xDY1b.webp&quot; srcset=&quot;/_astro/13.D1McmiQG_xDY1b.webp 552w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とりあえず、僕がスゴイと思った箇所を列挙すると、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Lint が発動する。&lt;/li&gt;
&lt;li&gt;自分が選択している関数もしくはファイルに対するテストコードの雛形を自動で作成できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Lint が発動することで、実行前にコードのチェックが出来ますね。 Go は、構造体ベースで組み立てていくプログラミング言語ですので、型チェックによって実行後のデバッグを大幅に減らすことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;371&quot; src=&quot;/_astro/14.Wt2Hn5aJ_zmFPc.webp&quot; srcset=&quot;/_astro/14.Wt2Hn5aJ_Z1GsTSh.webp 640w, /_astro/14.Wt2Hn5aJ_wt5pO.webp 750w, /_astro/14.Wt2Hn5aJ_Z2woiPp.webp 828w, /_astro/14.Wt2Hn5aJ_zmFPc.webp 1071w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「テストコードの雛形を自動で作成する」機能というのが強力です・・・。&lt;/p&gt;&lt;p&gt;&lt;code&gt;ctrl + Shift + P&lt;/code&gt;でコマンドパレットを表示して、&lt;code&gt;Go: Generate Unit Tests For File&lt;/code&gt;といったコマンドを実行すれば、そのファイルと同じディレクトリ内にテストコードが記述された&lt;code&gt;.go&lt;/code&gt;ファイルが作成されます。これはスゴイ。
&lt;img loading=&quot;lazy&quot; width=&quot;671&quot; height=&quot;418&quot; src=&quot;/_astro/15.B66PJnp3_Z1KTfo1.webp&quot; srcset=&quot;/_astro/15.B66PJnp3_1iR0nF.webp 640w, /_astro/15.B66PJnp3_Z1KTfo1.webp 671w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕が今使っている&lt;code&gt;settings.json&lt;/code&gt;の Go 関連の記述はこんな感じです。（長い。）
&lt;code&gt;&quot;go.autocompleteUnimportedPackages&quot;&lt;/code&gt;と&lt;code&gt;&quot;go.editorContextMenuCommands&quot;&lt;/code&gt;の箇所を設定することで使い勝手を変えられそうです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;go.addTags&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;tags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;options&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;json=omitempty&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;promptForTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;transform&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;snakecase&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;template&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Alternate tools or alternate paths for the same tools used by the Go extension. Provide either absolute path or the name of the binary in GOPATH/bin, GOROOT/bin or PATH. Useful when you want to use wrapper script for the Go tools.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.alternateTools&quot;&lt;/span&gt;&lt;span&gt;: {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code completion without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Include unimported packages in auto-complete suggestions. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.autocompleteUnimportedPackages&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags to `go build`/`go test` used during build-on-save or running tests. (e.g. [&quot;-ldflags=&apos;-s&apos;&quot;]) This is propagated to the language server if `gopls.build.buildFlags` is not specified.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.buildFlags&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable the Go language server (`go.useLanguageServer`) to diagnose compile errors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Compiles code on file save using &apos;go build&apos; or &apos;go test -c&apos;. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.buildOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;package&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// The Go build tags to use for all commands, that support a `-tags &apos;...&apos;` argument. When running tests, go.testTags will be used instead if it was set. This is propagated to the language server if `gopls.build.buildFlags` is not specified.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.buildTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// This option lets you choose the way to display code coverage. Choose either to highlight the complete line or to show a decorator in the gutter. You can customize the colors and borders for the former and the style for the latter.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverageDecorator&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;highlight&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;coveredHighlightColor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;rgba(64,128,128,0.5)&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;uncoveredHighlightColor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;rgba(128,64,64,0.25)&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;coveredBorderColor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;rgba(64,128,128,0.5)&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;uncoveredBorderColor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;rgba(128,64,64,0.25)&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;coveredGutterStyle&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blockblue&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;uncoveredGutterStyle&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;slashyellow&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Use these options to control whether only covered or only uncovered code or both should be highlighted after running test coverage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverageOptions&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;showBothCoveredAndUncoveredCode&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// When generating code coverage, the value for -covermode. &apos;default&apos; is the default value chosen by the &apos;go test&apos; command.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverMode&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;default&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, runs &apos;go test -coverprofile&apos; on save and shows test coverage.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, shows test coverage when Go: Test Function at cursor command is run.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverOnSingleTest&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, shows test coverage when Go: Test Single File command is run.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverOnSingleTestFile&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, shows test coverage when Go: Test Package command is run.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverOnTestPackage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// When generating code coverage, should counts be shown as --374--&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.coverShowCounts&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Delve settings that applies to all debugging sessions. Debug configuration in the launch.json file will override these values.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.delveConfig&quot;&lt;/span&gt;&lt;span&gt;: {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// (Experimental) vulncheck enables vulnerability scanning.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - Imports: `&quot;Imports&quot;`: In Imports mode, `gopls` will report vulnerabilities that affect packages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// directly and indirectly used by the analyzed main module.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - Off: `&quot;Off&quot;`: Disable vulnerability analysis.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.diagnostic.vulncheck&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Off&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, tests will not run concurrently. When a new test run is started, the previous will be cancelled.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.disableConcurrentTests&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Documentation support without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Pick &apos;godoc&apos; or &apos;gogetdoc&apos; to get documentation. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.docsTool&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;godoc&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Experimental Feature: Enable/Disable entries from the context menu in the editor.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.editorContextMenuCommands&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;toggleTestFile&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;addTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;removeTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;fillStruct&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;testAtCursor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;testFile&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;testPackage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;generateTestForFunction&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;generateTestForFile&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;generateTestForPackage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;addImport&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;testCoverage&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;playground&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;debugTestAtCursor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;benchmarkAtCursor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Feature level setting to enable/disable code lens for references and run/debug tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.enableCodeLens&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;runtest&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags to pass to format tool (e.g. [&quot;-s&quot;]). Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.formatFlags&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// When the language server is enabled and one of `default`/`gofmt`/`goimports`/`gofumpt` is chosen, the language server will handle formatting. If `custom` tool is selected, the extension will use the `customFormatter` tool in the `go.alternateTools` section.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - default: If the language server is enabled, format via the language server, which already supports gofmt, goimports, goreturns, and gofumpt. Otherwise, goimports.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - gofmt: Formats the file according to the standard Go style. (not applicable when the language server is enabled)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - goimports: Organizes imports and formats the file with gofmt. (not applicable when the language server is enabled)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - goformat: Configurable gofmt, see https://github.com/mbenkmann/goformat.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - gofumpt: Stricter version of gofmt, see https://github.com/mvdan/gofumpt. . Use `gopls.format.gofumpt` instead)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - custom: Formats using the custom tool specified as `customFormatter` in the `go.alternateTools` setting. The tool should take the input as STDIN and output the formatted code as STDOUT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.formatTool&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;default&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Additional command line flags to pass to `gotests` for generating tests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.generateTestsFlags&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;-template&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;testify&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// `gocode` is deprecated by the Go language server. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable gocode&apos;s autobuild feature. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gocodeAutoBuild&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// `gocode` is deprecated by the Go language server. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Additional flags to pass to gocode. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gocodeFlags&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;-builtin&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;-ignore-case&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;-unimported-packages&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// `gocode` is deprecated by the Go language server. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Used to determine the Go package lookup rules for completions by gocode. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gocodePackageLookupMode&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;go&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code navigation without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Folder names (not paths) to ignore while using Go to Symbol in Workspace feature. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gotoSymbol.ignoreFolders&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code navigation without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If false, the standard library located at $GOROOT will be excluded while using the Go to Symbol in File feature. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gotoSymbol.includeGoroot&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code navigation without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If false, the import statements will be excluded while using the Go to Symbol in File feature. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.gotoSymbol.includeImports&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Infer GOPATH from the workspace root. This is ignored when using Go Modules.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inferGopath&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for variable types in assign statements:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   i/* int*/, j/* int*/ := 0, len(r)-1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.assignVariableTypes&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for composite literal field names:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   {/*in: */&quot;Hello, world&quot;, /*want: */&quot;dlrow ,olleH&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.compositeLiteralFields&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for composite literal types:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   for _, c := range []struct {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     in, want string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   }{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     /*struct{ in string; want string }*/{&quot;Hello, world&quot;, &quot;dlrow ,olleH&quot;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.compositeLiteralTypes&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for constant values:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   const (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     KindNone   Kind = iota/* = 0*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     KindPrint/*  = 1*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     KindPrintf/* = 2*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     KindErrorf/* = 3*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.constantValues&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for implicit type parameters on generic functions:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   myFoo/*[int, string]*/(1, &quot;hello&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.functionTypeParameters&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for parameter names:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   parseInt(/* str: */ &quot;123&quot;, /* radix: */ 8)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.parameterNames&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable/disable inlay hints for variable types in range statements:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   for k/* int*/, v/* string*/ := range []string{} {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//     fmt.Println(k, v)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//   }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ```&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.inlayHints.rangeVariableTypes&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// If true, then `-i` flag will be passed to `go build` everytime the code is compiled. Since Go 1.10, setting this may be unnecessary unless you are in GOPATH mode and do not use the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.installDependenciesWhenBuilding&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags like -rpc.trace and -logfile to be used while running the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.languageServerFlags&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags to pass to Lint tool (e.g. [&quot;-min_confidence=.8&quot;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.lintFlags&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Lints code on file save using the configured Lint tool. Options are &apos;file&apos;, &apos;package&apos;, &apos;workspace&apos; or &apos;off&apos;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - file: lint the current file on file saving&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - package: lint the current package on file saving&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - workspace: lint all the packages in the current workspace root folder on file saving&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - off: do not run lint automatically&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.lintOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;package&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Specifies Lint tool name.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.lintTool&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;staticcheck&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Real-time diagnostics without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Use gotype on the file currently being edited and report any semantic or syntactic errors found after configured delay. Not applicable when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.liveErrors&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;enabled&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;delay&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// The flags configured here will be passed through to command `goplay`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.playground&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;openbrowser&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;share&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;run&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Tags and options configured here will be used by the Remove Tags command to remove tags to struct fields. If promptForTags is true, then user will be prompted for tags and options. By default, all tags and options will be removed.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.removeTags&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;tags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;options&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;promptForTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Specifies whether to show the Welcome experience on first install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.showWelcome&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Prompt for surveys, including the gopls survey and the Go developer survey.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.survey.prompt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// enable the default go build/test task provider.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.tasks.provideDefault&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Apply the Go &amp;amp; PATH environment variables used by the extension to all integrated terminals.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.terminal.activateEnvironment&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Absolute path to a file containing environment variables definitions. File contents should be of the form key=value.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testEnvFile&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Environment variables that will be passed to the process that runs the Go tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testEnvVars&quot;&lt;/span&gt;&lt;span&gt;: {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Run benchmarks when running all tests in a file or folder.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.alwaysRunBenchmarks&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Concatenate all test log messages for a given location into a single message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.concatenateMessages&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable the Go test explorer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.enable&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Present packages in the test explorer flat or nested.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.packageDisplayMode&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;flat&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Set the source location of dynamically discovered subtests to the location of the containing function. As a result, dynamically discovered subtests will be added to the gutter test widget of the containing function.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.showDynamicSubtestsInEditor&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Open the test output terminal when a test run is started.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testExplorer.showOutput&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags to pass to `go test`. If null, then buildFlags will be used. This is not propagated to the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testFlags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Run &apos;go test&apos; on save for current package. It is not advised to set this to `true` when you have Auto Save enabled.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// The Go build tags to use for when running tests. If null, then buildTags will be used.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testTags&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Specifies the timeout for go test in ParseDuration format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.testTimeout&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;30s&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Environment variables that will be passed to the tools that run the Go tools (e.g. CGO_CFLAGS) and debuggee process launched by Delve. Format as string key:value pairs. When debugging, merged with `envFile` and `env` values with precedence `env` &amp;gt; `envFile` &amp;gt; `go.toolsEnvVars`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.toolsEnvVars&quot;&lt;/span&gt;&lt;span&gt;: {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Automatically update the tools used by the extension, without prompting the user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.toolsManagement.autoUpdate&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Specify whether to prompt about new versions of Go and the Go tools (currently, only `gopls`) the extension depends on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - proxy: keeps notified of new releases by checking the Go module proxy (GOPROXY)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - local: checks only the minimum tools versions required by the extension&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - off: completely disables version check (not recommended)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.toolsManagement.checkForUpdates&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;proxy&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Trace the communication between VS Code and the Go language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.trace.server&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;off&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code completion without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`) and use [`gopls&apos;s `ui.completion.usePlaceholders` setting](https://github.com/golang/vscode-go/wiki/settings#uicompletionuseplaceholders) instead.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Complete functions with their parameter signature, including the variable type. Not propagated to the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.useCodeSnippetsOnFunctionSuggest&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Code completion without the language server is deprecated. Enable the Go language server (`go.useLanguageServer`) and use [`gopls&apos;s `ui.completion.usePlaceholders` setting](https://github.com/golang/vscode-go/wiki/settings#uicompletionuseplaceholders) instead.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Complete functions with their parameter signature, excluding the variable types. Use `gopls.usePlaceholders` when using the language server.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.useCodeSnippetsOnFunctionSuggestWithoutType&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Use `go.toolsManagement.checkForUpdates` instead.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// When enabled, the extension automatically checks the Go proxy if there are updates available for Go and the Go tools (at present, only gopls) it depends on and prompts the user accordingly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.useGoProxyToCheckForToolUpdates&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Enable intellisense, code navigation, refactoring, formatting &amp;amp; diagnostics for Go. The features are powered by the Go language server &quot;gopls&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.useLanguageServer&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Flags to pass to `go tool vet` (e.g. [&quot;-all&quot;, &quot;-shadow&quot;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.vetFlags&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Vets code on file save using &apos;go tool vet&apos;. Not applicable when using the language server&apos;s diagnostics. See &apos;go.languageServerExperimentalFeatures.diagnostics&apos; setting.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - package: vet the current package on file saving&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - workspace: vet all the packages in the current workspace root folder on file saving&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  - off: do not run vet automatically&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;go.vetOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;package&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GoでGitHubから情報を取得する&lt;a href=&quot;#goでgithubから情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;基本構造&lt;a href=&quot;#基本構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;go-github&lt;/code&gt;から GitHub API にアクセスします。&lt;/p&gt;&lt;p&gt;情報を取得する Go 言語の基本的な構造は以下の通りです。まず、 GitHub からアクセストークンを発行して、APIにアクセスします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;github.com/google/go-github/github&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GithubSvc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GithubSvcIf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CheckRepoType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repoType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CheckPullStateType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fetchType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetRepositoryListOptions&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fetchType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;direction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;perPage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;RepositoryListOptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetAllRepositoryList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rOpt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFetchOptionFormat&lt;/span&gt;&lt;span&gt;&lt;span&gt;) ([]&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;FetchRepositories&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repoType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;) ([]&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetRepoPulls&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;) ([]&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PullRequest&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetRepoInfoInFormat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GetRepoInfo&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isThreading&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) ([]&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CreateGithubClient&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NewGithubSvcIf&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;GithubSvcIf&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubSvc&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GithubClientAdapter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;g &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubSvc&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;CreateGithubClient&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;tokenSource&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;oauth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StaticTokenSource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;oauth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Token&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;AccessToken&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;oc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;oauth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tokenSource&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewClient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;oc&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientAdapter&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;Client&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;アクセストークンのスコープは、&lt;code&gt;repo&lt;/code&gt;を全チェックにしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1121&quot; height=&quot;500&quot; src=&quot;/_astro/01.DsBQklbC_1OWpCQ.webp&quot; srcset=&quot;/_astro/01.DsBQklbC_ZIsmxk.webp 640w, /_astro/01.DsBQklbC_jXIPe.webp 750w, /_astro/01.DsBQklbC_1wcRgw.webp 828w, /_astro/01.DsBQklbC_ZLMXgV.webp 1080w, /_astro/01.DsBQklbC_1OWpCQ.webp 1121w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リポジトリの色々な情報を取得する&lt;a href=&quot;#リポジトリの色々な情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;前回と同様に、リポジトリの中にある沢山の情報を取得します。&lt;/p&gt;&lt;p&gt;リポジトリ名とその説明、URL、サイズ、Issueの数、フォークされた数などなど・・・。&lt;/p&gt;&lt;p&gt;今回取得した情報は以下のような感じです。リポジトリのサイズとか、記述した言語とかは統計してみたかったのですかさず取得します。日付はISO-8601準拠にします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TimeFmt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TimeFmtIf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Time2str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Time&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GhTime2str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Timestamp&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NewTimeFmt&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;TimeFmtIf&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TimeFmt&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;f &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TimeFmt&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Time2str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Time&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// return t.Format(time.RFC3339)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2006-01-02T15:04:05Z&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;f &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TimeFmt&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;GhTime2str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Timestamp&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Time2str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;t&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Time&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;g &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubSvc&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;GetRepoInfoInFormat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;&lt;span&gt;) (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pulls&lt;/span&gt;&lt;span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PullRequest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;pulls&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetRepoPulls&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;languages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;languages&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ListRepoLanguages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetOwner&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;GetLogin&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetName&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;NewTimeFmt&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;createdAt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GhTime2str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetCreatedAt&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updatedAt&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GhTime2str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetUpdatedAt&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;:             &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetName&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Description&lt;/span&gt;&lt;span&gt;:      &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetDescription&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;IsPrivate&lt;/span&gt;&lt;span&gt;:        &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetPrivate&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;HtmlUrl&lt;/span&gt;&lt;span&gt;:          &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetHTMLURL&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;IssuesCount&lt;/span&gt;&lt;span&gt;:      &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetOpenIssuesCount&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ForksCount&lt;/span&gt;&lt;span&gt;:       &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetForksCount&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;StargazersCount&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetStargazersCount&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;SubscribersCount&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetSubscribersCount&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Size&lt;/span&gt;&lt;span&gt;:             &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetSize&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;IsArchived&lt;/span&gt;&lt;span&gt;:       &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetArchived&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CreatedAt&lt;/span&gt;&lt;span&gt;:        &lt;/span&gt;&lt;span&gt;createdAt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;UpdatedAt&lt;/span&gt;&lt;span&gt;:        &lt;/span&gt;&lt;span&gt;updatedAt&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Language&lt;/span&gt;&lt;span&gt;:         &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetLanguage&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Languages&lt;/span&gt;&lt;span&gt;:        &lt;/span&gt;&lt;span&gt;languages&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;PullsCount&lt;/span&gt;&lt;span&gt;:       &lt;/span&gt;&lt;span&gt;int32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;pulls&lt;/span&gt;&lt;span&gt;)),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;処理をGoroutine化する&lt;a href=&quot;#処理をgoroutine化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回取得する情報の中には、リポジトリのプルリクのカウント、また取得するプログラミング言語は複数となっています。&lt;/p&gt;&lt;p&gt;そのように情報を取得する場合には、 GitHub API へのリクエストは一回だけでは足りません。上記の2種類の情報を取得するために更に2回リクエストを行う必要があります。（そして、更に 2 回リクエストを行うリポジトリの数が 100 個近くあるため、 200 回のGETリクエストを行います・・・）&lt;/p&gt;&lt;p&gt;それだけリクエストの数が多いと流石に処理時間が長すぎるので、 Python の時はマルチスレッド化しました。&lt;/p&gt;&lt;p&gt;しかし、 Go の場合は「Goroutine」というものがあります。スレッドを追加するより、更に軽く、更に速く処理を並行化できる代物みたいです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;g &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubSvc&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;GetRepoInfo&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Context&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;GithubClientIf&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isThreading&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;) ([]&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;repos&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;FetchRepositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;OutLog&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isThreading&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sync&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WaitGroup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;mu&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sync&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Mutex&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repos&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;wg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Repository&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;defer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Done&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetRepoInfoInFormat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;mu&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Lock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;mu&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Unlock&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;OutLog&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;wg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Wait&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repos&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;RepoFormat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;GetRepoInfoInFormat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;OutLog&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Go の処理の内容は、ざっとこんな感じです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;var wg sync.WaitGroup&lt;/code&gt;で、これから実行する Goroutine が入るグループを作成します。（下記の Python の処理の&lt;code&gt;threads&lt;/code&gt;に該当しそうです。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mu := &amp;amp;sync.Mutex{}&lt;/code&gt;で、&lt;code&gt;mutex&lt;/code&gt;という、リソースに一度に一つのスレッドしかアクセスできないようにするロック機構を作ります。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wg.Add(1)&lt;/code&gt;で、 Goroutine をグループに追加します。（下記の Python の処理の&lt;code&gt;thread.start()&lt;/code&gt;に該当しそうです。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mu.Lock()&lt;/code&gt;で、リソース（今回のスライス）をロックします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;results = append(results, *rf)&lt;/code&gt;で、情報をスライスに格納します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mu.Unlock()&lt;/code&gt;で、リソース（今回のスライス）をアンロックします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wg.Wait()&lt;/code&gt;で、グループに追加した Goroutine が全て終了するまで&lt;code&gt;GetRepoInfo&lt;/code&gt;関数が終了しないようにします。（下記の Python の処理の&lt;code&gt;thread.join()&lt;/code&gt;に該当しそうです。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;前回書いた Python のマルチスレッド処理のコードと比較してみます。&lt;/p&gt;&lt;p&gt;仕組みは大体同じで、コードの長さはあまり変わりませんね。しかし、実行した時のメモリ使用量と実行時間がどれぐらい変化があるのでしょうか・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; threading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; TypedDict, Final&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Github&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; get_config, get_github_token, get_github_username, get_env_variable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; memory_profiler &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not support &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;store_repo_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj: Repo_format &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info_in_format&lt;/span&gt;&lt;span&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# gh_info.append(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# @profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is_threading&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; list[Repo_format]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(github, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; is_threading:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; repo &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; threading.&lt;/span&gt;&lt;span&gt;Thread&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;store_repo_info, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(repo, results))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(thread)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread.&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; thread &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; threads:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; repo &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info: Repo_format &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info_in_format&lt;/span&gt;&lt;span&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; results&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テストして、カバレッジをREADME.mdに表示する&lt;a href=&quot;#テストしてカバレッジをreadmemdに表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;有名なリポジトリではよく、テストのカバレッジを README の冒頭で表示してたりしますよね。アレを、 Go でもやってみたいと思います。&lt;/p&gt;&lt;p&gt;今回使うのは、「Go Coverage Badge」いう GitHub Actions です。&lt;/p&gt;&lt;a href=&quot;https://github.com/marketplace/actions/go-coverage-badge&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Go Coverage Badge - GitHub Marketplace&lt;/div&gt;&lt;div&gt;Generate coverage badge for go projects&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/67116787?s=400&amp;amp;v=4&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回使用し たGitHub Actions のワークフローはこちら。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;go-test-integration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;permissions&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;write-all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GO_VERSION&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;1.22&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;COV_FILE&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;coverage.out&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Set up Golang&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-go@v5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;go-version-file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;go.mod&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Check Go version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;go version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Run Test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;go test -v ./... -coverpkg=./mypkg -covermode=count -coverprofile=${{ env.COV_FILE }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;go tool cover -func=${{ env.COV_FILE }} -o=${{ env.COV_FILE }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Go Coverage Badge&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Pass the `coverage.out` output to this action&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;tj-actions/coverage-badge-go@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.COV_FILE }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Push changes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.email &quot;action@github.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.name &quot;GitHub Action&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git log -1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git diff --cached --quiet || (git commit -m &quot;chore: Updated coverage badge.&quot; &amp;amp;&amp;amp; git push origin HEAD)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;前回 Python 開発では、依存した GitHub Actions が 6 個ありましたが、今回は 3 個に減らすことが出来ました。&lt;/p&gt;&lt;p&gt;「Pytest Coverage Comment」のように、テスト結果を細かく表示したりはしていませんが、バッジを表示するためであれば、このぐらいの依存で賄えるみたいですね。&lt;/p&gt;&lt;p&gt;バッジがちゃんと追加できているとこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;525&quot; src=&quot;/_astro/19.6xnk8N1X_2cMdCC.webp&quot; srcset=&quot;/_astro/19.6xnk8N1X_2gIE2c.webp 640w, /_astro/19.6xnk8N1X_Z27eT2E.webp 750w, /_astro/19.6xnk8N1X_1U2mSf.webp 828w, /_astro/19.6xnk8N1X_2cMdCC.webp 984w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テストは後で書きます・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Functions にデプロイする&lt;a href=&quot;#cloud-functions-にデプロイする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Go で GitHub 情報を取得して、テストもある程度行えたならば、 Cloud Functions として本処理をデプロイしていきたいと思います。（今回取得する情報は、 GAS（Google Apps Script）から取って Google スプレッドシートに入れたかったのです。）&lt;/p&gt;&lt;p&gt;今回は、 Google Cloud のコンソールからではなく、 gcloud CLI からデプロイしていきたいと思います。（Go は、パッケージの中に色々とファイルが入っているので、コンソールからデプロイするとなると、だいぶ手間が掛かりますね。）&lt;/p&gt;&lt;p&gt;以下のように、下記の関数をデプロイします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;function.go&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;bytes&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;context&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;encoding/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;io&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;net/http&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;os&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;time&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;github.com/GoogleCloudPlatform/functions-framework-go/functions&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;HTTP&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;RetrieveGhRepoByReq&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;RetrieveGhRepoByReq&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// helloHTTP is an HTTP Cloud Function with a request parameter.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RetrieveGhRepoByReq&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ResponseWriter&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReqBody&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`json:&quot;token&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReqBody&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Body&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewDecoder&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Body&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Decode&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusBadRequest&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Token&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;RetrieveGhRepo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rb&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Token&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;StatusInternalServerError&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;resObj&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;struct&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt;{} &lt;/span&gt;&lt;span&gt;`json:&quot;data&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Data&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewEncoder&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;w&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resObj&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ディレクトリ構成はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--mocks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--function.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--github.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--lmak.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--function.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--github.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--go.mod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--go.sum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--lmak.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--tests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--function_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--github_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| |--lmak_test.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;デプロイするパッケージの中には&lt;code&gt;go.mod&lt;/code&gt;が必要なので、&lt;code&gt;mypkg&lt;/code&gt;の中に作ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;example.com/mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tidy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;go.mod&lt;/code&gt;が出来たら、&lt;code&gt;gcloud&lt;/code&gt;を打ち込んでデプロイします。&lt;code&gt;function.go&lt;/code&gt;で設定したエントリーポイントを指定して関数を作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{MY_PACKAGE}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--gen2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--runtime=go122&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--region=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;MY_REGION}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--source=.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--entry-point=RetrieveGhRepoByReq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--trigger-http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--allow-unauthenticated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--timeout=180s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デプロイ後の格闘&lt;a href=&quot;#デプロイ後の格闘&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;デプロイ後に直面するのが、 API の様々な閾値に起因するバグです。&lt;/p&gt;&lt;p&gt;と思ったので、ある程度閾値を上げました。
&lt;img loading=&quot;lazy&quot; width=&quot;1244&quot; height=&quot;681&quot; src=&quot;/_astro/32.Cnh7KqCy_Z2ooRdA.webp&quot; srcset=&quot;/_astro/32.Cnh7KqCy_ZNg032.webp 640w, /_astro/32.Cnh7KqCy_2dbCEA.webp 750w, /_astro/32.Cnh7KqCy_21iEnm.webp 828w, /_astro/32.Cnh7KqCy_1Icnqq.webp 1080w, /_astro/32.Cnh7KqCy_Z2ooRdA.webp 1244w&quot; /&gt;&lt;/p&gt;&lt;p&gt;全く同じ処理をさせた Python の関数よりも「割り当てられたメモリ」を減らせました。
&lt;img loading=&quot;lazy&quot; width=&quot;1044&quot; height=&quot;614&quot; src=&quot;/_astro/21.C7e9B-u8_NgtJJ.webp&quot; srcset=&quot;/_astro/21.C7e9B-u8_ZjoEVK.webp 640w, /_astro/21.C7e9B-u8_Z1taho8.webp 750w, /_astro/21.C7e9B-u8_172RL7.webp 828w, /_astro/21.C7e9B-u8_NgtJJ.webp 1044w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Go と Python の実行時の比較&lt;a href=&quot;#go-と-python-の実行時の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして実行してみると、かなりの違いが表れました。&lt;/p&gt;&lt;p&gt;まずは、 Python です。この記事の冒頭で載せたメモリ使用量は、 491.37 MiB でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;454&quot; src=&quot;/_astro/11.DpUUpVml_Z2rDlMl.webp&quot; srcset=&quot;/_astro/11.DpUUpVml_ZVsYwd.webp 640w, /_astro/11.DpUUpVml_6X6Ql.webp 750w, /_astro/11.DpUUpVml_JaJGw.webp 828w, /_astro/11.DpUUpVml_Z2rDlMl.webp 1000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、 Go です。メモリ使用量を見ると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;958&quot; height=&quot;453&quot; src=&quot;/_astro/41.CVm7y9iv_1BgWvD.webp&quot; srcset=&quot;/_astro/41.CVm7y9iv_Z1fwlkP.webp 640w, /_astro/41.CVm7y9iv_2ksodO.webp 750w, /_astro/41.CVm7y9iv_yaagA.webp 828w, /_astro/41.CVm7y9iv_1BgWvD.webp 958w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Pythonn の 491.37 MiB から、 26.51 MiB に減らせました！
なんと、 20 分の 1 です・・・。&lt;/p&gt;&lt;p&gt;次に、実行時間を見ていきます。記事の冒頭で載せた Python の値は、 3 分でした。
&lt;img loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;484&quot; src=&quot;/_astro/12.ZbdiexNN_Z8xV1H.webp&quot; srcset=&quot;/_astro/12.ZbdiexNN_Z1NmRVA.webp 640w, /_astro/12.ZbdiexNN_24mNfl.webp 750w, /_astro/12.ZbdiexNN_Z1rabFM.webp 828w, /_astro/12.ZbdiexNN_Z8xV1H.webp 984w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、 Go です。実行時間を見ると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1007&quot; height=&quot;496&quot; src=&quot;/_astro/42.DpVSksfu_2pkjSn.webp&quot; srcset=&quot;/_astro/42.DpVSksfu_Z22duYw.webp 640w, /_astro/42.DpVSksfu_ZHntiV.webp 750w, /_astro/42.DpVSksfu_Z1JFRtj.webp 828w, /_astro/42.DpVSksfu_2pkjSn.webp 1007w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Python の 3 分から、 10 秒に減らせました！
なんと・・・ 18 分の 1 です・・・。
これはスゴイ・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、以前に Python で作った GitHub の情報を取得する処理を、 Go で作り直してその実行状況を比較する試みを行いました。&lt;/p&gt;&lt;p&gt;同じ処理を実行させた比結果がこちらです。&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;言語&lt;/th&gt;&lt;th&gt;メモリ使用量&lt;/th&gt;&lt;th&gt;実行時間&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Python&lt;/td&gt;&lt;td&gt;491.37 MiB&lt;/td&gt;&lt;td&gt;183 s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Go&lt;/td&gt;&lt;td&gt;26.51 MiB&lt;/td&gt;&lt;td&gt;10.45 s&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;そして、本記事のまとめです。以下の点を網羅しています&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Python で作成したツールのパフォーマンス問題と Go への移行。&lt;/li&gt;
&lt;li&gt;Go のライブラリ&lt;code&gt;go-github&lt;/code&gt;による GitHub API へのアクセス方法。&lt;/li&gt;
&lt;li&gt;「Cloud Shell Editor」の Go 関連の機能。&lt;/li&gt;
&lt;li&gt;Cloud Functions へのデプロイと実行時間及びメモリ消費量の比較。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;えっ、こんなに変わるの！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんかおらGoが好きになってきたぞ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Chrome拡張機能】一般公開の申請をするまでの手順</title><link>https://endorphinbath.com/posts/chrome-extension-publishing-process/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-extension-publishing-process/</guid><description>自作のChrome拡張機能を一般公開するまでの手順に関する記事です。ダッシュボードへの登録、掲載情報の設定、連絡先の設定、審査申請、そして公開に至るまでのほぼ全ての過程を紹介します。</description><pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;前に作った拡張機能を公開するぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ、やりますかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;公開すれば、機能のフォルダをローカルに置かなくて済むぞ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自作のChrome拡張機能を一般公開したい&lt;a href=&quot;#自作のchrome拡張機能を一般公開したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、以前に開発したChrome拡張機能を使って、拡張機能を外部に一般公開するための手順を抑えていきます。&lt;/p&gt;&lt;p&gt;使用するChrome拡張機能の開発に関する記事は、こんな感じになっています。内容が気になったら読んでみて下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/chrome-extension-github-main-branch-notice/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Chrome拡張機能開発】GitHubでmainブランチにいる時に目立たせて気付きたい&lt;/div&gt;&lt;div&gt;GitHubでmainブランチにいることを目立たせるChrome拡張機能の開発方法を初学者向けに解説します。Storage APIを処理するためにPromiseメソッドチェーンを組んで実装しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/04/20240215_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回、こちらの記事を参考にさせていただきました。そこで、2024-05-07時点でのChromeウェブストアへの公開手順を確認するのが、本記事の主題となっています。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/sasao3/items/0606b67da01948ae58b7&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Chrome拡張機能の申請手順 - Qiita&lt;/div&gt;&lt;div&gt;はじめに Chrome拡張機能の申請手順についてまとめます。 手順 1.ChromeWebStoreの登録 ChromeWebStoreに登録する際、初回のみ5ドルの登録料がかかります。 Chrome ウェブストアのデベロッパー登録 以下の確認、支払いをする。 デベ...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMzgxMzc2JTJGcHJvZmlsZS1pbWFnZXMlMkYxNTg5NzI0ODE0P2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz03MWIxZTlkNDFiNTE4NGIzYjUxMWVjNTg1ZDRmNTU2YQ%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Ddb7fd0dfcb5713dccb29b52376c191a7?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9Q2hyb21lJUU2JThCJUExJUU1JUJDJUI1JUU2JUE5JTlGJUU4JTgzJUJEJUUzJTgxJUFFJUU3JTk0JUIzJUU4JUFCJThCJUU2JTg5JThCJUU5JUEwJTg2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9NGYyNGNjNWUwODdkYWJmMTM2NGEyYjM3NDZkNGMzYjg&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBzYXNhbzMmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz00MjMwYWI3MThhZTM0MTQxZmI3YWQxNjg2Njg1MDM3MQ&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=649a0310b0ca4bfa922c9908fb86cf98&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デベロッパー登録をする&lt;a href=&quot;#デベロッパー登録をする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Chrome拡張機能の公開申請をするためのプラットフォームである、「Chrome Web Store Developer Dashboard」を使用するために、デベロッパー登録を行います。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://chrome.google.com/webstore/devconsole/register&quot; target=&quot;_blank&quot;&gt;このリンク&lt;/a&gt;から登録できます。&lt;/p&gt;&lt;p&gt;そして、登録するためには初回5米ドルが必要ですので、悲しい表情をしながら決済をします。
プライバシーポリシーへの同意などもして処理を進めていくと、このようにデベロッパーとしての登録が完了します。（一応、「非取引業者」として登録しました。）
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;906&quot; src=&quot;/_astro/01.Bne6sE9T_HEDRH.webp&quot; srcset=&quot;/_astro/01.Bne6sE9T_ZUrtc4.webp 640w, /_astro/01.Bne6sE9T_1xqxEK.webp 750w, /_astro/01.Bne6sE9T_ZQw3sP.webp 828w, /_astro/01.Bne6sE9T_Z1Ogvh3.webp 1080w, /_astro/01.Bne6sE9T_ZIVx4E.webp 1280w, /_astro/01.Bne6sE9T_25yrj9.webp 1668w, /_astro/01.Bne6sE9T_HEDRH.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ストアの掲載情報などを設定する&lt;a href=&quot;#ストアの掲載情報などを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;デベロッパーダッシュボードに進むと、このように「新しいアイテム」を追加できる画面が表示されますので、さっそく追加していきたいと思います。&lt;/p&gt;&lt;p&gt;「＋新しいアイテム」をクリックして、拡張機能が圧縮されたZIPファイルをアップロードします。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/02.CXHgpDtU_Z9PPXy.webp&quot; srcset=&quot;/_astro/02.CXHgpDtU_gRhh0.webp 640w, /_astro/02.CXHgpDtU_Z2kqOF7.webp 750w, /_astro/02.CXHgpDtU_kMH0e.webp 828w, /_astro/02.CXHgpDtU_Z9BTey.webp 1080w, /_astro/02.CXHgpDtU_Z1Bs2UU.webp 1280w, /_astro/02.CXHgpDtU_1d2VrS.webp 1668w, /_astro/02.CXHgpDtU_Z9PPXy.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アップロードすると、このような入力画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;908&quot; src=&quot;/_astro/03.FHy1cnc4_2gWG7D.webp&quot; srcset=&quot;/_astro/03.FHy1cnc4_2jJVjc.webp 640w, /_astro/03.FHy1cnc4_ZhyaCU.webp 750w, /_astro/03.FHy1cnc4_2nFm2q.webp 828w, /_astro/03.FHy1cnc4_2hfH3k.webp 1080w, /_astro/03.FHy1cnc4_OpylX.webp 1280w, /_astro/03.FHy1cnc4_Z1rItNt.webp 1668w, /_astro/03.FHy1cnc4_2gWG7D.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「ステータス」では編集中のアイテムが公開されているかどうかなどを確認できて、「パッケージ」では編集中の拡張機能のバージョンや権限を確認することが出来ます。公開後は、「アナリティクス」で利用状況の確認も行えるみたいです。&lt;/p&gt;&lt;p&gt;最初は、公開する拡張機能の「ストアの掲載情報」を設定するフォームが表示されますので、順次埋めていきます。
「パッケージのタイトル」と「パッケージの概要」は、&lt;code&gt;manifest.json&lt;/code&gt;に記述されている内容が自動入力されます。&lt;/p&gt;&lt;p&gt;Chromeウェブストアに表示されるアイコンを設定したり、紹介用の動画（YouTubeリンク）やスクリーンショットなどの画像を設定する部分もあります。&lt;/p&gt;&lt;p&gt;アイコンやスクリーンショット画像は、アップロードできる形式がしっかりと定められており、その形式から逸脱したファイルをドロップするとアップロードすることが出来ません。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;905&quot; src=&quot;/_astro/04.DHXqfD-n_26w0XK.webp&quot; srcset=&quot;/_astro/04.DHXqfD-n_Z2gKWwq.webp 640w, /_astro/04.DHXqfD-n_c74ko.webp 750w, /_astro/04.DHXqfD-n_Z1CO2d5.webp 828w, /_astro/04.DHXqfD-n_284Ltu.webp 1080w, /_astro/04.DHXqfD-n_Z1SfhRm.webp 1280w, /_astro/04.DHXqfD-n_VfGvr.webp 1668w, /_astro/04.DHXqfD-n_26w0XK.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「ストアの掲載情報」のセクションを入力し終えたら、次は「プライバシー」セクションを入力していきましょう。&lt;/p&gt;&lt;p&gt;ここでは、申請する拡張機能の機能を書いたり、プログラムの中で利用している、Chrome APIの各機能への権限が必要な理由を入力する必要があります。（開発が終わってから月日が経ってしまうと忘れてしまいそうですね・・・）
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;904&quot; src=&quot;/_astro/05.DwEtO03c_Z1utHRd.webp&quot; srcset=&quot;/_astro/05.DwEtO03c_Z1oOwG9.webp 640w, /_astro/05.DwEtO03c_143uaF.webp 750w, /_astro/05.DwEtO03c_Z1kT6WU.webp 828w, /_astro/05.DwEtO03c_1464xH.webp 1080w, /_astro/05.DwEtO03c_Zp3RTo.webp 1280w, /_astro/05.DwEtO03c_2pr6tp.webp 1668w, /_astro/05.DwEtO03c_Z1utHRd.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;manifest.json&lt;/code&gt;で&lt;code&gt;&quot;host_permission&quot;&lt;/code&gt;が指定されている場合も、その理由を入力する必要があります。（画像内の「ホスト権限が必要な理由」の部分です。）&lt;/p&gt;&lt;p&gt;なんかこういうのって、英語で入力することが多いので、日本語で聞かれていますが、一応英語で回答しておきます。&lt;/p&gt;&lt;p&gt;「データ使用」の目的を入力する場所もありました。
ユーザーデータを収集する場合は、収集したいデータの属性を設定する必要があるそうです。今回は特に設定しません。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;905&quot; src=&quot;/_astro/07.DT6cW9hu_1MRLny.webp&quot; srcset=&quot;/_astro/07.DT6cW9hu_Z2hmDjO.webp 640w, /_astro/07.DT6cW9hu_bvnx0.webp 750w, /_astro/07.DT6cW9hu_Z1DpI0t.webp 828w, /_astro/07.DT6cW9hu_1OqwSi.webp 1080w, /_astro/07.DT6cW9hu_Z2bSwsy.webp 1280w, /_astro/07.DT6cW9hu_CBrUf.webp 1668w, /_astro/07.DT6cW9hu_1MRLny.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「私は以下の開示が正しいものであることを表明します。」の部分で、3つの事項にチェックを入れる必要があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;私は、承認されている以外の用途で第三者にユーザーデータを販売、転送しません&lt;/li&gt;
&lt;li&gt;私はアイテムの唯一の目的と関係のない目的でユーザーデータを使用または転送しません&lt;/li&gt;
&lt;li&gt;私は信用力を判断する目的または融資目的でユーザーデータを使用または転送しません&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらには、チェックを入れます。&lt;/p&gt;&lt;p&gt;「販売地域」というセクションもありました。
拡張機能の中で決済が発生するかどうかや、どの範囲まで拡張機能を公開するかどうかも設定できます。&lt;/p&gt;&lt;p&gt;今回の拡張機能を公開する目的が、ローカルで邪魔にならない場所で拡張機能を管理するためだったので、「非公開」に設定しても目的の達成はできそうですが、デフォルトのままで「公開」で設定します。（「審査」させてみます。）
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/08.B1pXXDbE_Z18Hgvu.webp&quot; srcset=&quot;/_astro/08.B1pXXDbE_Z1e71PG.webp 640w, /_astro/08.B1pXXDbE_1eL018.webp 750w, /_astro/08.B1pXXDbE_Z1abB7s.webp 828w, /_astro/08.B1pXXDbE_Z18tjLu.webp 1080w, /_astro/08.B1pXXDbE_2tRFl5.webp 1280w, /_astro/08.B1pXXDbE_ebvTW.webp 1668w, /_astro/08.B1pXXDbE_Z18Hgvu.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さあ、これで最後まで入力し切ったのでよっしゃー申請だーと思いましたが、まだ申請はできません。
「送信できない理由」をクリックすると、こんなポップアップが表示されます。　ほほう。連絡先メールアドレスが必要ですとな？
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/09.znuDOoAa_2lgsM4.webp&quot; srcset=&quot;/_astro/09.znuDOoAa_Z2ghFIE.webp 640w, /_astro/09.znuDOoAa_cAl8a.webp 750w, /_astro/09.znuDOoAa_Z2cmg0q.webp 828w, /_astro/09.znuDOoAa_2lupw4.webp 1080w, /_astro/09.znuDOoAa_SEgOH.webp 1280w, /_astro/09.znuDOoAa_Z1m1RAq.webp 1668w, /_astro/09.znuDOoAa_2lgsM4.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;アカウントの連絡先を設定する&lt;a href=&quot;#アカウントの連絡先を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というわけで、拡張機能を公開するアカウントの、連絡先メールアドレスを設定します。&lt;/p&gt;&lt;p&gt;ダッシュボードの左側の方に「アカウント」を引っ張れるのでクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1605&quot; height=&quot;909&quot; src=&quot;/_astro/10.BLFtUopz_ZHos74.webp&quot; srcset=&quot;/_astro/10.BLFtUopz_Z17nfYb.webp 640w, /_astro/10.BLFtUopz_K1mxd.webp 750w, /_astro/10.BLFtUopz_ZzTAUf.webp 828w, /_astro/10.BLFtUopz_Z16igU7.webp 1080w, /_astro/10.BLFtUopz_2s5gTf.webp 1280w, /_astro/10.BLFtUopz_ZHos74.webp 1605w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クリックすると、アカウント設定画面に遷移します。&lt;/p&gt;&lt;p&gt;そこで、「連絡先メールアドレス」を設定できるので、設定してそのメアドに届いたメールにあるURLをクリックして認証を完了させます。&lt;/p&gt;&lt;p&gt;認証が完了すると、以下のように「確認済み」メールアドレスとしてアカウント上に指定のメアドが設定されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/11.DBNelZrG_1NQtBl.webp&quot; srcset=&quot;/_astro/11.DBNelZrG_ZDgwWp.webp 640w, /_astro/11.DBNelZrG_1OBtTp.webp 750w, /_astro/11.DBNelZrG_Zzl7eb.webp 828w, /_astro/11.DBNelZrG_1O5qll.webp 1080w, /_astro/11.DBNelZrG_mfhDY.webp 1280w, /_astro/11.DBNelZrG_Z1SqQL9.webp 1668w, /_astro/11.DBNelZrG_1NQtBl.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;審査の申請をして待つ&lt;a href=&quot;#審査の申請をして待つ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;確認済みメアドの設定が完了して、先程のアイテムの入力フォームに戻ると「審査のため送信」ボタンがアクティブになっていることが分かります。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/12.akd1SLTR_RSdUO.webp&quot; srcset=&quot;/_astro/12.akd1SLTR_Z1O9nDx.webp 640w, /_astro/12.akd1SLTR_DIDdh.webp 750w, /_astro/12.akd1SLTR_Z1KdWUj.webp 828w, /_astro/12.akd1SLTR_S7aEO.webp 1080w, /_astro/12.akd1SLTR_ZyHX1x.webp 1280w, /_astro/12.akd1SLTR_2fM1mg.webp 1668w, /_astro/12.akd1SLTR_RSdUO.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クリックすると、審査完了と同時に公開するかどうかを尋ねられます。今回は自動的に公開しようかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;905&quot; src=&quot;/_astro/13.DCDH7wV5_27mEFV.webp&quot; srcset=&quot;/_astro/13.DCDH7wV5_ZsEY1v.webp 640w, /_astro/13.DCDH7wV5_20d2Pj.webp 750w, /_astro/13.DCDH7wV5_agVhP.webp 828w, /_astro/13.DCDH7wV5_28UqbF.webp 1080w, /_astro/13.DCDH7wV5_Z1RoDab.webp 1280w, /_astro/13.DCDH7wV5_W6ldC.webp 1668w, /_astro/13.DCDH7wV5_27mEFV.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「審査のため送信」しました！　しばし待ちましょう・・・
「後で公開する」設定にした場合は、審査完了後30日以内に公開する必要があるそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;908&quot; src=&quot;/_astro/14.Co8JflLc_Z2o8HBR.webp&quot; srcset=&quot;/_astro/14.Co8JflLc_2sGPv.webp 640w, /_astro/14.Co8JflLc_2vlIHk.webp 750w, /_astro/14.Co8JflLc_6o7yJ.webp 828w, /_astro/14.Co8JflLc_Z2nTKRR.webp 1080w, /_astro/14.Co8JflLc_1ereeH.webp 1280w, /_astro/14.Co8JflLc_Z11eUbq.webp 1668w, /_astro/14.Co8JflLc_Z2o8HBR.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;審査完了！　公開！&lt;a href=&quot;#審査完了公開&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;放置していたら、審査の完了メールが届きました。&lt;/p&gt;&lt;p&gt;結果は、通過！&lt;/p&gt;&lt;p&gt;届いたメール内に貼られている公開URLを確認すると、実際に公開されていることが確認できます。
実際に拡張機能をダウンロードしてみて、動きも想定通りでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;905&quot; src=&quot;/_astro/15.DrsVaXBv_245Qjb.webp&quot; srcset=&quot;/_astro/15.DrsVaXBv_1Yjzgo.webp 640w, /_astro/15.DrsVaXBv_ZBYwFI.webp 750w, /_astro/15.DrsVaXBv_23eYYC.webp 828w, /_astro/15.DrsVaXBv_24fMgi.webp 1080w, /_astro/15.DrsVaXBv_Z1UBnlf.webp 1280w, /_astro/15.DrsVaXBv_SSB2y.webp 1668w, /_astro/15.DrsVaXBv_245Qjb.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/this-is-the-main-branch-f/kekjedgfdpeehgapmadaglbjclpgondf&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;This is the Main Branch!! for GitHub - Chrome Web Store&lt;/div&gt;&lt;div&gt;Attention please, this is the Main Branch.&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/PuECoROL8oHm_Y-Sa6rMIzsvuFOUJsBku7CJvJAuo9XKHu-XcBqlIZnlb-b8CLIQBnsZuNg58fN9XANXWCVk0JMCHpI=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;僕の場合、審査の完了メールが届いたのは、申請をしてから3時間後ぐらいでした。&lt;/p&gt;&lt;p&gt;拡張機能って、想像以上にスムーズに公開できるものなんだなあと、感服です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、自作のChrome拡張機能を一般公開する方法について紹介しました。以下のステップに従えば、己の手で作った拡張機能をChrome Web Storeで公開することができます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;デベロッパー登録をする（登録料$5）&lt;/li&gt;
&lt;li&gt;ストアの掲載情報を設定する&lt;/li&gt;
&lt;li&gt;アカウントの連絡先を設定する&lt;/li&gt;
&lt;li&gt;審査の申請をして待つ&lt;/li&gt;
&lt;li&gt;審査が完了したら公開！&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Chrome APIの「権限が必要な理由」を埋める時に、思い出すのに少し時間を食いそうなので、開発中にどこかにメモっておくと良いかもしれません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お～、これでいつでも機能をダウンロードできるぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どれぐらい使われるのだろうかな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】Pythonでリポジトリの情報を取得するCloud Functionsを作る</title><link>https://endorphinbath.com/posts/cloudfunctions-to-get-github-repo-with-python/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cloudfunctions-to-get-github-repo-with-python/</guid><description>Pythonを使用してGitHubリポジトリの情報を取得し、Cloud Functionsで処理する方法に関する記事です。PyGithubとThreadingで実装および処理を効率的にしました。</description><pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;リポジトリ増えてきたな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一目で情報を見られるようにするか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;リポジトリを一目で見渡したい&lt;a href=&quot;#リポジトリを一目で見渡したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分の GitHub アカウントにあるリポジトリが増えてくると、一体どこのリポジトリが今どうなっているのか、どんなリポジトリが自分のアカウント上にあるのか、ふと気になってきました。
そこで、 GitHub で管理されているリポジトリのデータを瞬時に確認するために、 GitHub API を利用して必要なデータを抽出する仕組みを作っていきたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発に使ったライブラリなど&lt;a href=&quot;#開発に使ったライブラリなど&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;ライブラリおよびツール一覧&lt;a href=&quot;#ライブラリおよびツール一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回使ったライブラリやツールは下記です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Python 3.10&lt;/li&gt;
&lt;li&gt;PyGithub（Python から GitHub API にアクセスしやすくなる。）&lt;/li&gt;
&lt;li&gt;Pytest（Python コードをテストする。）&lt;/li&gt;
&lt;li&gt;Pytest Coverage Comment（Pytest のカバレッジを&lt;code&gt;README.md&lt;/code&gt;に表示するための GitHub Actions）&lt;/li&gt;
&lt;li&gt;Cloud Shell Editor (Google Cloud で無料で使える VSCode ライクのエディタ。 Eclipse Theia というエディタがベースらしい。週で利用可能時間が決まっている。)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今回、主に使用する Python のライブラリは&lt;code&gt;PyGithub&lt;/code&gt;です。&lt;code&gt;PyGithub&lt;/code&gt;は、 GitHub REST API v3 を簡単に利用できるようにするライブラリで、 GitHub のリポジトリやユーザ情報を簡単に取得できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;pip&lt;/code&gt;で当時の最新バージョンをインストールします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PyGithu&lt;/span&gt;&lt;span&gt;b&amp;gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1.55&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、 Cloud Shell 上で&lt;code&gt;でpip install&lt;/code&gt;したらエラーになりました・・・詳細は下記で。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Shell Editorについて&lt;a href=&quot;#cloud-shell-editorについて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、 Google Cloud から提供されている「Cloud Shell」で利用できる「Cloud Shell Editor」を利用していきたいと思います。&lt;/p&gt;&lt;p&gt;このエディタに関しては、解説記事を以下のページで書いています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-shell-editor-eclipse-theia/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Google Cloud】Eclipse TheiaがルーツのCloud Shell上で使用できるエディタ&lt;/div&gt;&lt;div&gt;Cloud Shell Editorの紹介記事です。VSCodeライクに、Google Cloudで無料で使えます。UI、使用感、そして他のクラウド上で動くエディタとも比較しました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/05/20240225_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cloud Shell Editorを使う場合、pipのバージョンがヤヴァい&lt;a href=&quot;#cloud-shell-editorを使う場合pipのバージョンがヤヴァい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そんな Cloud Shell を触り始める時、&lt;code&gt;pip install&lt;/code&gt;を実行するとこんなエラーメッセージが出てきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;pip&lt;/code&gt;のバージョンが古いらしい。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Python 2 だと・・・！？&lt;/p&gt;&lt;p&gt;なんか知りませんが、 Python 2 でも利用できるように、&lt;code&gt;pip&lt;/code&gt;のバージョンが古いんですかね・・・？&lt;/p&gt;&lt;p&gt;というわけで、 Cloud Shell から Python のパッケージを更新したい場合は&lt;code&gt;pip&lt;/code&gt;をアップグレードしましょう。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これで、 Pygithub をインストールすることが出来ました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PyGithu&lt;/span&gt;&lt;span&gt;b&amp;gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1.55&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PythonでGitHubから情報を取得する&lt;a href=&quot;#pythonでgithubから情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;基本構造&lt;a href=&quot;#基本構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;PyGithub&lt;/code&gt;から GitHub API にアクセスします。&lt;/p&gt;&lt;p&gt;情報を取得する Python スクリプトの基本的な構造は以下の通りです。まず、 GitHub からアクセストークンを発行して、 API にアクセスします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Github&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# アクセストークンを設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;g &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Github&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;my_access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# リポジトリの情報を取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;repo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; g.&lt;/span&gt;&lt;span&gt;get_repo&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;my_username/my_repository&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(repo.name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(repo.stargazers_count)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;アクセストークンのスコープは、&lt;code&gt;repo&lt;/code&gt;を全チェックにしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1121&quot; height=&quot;500&quot; src=&quot;/_astro/01.DsBQklbC_1OWpCQ.webp&quot; srcset=&quot;/_astro/01.DsBQklbC_ZIsmxk.webp 640w, /_astro/01.DsBQklbC_jXIPe.webp 750w, /_astro/01.DsBQklbC_1wcRgw.webp 828w, /_astro/01.DsBQklbC_ZLMXgV.webp 1080w, /_astro/01.DsBQklbC_1OWpCQ.webp 1121w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リポジトリの色々な情報を取得する&lt;a href=&quot;#リポジトリの色々な情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;たった1つのリポジトリの中にも沢山の情報が詰め込まれています。&lt;/p&gt;&lt;p&gt;リポジトリ名とその説明、URL、サイズ、Issueの数、フォークされた数などなど、多種多様な情報をGitHub APIから取得することが可能です。これほどの量とは、驚いた・・・&lt;/p&gt;&lt;p&gt;今回取得した情報は以下のような感じです。リポジトリのサイズとか、記述した言語とかは統計してみたかったのですかさず取得します。日付はISO-8601準拠にします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info_in_format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;) -&amp;gt; Repo_format:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Retrieves and formats repository data into a dictionary conforming to Repo_format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param repo: The repository object to format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: A dictionary containing formatted repository data.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: Repo_format&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;state_of_pulls &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;created_at &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; repo.created_at&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;updated_at &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; repo.updated_at&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;created_at &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.year&lt;/span&gt;&lt;span&gt;:04&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.month&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.day&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.hour&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.minute&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;created_at.second&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;Z&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;updated_at &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.year&lt;/span&gt;&lt;span&gt;:04&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.month&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.day&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.hour&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.minute&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;updated_at.second&lt;/span&gt;&lt;span&gt;:02&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;Z&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: repo.name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;description&quot;&lt;/span&gt;&lt;span&gt;: repo.description,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;is_private&quot;&lt;/span&gt;&lt;span&gt;: repo.private,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;html_url&quot;&lt;/span&gt;&lt;span&gt;: repo.html_url,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;issues_count&quot;&lt;/span&gt;&lt;span&gt;: repo.open_issues_count,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;forks_count&quot;&lt;/span&gt;&lt;span&gt;: repo.forks_count,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;stargazers_count&quot;&lt;/span&gt;&lt;span&gt;: repo.stargazers_count,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;subscribers_count&quot;&lt;/span&gt;&lt;span&gt;: repo.subscribers_count,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;size&quot;&lt;/span&gt;&lt;span&gt;: repo.size,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;is_archived&quot;&lt;/span&gt;&lt;span&gt;: repo.archived,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;created_at&quot;&lt;/span&gt;&lt;span&gt;: created_at,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;updated_at&quot;&lt;/span&gt;&lt;span&gt;: updated_at,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;language&quot;&lt;/span&gt;&lt;span&gt;: repo.language,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;languages&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: repo.&lt;/span&gt;&lt;span&gt;get_languages&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;pulls_count&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;: repo.&lt;/span&gt;&lt;span&gt;get_pulls&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;state_of_pulls).totalCount&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; obj&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;処理をマルチスレッド化する&lt;a href=&quot;#処理をマルチスレッド化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回取得する情報の中には、リポジトリのプルリクのカウント、また取得するプログラミング言語は複数となっています。&lt;/p&gt;&lt;p&gt;そのように情報を取得する場合には、GitHub APIへのリクエストは一回だけでは足りません。上記の2種類の情報を取得するために更に2回リクエストを行う必要があります。（そして、更に2回リクエストを行うリポジトリの数が100個近くあるため、200回のGETリクエストを行います・・・）&lt;/p&gt;&lt;p&gt;それだけリクエストの数が多いと流石に処理時間が長すぎるので、マルチスレッドにして処理していきます。&lt;/p&gt;&lt;p&gt;今回使ったのは、&lt;code&gt;threading&lt;/code&gt;というライブラリです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; threading&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pprint &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pprint&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; typing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; TypedDict, Final&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; github &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Github&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; config &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; get_config, get_github_token, get_github_username, get_env_variable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; memory_profiler &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fetches a list of repositories for a specified user or the authenticated user if no username is provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param github: The GitHub session object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param fetch_type: The type of repositories to fetch (&apos;all&apos;, &apos;owner&apos;, &apos;public&apos;, &apos;private&apos;, &apos;forks&apos;, etc.).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param username: The username of the GitHub user whose repositories are to be fetched. If None, fetches repositories of the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type username: str, optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: A list of Repository objects.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: PaginatedList[Repository]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:raises ValueError: if fetch_type is an empty string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; fetch_type &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;public&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;private&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;forks&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&apos;fetch_type&apos; is not support &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;fetch_type&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; username &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; github.&lt;/span&gt;&lt;span&gt;get_user&lt;/span&gt;&lt;span&gt;(username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; user.&lt;/span&gt;&lt;span&gt;get_repos&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;fetch_type)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; repos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;store_repo_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repo&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Processes and stores information about a repository in a list, intended for multi-threaded operations.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param repo: The repository object to process information from.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param results: The list where processed information will be stored.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj: Repo_format &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info_in_format&lt;/span&gt;&lt;span&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# gh_info.append(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# @profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is_threading&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; list[Repo_format]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Starts multiple threads to process detailed information for &apos;owner&apos; type repositories for a given user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param github: The GitHub session object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param username: The username of the GitHub user. If None, processes repositories for the authenticated user.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:type username: str, optional&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: A list of processed repository information.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: list[Repo_format]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;repos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch_repositories&lt;/span&gt;&lt;span&gt;(github, &lt;/span&gt;&lt;span&gt;&quot;owner&quot;&lt;/span&gt;&lt;span&gt;, username)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; is_threading:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; repo &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; threading.&lt;/span&gt;&lt;span&gt;Thread&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;store_repo_info, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;(repo, results))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(thread)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread.&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(threads.&lt;/span&gt;&lt;span&gt;__sizeof__&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pprint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;threads.__sizeof__()------------------------------------&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; thread &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; threads:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;thread.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; repo &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; repos:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info: Repo_format &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_repo_info_in_format&lt;/span&gt;&lt;span&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;results.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; results&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この処理の内容は、ざっとこんな感じです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;thread = threading.Thread(target=store_repo_info, args=(repo, results))&lt;/code&gt;で、追加するスレッドを設定する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;store_repo_info()&lt;/code&gt;内の&lt;code&gt;get_repo_info_in_format()&lt;/code&gt;で、更に2回リクエストを行って、リストの中に情報を入れる。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread.start()&lt;/code&gt;で、スレッドを追加する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread.join()&lt;/code&gt;で、追加したスレッドが終了するまで&lt;code&gt;get_repo_info&lt;/code&gt;関数が終了しないようにする。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;こうすることで、200回のリクエスト処理を並行化することが出来ました。かなり処理時間を減らせました。&lt;/p&gt;&lt;p&gt;そしたら、出来たコードをテストします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Pytestでテストして、カバレッジをREADME.mdに表示する&lt;a href=&quot;#pytestでテストしてカバレッジをreadmemdに表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;有名なリポジトリではよく、テストのカバレッジをREADMEの冒頭で表示してたりしますよね。アレを、やってみたいと思います。&lt;/p&gt;&lt;p&gt;今回使うのは、「Pytest Coverage Comment」および「Dynamic Badges」いうGitHub Actionsです。&lt;/p&gt;&lt;p&gt;「Pytest Coverage Comment」でバッジの情報を作って、「Dynamic Badges」でバッジを作ります。&lt;/p&gt;&lt;a href=&quot;https://github.com/marketplace/actions/pytest-coverage-comment&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Pytest Coverage Comment - GitHub Marketplace&lt;/div&gt;&lt;div&gt;Comments a pull request with the pytest code coverage badge and full report&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/289035?s=400&amp;amp;v=4&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/marketplace/actions/dynamic-badges&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://github.com/fluidicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Dynamic Badges - GitHub Marketplace&lt;/div&gt;&lt;div&gt;Create badges via shields.io/endpoint for your README.md which may change with every commit&lt;/div&gt;&lt;div&gt;github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/829942?s=400&amp;amp;v=4&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回使用したGitHub Actionsのワークフローはこちら。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pytest-integration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;permissions&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;write-all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PYTHON_VERSION&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;3.10&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PYTHON_VERSION_JSON&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;python-version.json&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;LICENSE&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Apache&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;LICENSE_JSON&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;license.json&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;TEST_DIR&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;pytest_results&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GIST_ID&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PYTHON_COVERAGE_COMMENT_JSON&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;pytest-coverage-comment.json&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Set up Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-python@v5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;python-version&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.PYTHON_VERSION }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;architecture&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;x64&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get Python version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;python -V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install dependencies&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pip install --no-cache-dir -r requirements/dev.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Set environment variables&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;echo &apos;PYTHONPATH=./&apos; &amp;gt;&amp;gt; .env&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mkdir -p ${{ env.TEST_DIR }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Run pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;python -m pytest -n auto --cov=src --cov-branch --cov-report=term-missing:skip-covered --tb=short --junitxml=./${{ env.TEST_DIR }}/junit.xml | tee ./${{ env.TEST_DIR }}/coverage.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Create Coverage Comment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;coverageComment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;MishaKav/pytest-coverage-comment@main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;github-token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;pytest-coverage-path&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./${{ env.TEST_DIR }}/coverage.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;junitxml-path&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./${{ env.TEST_DIR }}/junit.xml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Create Coverage Badge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;schneegans/dynamic-badges-action@v1.7.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ACCESS_BADGE_IN_GIST }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;gistID&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.GIST_ID }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.PYTHON_COVERAGE_COMMENT_JSON }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Coverage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ steps.coverageComment.outputs.coverage }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ steps.coverageComment.outputs.color }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;namedLogo&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate Python version json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;jsdaniell/create-json@v1.2.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.PYTHON_VERSION_JSON }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;{&quot;label&quot;:&quot;Python&quot;,&quot;message&quot;:&quot;${{ env.PYTHON_VERSION }}&quot;,&quot;schemaVersion&quot;:1,&quot;color&quot;:&quot;blue&quot;,&quot;namedLogo&quot;:&quot;python&quot;,&quot;style&quot;:&quot;flat&quot;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;./&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Deploy Python version json to Gist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;exuanbo/actions-deploy-gist@v1.1.4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ACCESS_BADGE_IN_GIST }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;gist_id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.GIST_ID }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.PYTHON_VERSION_JSON }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;file_type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate License json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;jsdaniell/create-json@v1.2.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.LICENSE_JSON }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;{&quot;label&quot;:&quot;license&quot;,&quot;message&quot;:&quot;${{ env.LICENSE }}&quot;,&quot;schemaVersion&quot;:1,&quot;color&quot;:&quot;skyblue&quot;,&quot;namedLogo&quot;:&quot;apache&quot;,&quot;style&quot;:&quot;flat&quot;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;./&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Deploy License json to Gist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;exuanbo/actions-deploy-gist@v1.1.4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ACCESS_BADGE_IN_GIST }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;gist_id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.GIST_ID }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;file_path&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.LICENSE_JSON }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;file_type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Pytest のカバレッジ以外にも、 Python のバージョンおよびライセンスの情報もバッジとして表示できるようにしています。その場合、「Pytest Coverage Comment」を使わないで JSON ファイルを作る必要があるので、&lt;code&gt;jsdaniell/create-json&lt;/code&gt;の GitHub Actions を利用しています。そして、その JSON 形式の情報を&lt;code&gt;exuanbo/actions-deploy-gist&lt;/code&gt;の GitHub Actions を利用して Gist にアップロードする。。。（色々な Actions を使わせてもらいました。ありがたい。）&lt;/p&gt;&lt;p&gt;面倒なので、 push した時に動くようにしてしまっています。&lt;/p&gt;&lt;p&gt;バッジがちゃんと追加できているとこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;814&quot; height=&quot;483&quot; src=&quot;/_astro/11.D2GF2qiN_Z1zOLEf.webp&quot; srcset=&quot;/_astro/11.D2GF2qiN_Z1ty2qt.webp 640w, /_astro/11.D2GF2qiN_4Unbr.webp 750w, /_astro/11.D2GF2qiN_Z1zOLEf.webp 814w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Cloud Functionsにデプロイする&lt;a href=&quot;#cloud-functionsにデプロイする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Python で GitHub 情報を取得して、テストも行えたならば、 Cloud Functions として本処理をデプロイしていきたいと思います。（今回取得する情報は、 GAS （Google Apps Script）から取って Google スプレッドシートに入れたかったのです。）&lt;/p&gt;&lt;p&gt;Google Cloud のコンソールからデプロイしていきたいと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; functions_framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@functions_framework&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_github_repo_info_by_request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Handles an HTTP request to retrieve GitHub repository information based on the provided token.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:param request: The HTTP request object containing parameters and JSON data.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:return: A JSON formatted string of repository information or a greeting message if no token is provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:rtype: str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request_json &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request.&lt;/span&gt;&lt;span&gt;get_json&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;silent&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request_args &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request.args&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info: list[Repo_format] &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; request_json &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;token&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; request_json:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;token: &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request_json[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;token&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retrieve_github_repo_info&lt;/span&gt;&lt;span&gt;(token, &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; request_args &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;token&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; request_args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request_args[&lt;/span&gt;&lt;span&gt;&quot;token&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;info &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello, World!!!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res_obj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;data&quot;&lt;/span&gt;&lt;span&gt;: info}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; json.&lt;/span&gt;&lt;span&gt;dumps&lt;/span&gt;&lt;span&gt;(res_obj, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sort_keys&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ensure_ascii&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Google Cloud では、 Python ランタイムを使用する場合に、コンソール画面でデプロイ直前の事前テストを行うことが出来ます。&lt;/p&gt;&lt;p&gt;便利なのですが、環境変数を使ったテストは出来なかったりします。その部分は、別記事でまとめています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/cloudfunctions-unable-to-test-with-env/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Cloud Functions】デプロイ直前にランタイム環境変数を利用した関数のテストは出来ない、のかもしれない&lt;/div&gt;&lt;div&gt;Google Cloud Functionsを使ってデプロイ直前にランタイム環境変数を利用した関数のテストができない事象に関する記事です。PythonとGoでテストしましたが一部のキーの環境変数以外は取得できませんでした。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2024/04/20240218_Eyecatch.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デプロイ後の格闘&lt;a href=&quot;#デプロイ後の格闘&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;デプロイ後に直面するのが、 API の様々な閾値に起因するバグです。&lt;/p&gt;&lt;p&gt;GAS からリクエストをした時に、こんなエラーメッセージが返ってきたりしました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Service Unavailable&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&quot;object&quot;:&quot;error&quot;,&quot;status&quot;:503,&quot;code&quot;:&quot;service_unavailable&quot;,&quot;message&quot;:&quot;Public API service is temporarily unavailable, please try again later.&quot;,&quot;request_id&quot;:&quot;xxxxxxxc-xxxx-4d07-bcc3-xxxxxxxxx&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このメッセージはレスポンスコード&lt;code&gt;503&lt;/code&gt;なので、 Cloud Functions 上でバグっているみたいです。
最初はタイムアウトすることが原因だったのですが、何回かリクエストしていると、メモリ不足で起きるエラーも発生していました。
なので、デプロイした関数に割り当てるメモリ量やタイムアウト閾値を増やします。
&lt;img loading=&quot;lazy&quot; width=&quot;1044&quot; height=&quot;614&quot; src=&quot;/_astro/21.C7e9B-u8_NgtJJ.webp&quot; srcset=&quot;/_astro/21.C7e9B-u8_ZjoEVK.webp 640w, /_astro/21.C7e9B-u8_Z1taho8.webp 750w, /_astro/21.C7e9B-u8_172RL7.webp 828w, /_astro/21.C7e9B-u8_NgtJJ.webp 1044w&quot; /&gt;&lt;/p&gt;&lt;p&gt;一旦、これで動くようになりました！
Google スプレッドシートに入れたらこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;779&quot; src=&quot;/_astro/22.lUT_Z_d3_2dfv1n.webp&quot; srcset=&quot;/_astro/22.lUT_Z_d3_Z2wS3FD.webp 640w, /_astro/22.lUT_Z_d3_18Br8c.webp 750w, /_astro/22.lUT_Z_d3_BL4M9.webp 828w, /_astro/22.lUT_Z_d3_Z1GHwxo.webp 1080w, /_astro/22.lUT_Z_d3_Z2rm4QH.webp 1280w, /_astro/22.lUT_Z_d3_2dfv1n.webp 1668w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、 Python で GitHub 上のリポジトリの情報を取得する Cloud Functions が出来ました！
&lt;img loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;454&quot; src=&quot;/_astro/11.DpUUpVml_Z2rDlMl.webp&quot; srcset=&quot;/_astro/11.DpUUpVml_ZVsYwd.webp 640w, /_astro/11.DpUUpVml_6X6Ql.webp 750w, /_astro/11.DpUUpVml_JaJGw.webp 828w, /_astro/11.DpUUpVml_Z2rDlMl.webp 1000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おっ・・・？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、 GitHub のリポジトリ情報を Python と Cloud Functions を使用して取得する手順を解説しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitHub API&lt;/strong&gt; を利用してリポジトリ情報を抽出しました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ライブラリとツール&lt;/strong&gt;: PyGithub、Pytest、Cloud Shell Editor など。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;マルチスレッド処理&lt;/strong&gt;: 情報取得処理を効率化しました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pytestでのテストおよびカバレッジの表示&lt;/strong&gt;: GitHub Actions を活用して自動化しました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud Functionsによるデプロイ&lt;/strong&gt;: Google スプレッドシートに保存できるようにAPI化しました。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;GAS だと API を叩きやすくするライブラリがあまり無いので、今回は Python で実装しました。
Cloud Functions は、 1 日に 1 リクエストくらいであれば月に 5 円も掛からないので、これからも利用していきたいです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんかメモリ食いすぎじゃね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん確かに・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Golang】ローカル自作パッケージを使おうとすると「package XXX/ZZZZ is not in std」になる</title><link>https://endorphinbath.com/posts/golang-import-local-package/</link><guid isPermaLink="true">https://endorphinbath.com/posts/golang-import-local-package/</guid><description>Go言語でローカルパッケージをインポートする際に遭遇するエラーの解決方法に関する初心者向けの記事です。メインディレクトリのgo.modファイルのmoduleの設定が、main.goのimport文と繋がっています。</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっと、全然パッケージを使えないんですが・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;新しいプログラミング言語の使い始めあるあるだな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;想定する読者&lt;a href=&quot;#想定する読者&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Go 言語を始めたての初心者&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、何が起きてるんだ&lt;a href=&quot;#まず何が起きてるんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近まで、 Python を書いていましたが、処理速度とメモリ節約に関する冒険がしたくなり、 Go を使い始めました。&lt;/p&gt;&lt;p&gt;そこで、自分で書いたローカルパッケージを&lt;code&gt;main.go&lt;/code&gt;などで使おうとした時の話です。&lt;/p&gt;&lt;p&gt;話題のランタイム環境は、 Go 1.22.2 です。&lt;/p&gt;&lt;p&gt;はい、まずは憎きこのエラー文からです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;main.go:9:3: package mymodule/mypkg is not in std (/usr/local/go/src/mymodule/mypkg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;もしくは、 VSCode 上で表示されるこのエラー文。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;could not import mymodule/mypkg (no required module provides package &quot;mymodule/mypkg&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;コイツらを乗り越えて、 Go を実行したい！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まずは結論から。&lt;a href=&quot;#まずは結論から&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結論としては、以下のディレクトリ構成で以下のようにファイルを設定すれば出来ました。&lt;/p&gt;&lt;p&gt;ディレクトリ構成:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mymodule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--go.mod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--go.sum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--main.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|--mypkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;|  |--tools.go&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;go.mod&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;module&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mymodule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.22.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;com&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v17&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;0.0&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;incompatible&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;golang&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;org&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;oauth2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;19.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;com&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;querystring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// indirect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;main.go&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;mymodule/mypkg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;github.com/google/go-github/github&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;golang.org/x/oauth2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ...略&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Hello&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;mypkg/tools.go&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ...略&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Hello&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、内部パッケージを導入する際には、以下の4点に気を付ければ良いのかなと思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;自作パッケージの中のファイル名は何でも良い: &lt;code&gt;mypkg&lt;/code&gt;ディレクトリ内にあるファイル名は&lt;code&gt;tools.go&lt;/code&gt;ですし、そのファイルの&lt;code&gt;package&lt;/code&gt;文に&lt;code&gt;mypkg&lt;/code&gt;は書いてありません。しかし、プログラムとしては問題なく動きます。ビルドしても動きます。&lt;/li&gt;
&lt;li&gt;自作パッケージの中に&lt;code&gt;go.mod&lt;/code&gt;は不要である: 自作パッケージのディレクトリに&lt;code&gt;go.mod&lt;/code&gt;が無ければ、親ディレクトリを見に行きます。モジュール全体で必要な外部パッケージが分からなくなるので、&lt;code&gt;go.mod&lt;/code&gt;はルートディレクトリだけに置かれるのが良さそうだと思いました。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go.mod&lt;/code&gt;内の&lt;code&gt;module&lt;/code&gt;の値が重要である: ここのモジュール名から、直下のサブディレクトリを参照していきます。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.go&lt;/code&gt;の&lt;code&gt;import&lt;/code&gt;文にはディレクトリ名を書く: 僕の場合はファイル名を書いていて沼りました。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自作パッケージを使用するまでの手順&lt;a href=&quot;#自作パッケージを使用するまでの手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、細かいところを手順立てていきましょう。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. パッケージの設定&lt;a href=&quot;#1-パッケージの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;mypkg&lt;/code&gt;ディレクトリにある&lt;code&gt;tools.go&lt;/code&gt;ファイルでパッケージを定義します。ファイルの先頭に以下のように記述します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;mypkg/tools.go&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ...略&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Hello&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここで、&lt;code&gt;package&lt;/code&gt;文には、&lt;code&gt;mypkg&lt;/code&gt;ではなく&lt;code&gt;my&lt;/code&gt;と書きました。外部パッケージとして利用する場合にどうなるかはちょっと分かりませんが、ただ内部で動かす時は問題なく動きます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. main.goでのパッケージのインポート&lt;a href=&quot;#2-maingoでのパッケージのインポート&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、&lt;code&gt;main.go&lt;/code&gt;にこんな感じで書きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;main.go&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;fmt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;mymodule/mypkg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;github.com/google/go-github/github&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;golang.org/x/oauth2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ...略&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;fmt&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Println&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mypkg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Hello&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そうしたら、必要な外部パッケージのインポートがまだ出来ていないので、&lt;code&gt;go mod init&lt;/code&gt;でインストールおよびインポートします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. go.modでモジュールを明示する&lt;a href=&quot;#3-gomodでモジュールを明示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここで、&lt;code&gt;go mod init&lt;/code&gt;を使うと、このようなメッセージが返ってきますよね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go: cannot determine module path for source directory /home/username/mymodule (outside GOPATH, module path must be specified)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Example usage:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;go mod init example.com/m&apos; to initialize a v0 or v1 module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;go mod init example.com/m/v2&apos; to initialize a v2 module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Run &apos;go help mod init&apos; for more information.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;自分は当初、これはおまじないのようなものだと思っていましたが、ここで&lt;code&gt;go mod init&lt;/code&gt;の引数に渡す文字列がモジュール名になるようです。この部分がとても大事です。&lt;/p&gt;&lt;p&gt;なので、&lt;code&gt;go mod init &amp;lt;モジュール名&amp;gt;&lt;/code&gt;を実行して、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mymodule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると、こんな感じでメッセージが返ってきます。&lt;code&gt;go.mod&lt;/code&gt;も作成されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go: creating new go.mod: module mymodule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go: to add module requirements and sums:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;go mod tidy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、必要なパッケージがまだインストールされていないので、&lt;code&gt;go mod tidy&lt;/code&gt;をして必要なパッケージを全て入れます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tidy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;go mod tidy&lt;/code&gt;をすると、&lt;code&gt;go.mod&lt;/code&gt;に&lt;code&gt;main.go&lt;/code&gt;の処理に必要なパッケージが列挙されて、未インストールのものはインストールされます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;go.mod&lt;/code&gt;の中にはこんな感じで記述されているかと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;module&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mymodule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.22.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;com&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v17&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;0.0&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;incompatible&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;golang&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;org&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;oauth2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;19.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;com&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;google&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;go&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;querystring&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// indirect&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここで、&lt;code&gt;go.mod&lt;/code&gt;には内部パッケージの情報は記されていないことが分かります。&lt;/p&gt;&lt;p&gt;しかし、&lt;code&gt;go.mod&lt;/code&gt;が存在している状態では、そのパッケージ全体は&lt;code&gt;モジュールモード&lt;/code&gt;となり、&lt;code&gt;module&lt;/code&gt;文に記述されている文字列がモジュール名になるわけです。（&lt;code&gt;go.mod&lt;/code&gt;が存在していないと、&lt;code&gt;GOPATHモード&lt;/code&gt;になるみたいです。ちょっと、そのモードで弄る気力は持ち合わせていない。）&lt;/p&gt;&lt;p&gt;&lt;code&gt;モジュールモード&lt;/code&gt;では、このモジュール名から内部パッケージを参照していきます。なので、&lt;code&gt;&quot;mymodule/mypkg&quot;&lt;/code&gt;で&lt;code&gt;mypkg&lt;/code&gt;内にある&lt;code&gt;tools.go&lt;/code&gt;を参照できるというわけです。&lt;/p&gt;&lt;p&gt;これで動くようになりました！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Go 言語でローカルの自作パッケージをインポートする方法を紹介しました。以下にポイントをまとめます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;自作パッケージの中のファイル名と&lt;code&gt;package&lt;/code&gt;名は、適当に付けても動くことは動く。&lt;/li&gt;
&lt;li&gt;自作パッケージの中に&lt;code&gt;go.mod&lt;/code&gt;は不要である&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go.mod&lt;/code&gt;内の&lt;code&gt;module&lt;/code&gt;の値および&lt;code&gt;go mod init&lt;/code&gt;の引数が重要である。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.go&lt;/code&gt;の&lt;code&gt;import&lt;/code&gt;文にはディレクトリ名を書く。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;この内部パッケージのインポートの作業でかなり時間を無駄にしたので、同じように無駄にする人が一人でも減れば嬉しいですね・・・！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プログラミングのお供に&lt;a href=&quot;#プログラミングのお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4grWOYq&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional HYBRID 日本語配列／墨&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4grWOYq&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gpkdtI&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;【Amazon.co.jp限定】 Logicool G ゲーミングキーボード G515 TKL 薄型 有線 テンキーレス キーボード G515-LNBK リニア 赤軸 静かなタイピング 日本語配列 LIGHTSYNC RGB ゲーミング メカニカルキーボード PC window mac chrome ブラック 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gpkdtI&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZL27gl&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ZENAIM KEYBOARD ゼンエイムキーボード【MOTION HACK機能（ラピッドトリガー機能）搭載/0.05mm単位のアクチュエーション可変/温度補正機能による誤動作防止/磁気検知式ロープロファイルキーボード/TKLサイズ/日本語配列/脱着式Type-Cケーブル/安心の国内サポート】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZL27gl&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いっつもこういう所に詰まるんだよなあ～！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;動かせてしまえればコッチのもの。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cloud Functions】デプロイ直前にランタイム環境変数を利用した関数のテストは出来ない、のかもしれない</title><link>https://endorphinbath.com/posts/cloudfunctions-unable-to-test-with-env/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cloudfunctions-unable-to-test-with-env/</guid><description>Google Cloud Functionsを使ってデプロイ直前にランタイム環境変数を利用した関数のテストができない事象に関する記事です。PythonとGoでテストしましたが一部のキーの環境変数以外は取得できませんでした。</description><pubDate>Mon, 29 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれー？　テストがうまく通らないぞー？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;デプロイ前のテストですね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この環境変数を読み取らないと先に進まないんだが・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Noneになってるね&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、何が起きてるんだ&lt;a href=&quot;#まず何が起きてるんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近（2024/04/26 ぐらいですかね）、 Python で書いた関数を Google Cloud のコンソールから、 Cloud Functions としてデプロイしようとした時の話です。&lt;/p&gt;&lt;p&gt;今回の事象は、 Python 3.10、 Python 3.12 および Go 1.22 のランタイムで確認しました。&lt;/p&gt;&lt;p&gt;まあ、コンソールで Cloud Functions を開いて新しい関数を作成し始めると、こんな画面になりますよね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;910&quot; src=&quot;/_astro/01.Cghk1wgb_Z18ImFo.webp&quot; srcset=&quot;/_astro/01.Cghk1wgb_Z2s9SuB.webp 640w, /_astro/01.Cghk1wgb_I8md.webp 750w, /_astro/01.Cghk1wgb_Z2oesLn.webp 828w, /_astro/01.Cghk1wgb_Z18v2pe.webp 1080w, /_astro/01.Cghk1wgb_2tPWHl.webp 1280w, /_astro/01.Cghk1wgb_cGTwT.webp 1668w, /_astro/01.Cghk1wgb_Z18ImFo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、ランタイム環境変数を設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/02.D4UaSm4Z_Yl2Fz.webp&quot; srcset=&quot;/_astro/02.D4UaSm4Z_ZESGJt.webp 640w, /_astro/02.D4UaSm4Z_1MYk7l.webp 750w, /_astro/02.D4UaSm4Z_ZAXh1f.webp 828w, /_astro/02.D4UaSm4Z_Z1xsDXr.webp 1080w, /_astro/02.D4UaSm4Z_24Sl98.webp 1280w, /_astro/02.D4UaSm4Z_ZcfH1j.webp 1668w, /_astro/02.D4UaSm4Z_Yl2Fz.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、こんな風に関数を打ち込みます。　今回は、テストとして実行するためにこんな記述とします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; functions_framework&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@functions_framework&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hello_http&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;HTTP Cloud Function.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request (flask.Request): The request object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Returns:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;The response text, or any set of values that can be turned into a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Response object using `make_response`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request_json &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request.&lt;/span&gt;&lt;span&gt;get_json&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;silent&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;request_args &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request.args&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vari &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.&lt;/span&gt;&lt;span&gt;getenv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;TEST_ENV&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(vari)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vari &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;TEST_ENV&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(vari)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vari &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.environ[&lt;/span&gt;&lt;span&gt;&quot;TEST_ENV_2&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(vari)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; request_json &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; request_json:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request_json[&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; request_args &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; request_args:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request_args[&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;World&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Hello &lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;!&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(name)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、「関数をテスト」をクリックして、ビルドのち直前のリクエストテストをしますよね・・・あれっ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/03.DYisZlvE_Z1AHczj.webp&quot; srcset=&quot;/_astro/03.DYisZlvE_X1oNb.webp 640w, /_astro/03.DYisZlvE_Z1DhH8V.webp 750w, /_astro/03.DYisZlvE_11VOwp.webp 828w, /_astro/03.DYisZlvE_UdkPi.webp 1080w, /_astro/03.DYisZlvE_ZwBMQ4.webp 1280w, /_astro/03.DYisZlvE_2gqhMq.webp 1668w, /_astro/03.DYisZlvE_Z1AHczj.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、こんな感じのエラーメッセージが表示されます。&lt;code&gt;os.environ&lt;/code&gt;の返り値はdict型なので、環境変数にキーがないと&lt;code&gt;KeyError&lt;/code&gt;を吐き出します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/layers/google.python.pip/pip/lib/python3.10/site-packages/flask/app.py&quot;, line 1473, in wsgi_app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response = self.full_dispatch_request()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// ...略&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/workspace/main.py&quot;, line 22, in hello_http&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;vari = os.environ[&quot;TEST_ENV_2&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/layers/google.python.runtime/python/lib/python3.10/os.py&quot;, line 680, in __getitem__&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raise KeyError(key) from None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;KeyError: &apos;TEST_ENV_2&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;えーと、確かにランタイム環境変数は設定したはずですが・・・&lt;/p&gt;&lt;p&gt;はて？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デプロイ後に再度テストをしてみる&lt;a href=&quot;#デプロイ後に再度テストをしてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;エラーになってしまいましたが、意に介さずにデプロイしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;907&quot; src=&quot;/_astro/11.BkkFFQUi_kFEoD.webp&quot; srcset=&quot;/_astro/11.BkkFFQUi_25UF5W.webp 640w, /_astro/11.BkkFFQUi_ZvnqQa.webp 750w, /_astro/11.BkkFFQUi_29Q5Ob.webp 828w, /_astro/11.BkkFFQUi_kTB8D.webp 1080w, /_astro/11.BkkFFQUi_Z16UwxI.webp 1280w, /_astro/11.BkkFFQUi_1HzrP5.webp 1668w, /_astro/11.BkkFFQUi_kFEoD.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;はい、デプロイが終わったら、もう一度リクエストのテストをしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;908&quot; src=&quot;/_astro/12.Qrx6SqFe_Zi2c0o.webp&quot; srcset=&quot;/_astro/12.Qrx6SqFe_Z21tiQP.webp 640w, /_astro/12.Qrx6SqFe_roHYY.webp 750w, /_astro/12.Qrx6SqFe_Z1WxS8B.webp 828w, /_astro/12.Qrx6SqFe_ZhNfgo.webp 1080w, /_astro/12.Qrx6SqFe_Z1JDnWK.webp 1280w, /_astro/12.Qrx6SqFe_14QAq3.webp 1668w, /_astro/12.Qrx6SqFe_Zi2c0o.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行すると、今回は特にエラーも起きず、ちゃんとレスポンスが返ってきます。&lt;/p&gt;&lt;p&gt;右下を見ると、環境変数を取得した事が分かるログも出力されていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;905&quot; src=&quot;/_astro/13.aM8R4odx_PAogp.webp&quot; srcset=&quot;/_astro/13.aM8R4odx_Z29eVuf.webp 640w, /_astro/13.aM8R4odx_jD5mz.webp 750w, /_astro/13.aM8R4odx_Z1vi1aT.webp 828w, /_astro/13.aM8R4odx_R99L9.webp 1080w, /_astro/13.aM8R4odx_1V1eee.webp 1280w, /_astro/13.aM8R4odx_ZjEUbT.webp 1668w, /_astro/13.aM8R4odx_PAogp.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そういう仕様ということだろうか・・・&lt;a href=&quot;#そういう仕様ということだろうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下の、コンソールを介して関数をデプロイするドキュメントや、環境変数を設定する部分のドキュメントなどを読んでは見ましたが、デプロイ前に環境変数を取得できないとは書いてないんですね。（ビルドは終わってるんですけどね。）&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/run/docs/quickstarts/functions/deploy-functions-gcloud?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;クイックスタート: gcloud CLI で Cloud Run functions の関数をデプロイする | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;gcloud CLI を使用して Cloud Run functions の HTTP 関数のサンプルをデプロイする方法について説明します。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://docs.cloud.google.com/run/docs/configuring/services/environment-variables?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;サービスの環境変数を構成する | Cloud Run | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;Google Cloud コンソールまたは gcloud CLI を使用して Cloud Run サービスの環境変数を構成する方法について説明します。&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png?hl=ja&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、その環境変数のドキュメントに、 Cloud Functions でデフォルトで予約されている環境変数のキーがあるそうなので、その環境変数は取得できないのかどうかも調べてみました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デフォルトで予約されている環境変数は取得できるのか&lt;a href=&quot;#デフォルトで予約されている環境変数は取得できるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;2024/04/29 時点で Cloud Functions で自動的に設定されるランタイム環境変数のキーは以下のとおりです。&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;キー&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FUNCTION_TARGET&lt;/code&gt;&lt;/td&gt;&lt;td&gt;予約済み: 実行される関数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;FUNCTION_SIGNATURE_TYPE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;予約済み: 関数のタイプ。HTTP 関数の場合は &lt;code&gt;http&lt;/code&gt;、イベント ドリブン関数の場合は &lt;code&gt;event&lt;/code&gt; です。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;K_SERVICE&lt;/code&gt;&lt;/td&gt;&lt;td&gt;予約済み: 関数リソースの名前&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;K_REVISION&lt;/code&gt;&lt;/td&gt;&lt;td&gt;予約済み: 関数のバージョン ID。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;PORT&lt;/code&gt;&lt;/td&gt;&lt;td&gt;予約済み: 関数が呼び出されるポート。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;ビルド直後でデプロイ直前にテストをするとこんな感じになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;FUNCTION_TARGET&lt;/code&gt;、&lt;code&gt;FUNCTION_SIGNATURE_TYPE&lt;/code&gt;および&lt;code&gt;PORT&lt;/code&gt;と、 3 種類のキーは取得できましたが、&lt;code&gt;K_SERVICE&lt;/code&gt;および&lt;code&gt;K_REVISION&lt;/code&gt;のキーは取得できませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1908&quot; height=&quot;910&quot; src=&quot;/_astro/21.DHSm2H69_2vwx4n.webp&quot; srcset=&quot;/_astro/21.DHSm2H69_ZmL2Mq.webp 640w, /_astro/21.DHSm2H69_1w5tth.webp 750w, /_astro/21.DHSm2H69_ZRR7Ej.webp 828w, /_astro/21.DHSm2H69_23nNo.webp 1080w, /_astro/21.DHSm2H69_15Usgt.webp 1280w, /_astro/21.DHSm2H69_1n8fLW.webp 1668w, /_astro/21.DHSm2H69_2vwx4n.webp 1908w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デプロイ後にテストをするとこんな感じで、全てのキーが取得できています。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;909&quot; src=&quot;/_astro/22.C_K7OybP_mUfiC.webp&quot; srcset=&quot;/_astro/22.C_K7OybP_cUH00.webp 640w, /_astro/22.C_K7OybP_Z2onoW7.webp 750w, /_astro/22.C_K7OybP_gQ7Ie.webp 828w, /_astro/22.C_K7OybP_n9c2C.webp 1080w, /_astro/22.C_K7OybP_1staf1.webp 1280w, /_astro/22.C_K7OybP_ZNERUq.webp 1668w, /_astro/22.C_K7OybP_mUfiC.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うーん、不思議だ。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、 Cloud Functions のデプロイ前にランタイム環境変数が取得できなかったことについて解説しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Cloud Functions でユーザーが設定したランタイム環境変数は、デプロイ後にのみ取得可能。&lt;/li&gt;
&lt;li&gt;一部の自動的に設定されるランタイム環境変数は取得可能だが、全てではない。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Secret Manager などを噛ませれば、デプロイ直前にシークレットを使ったテストが出来るんでしょうけど。&lt;/p&gt;&lt;p&gt;まあ、それが面倒だからランタイム環境変数に設定しているのであって、この仕様には疑問でした・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プログラミングのお供に&lt;a href=&quot;#プログラミングのお供に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4grWOYq&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PFU キーボード HHKB Professional HYBRID 日本語配列／墨&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4grWOYq&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gpkdtI&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;【Amazon.co.jp限定】 Logicool G ゲーミングキーボード G515 TKL 薄型 有線 テンキーレス キーボード G515-LNBK リニア 赤軸 静かなタイピング 日本語配列 LIGHTSYNC RGB ゲーミング メカニカルキーボード PC window mac chrome ブラック 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gpkdtI&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3ZL27gl&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ZENAIM KEYBOARD ゼンエイムキーボード【MOTION HACK機能（ラピッドトリガー機能）搭載/0.05mm単位のアクチュエーション可変/温度補正機能による誤動作防止/磁気検知式ロープロファイルキーボード/TKLサイズ/日本語配列/脱着式Type-Cケーブル/安心の国内サポート】&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3ZL27gl&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、デプロイ前はテストできないじゃん。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;環境変数ってよく使うんだけどな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Cloud、Document AI】Satisfactoryというゲームの設定のスクショをOCRして管理したいのだが上手くいかない</title><link>https://endorphinbath.com/posts/documentiai-satisfactory-options-management/</link><guid isPermaLink="true">https://endorphinbath.com/posts/documentiai-satisfactory-options-management/</guid><description>Document AIを使用して、ゲーム「Satisfactory」の設定をOCRで管理する方法に関する記事です。標準プロセッサの検証およびカスタムプロセッサの学習方法などを探求していきます。</description><pubDate>Sat, 20 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああもう、いちいち認証画面出すのめんどくさいなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、ときどき表示されるやつだな&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この記事の読者の想定&lt;a href=&quot;#この記事の読者の想定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Google Cloud の Documet AI を使ったことがない人&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この記事で扱うこと&lt;a href=&quot;#この記事で扱うこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PC を買い替えたりした時に、ゲームも再びインストールし直すことになりますが、その際に以前に使用していたゲーム内の設定がデフォルトのものになっていることは、「あるある」な出来事だと思います。
僕も、「Satisfactory」というゲームをよく嗜むもので、沢山ある設定を再度設定し直すのは骨が折れます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/01.XH3qHgmw_vwh8F.webp&quot; srcset=&quot;/_astro/01.XH3qHgmw_Z1AAcwc.webp 640w, /_astro/01.XH3qHgmw_175NgA.webp 750w, /_astro/01.XH3qHgmw_1V2LC1.webp 828w, /_astro/01.XH3qHgmw_c96Yo.webp 1080w, /_astro/01.XH3qHgmw_1bjAUX.webp 1280w, /_astro/01.XH3qHgmw_Z2cx5fO.webp 1668w, /_astro/01.XH3qHgmw_vwh8F.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこで、このゲームの設定を管理することで、再設定する作業を楽にしていこうかと思います。
上記のようにスクショしたファイルを、どこかのクラウドに上げるのが最も手っ取り早いです。そう思います。&lt;/p&gt;&lt;p&gt;しかし、今回の記事では、そのバックアップするファイルを文字列として管理したいので、テキストデータに変換するために Google Cloud 上で利用できるドキュメント OCR 機能の一つである、「Document AI」を試していこうかと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AI とは&lt;a href=&quot;#document-ai-とは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Cloud の Document AI は、ドキュメント解析のための機械学習モデルを提供するサービスです。&lt;/p&gt;&lt;p&gt;このツールは、PDF、画像などのフォーマットのドキュメントからテキストやその他のデータを抽出することができます。&lt;/p&gt;&lt;a href=&quot;https://cloud.google.com/document-ai&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Document AI | Google Cloud&lt;/div&gt;&lt;div&gt;The Document AI solutions suite includes pretrained models for document processing, Workbench for custom models, and Warehouse to search and store.&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;従来の光学式文字認識（OCR）に加えて、機械学習技術も利用されているので、以下のような事例に対して活用することが出来るみたいです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;請求書や領収書から、金額や日付、顧客情報などを自動的に抽出する&lt;/li&gt;
&lt;li&gt;契約書から、当事者情報や契約条件などを自動的に抽出する&lt;/li&gt;
&lt;li&gt;アンケート用紙から、回答内容を自動的に集計する&lt;/li&gt;
&lt;li&gt;名刺から、氏名や会社名、連絡先などを自動的に抽出する&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;果たしてゲーム設定画面を扱えるのだろうか&lt;a href=&quot;#果たしてゲーム設定画面を扱えるのだろうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;といったように、公共料金や日常生活でありがちなフォーマットで書かれている文書に対して利用できるツールを、「ゲームの設定画面」に対して適用させていこうと思います。&lt;/p&gt;&lt;p&gt;「ゲームの設定画面」も、書式的に画一されていると思うので、ある程度のデータセットがあれば学習できると思っています。&lt;/p&gt;&lt;p&gt;それでは行ってみましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AI の最初の設定&lt;a href=&quot;#document-ai-の最初の設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、 Document AI がどのように操作していくものなのかを掴んでいこうと思います。&lt;/p&gt;&lt;p&gt;最初に、 Google Cloud のコンソールを開いてプロジェクトを立ち上げたら、「Cloud Document AI API」を有効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;1086&quot; height=&quot;685&quot; src=&quot;/_astro/11.DGePI8RY_skXgC.webp&quot; srcset=&quot;/_astro/11.DGePI8RY_Z10ufBC.webp 640w, /_astro/11.DGePI8RY_Z1SQVKX.webp 750w, /_astro/11.DGePI8RY_Zo8j1a.webp 828w, /_astro/11.DGePI8RY_scI4D.webp 1080w, /_astro/11.DGePI8RY_skXgC.webp 1086w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうしたら、早速設定画面に触れていきます。&lt;/p&gt;&lt;p&gt;「Document AI を使ってみる」の直下にある「プロセッサを確認」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1616&quot; height=&quot;861&quot; src=&quot;/_astro/12.CT5s9Z5O_ZkgvA3.webp&quot; srcset=&quot;/_astro/12.CT5s9Z5O_Z1MgmhN.webp 640w, /_astro/12.CT5s9Z5O_2negB3.webp 750w, /_astro/12.CT5s9Z5O_Z2jOkT0.webp 828w, /_astro/12.CT5s9Z5O_1L45vb.webp 1080w, /_astro/12.CT5s9Z5O_fDJrk.webp 1280w, /_astro/12.CT5s9Z5O_ZkgvA3.webp 1616w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AI の標準のプロセッサ「Form Parser」を試す&lt;a href=&quot;#document-ai-の標準のプロセッサform-parserを試す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;クリックすると、色々な標準プロセッサが表示されます。&lt;/p&gt;&lt;p&gt;まずは、この中にあるものを使っていきます。おそらく「専用」プロセッサは公共料金やアンケート用紙のOCRに使用するもので使えるかどうか微妙だと思うので、今回はスルーします。
&lt;img loading=&quot;lazy&quot; width=&quot;1616&quot; height=&quot;857&quot; src=&quot;/_astro/13.Cm2WHPg4_2takga.webp&quot; srcset=&quot;/_astro/13.Cm2WHPg4_ZnG8Ez.webp 640w, /_astro/13.Cm2WHPg4_1g6h4P.webp 750w, /_astro/13.Cm2WHPg4_ZUf7gL.webp 828w, /_astro/13.Cm2WHPg4_20RUIk.webp 1080w, /_astro/13.Cm2WHPg4_vUtoM.webp 1280w, /_astro/13.Cm2WHPg4_2takga.webp 1616w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、フォームからキーと値で紐づけてくれそうな「Form Paser」というプロセッサを選択してみます。プロセッサ名とリージョンを選択します。&lt;/p&gt;&lt;p&gt;そして、「暗号化」の部分は、Google Cloudの諸サービスでよく見る「Googleが管理する暗号鍵」にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/14.ChKJKk7D_1jMDY8.webp&quot; srcset=&quot;/_astro/14.ChKJKk7D_ZzenL0.webp 640w, /_astro/14.ChKJKk7D_1SDD5O.webp 750w, /_astro/14.ChKJKk7D_ZviX2L.webp 828w, /_astro/14.ChKJKk7D_Z1d12ES.webp 1080w, /_astro/14.ChKJKk7D_2pkWrG.webp 1280w, /_astro/14.ChKJKk7D_8bThf.webp 1668w, /_astro/14.ChKJKk7D_1jMDY8.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうすると、プロセッサが作成されて、プロセッサのIDや予測エンドポイントが表示されます。これらの情報は、このプロセッサにリクエストするまでは使いません。&lt;/p&gt;&lt;p&gt;それでは、「テストドキュメントをアップロード」をクリックして試してみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;915&quot; src=&quot;/_astro/15.TjH7ehXa_2mDxA2.webp&quot; srcset=&quot;/_astro/15.TjH7ehXa_1uTwVS.webp 640w, /_astro/15.TjH7ehXa_Z16oz0e.webp 750w, /_astro/15.TjH7ehXa_YNs50.webp 828w, /_astro/15.TjH7ehXa_2mYWOL.webp 1080w, /_astro/15.TjH7ehXa_Z1Dk6w5.webp 1280w, /_astro/15.TjH7ehXa_1b2MS9.webp 1668w, /_astro/15.TjH7ehXa_2mDxA2.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アップロードしてみると、「Form Parser」のOCRが実際にどの部分を検知したかどうかが表示されます。&lt;/p&gt;&lt;p&gt;まあ、そりゃ「New Game」などの設定とは関係ない文字が認識されるのはしょうがないと思います・・・&lt;/p&gt;&lt;p&gt;このプロセッサの状態ですと、目的の物を作るためには少し使えないですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;913&quot; src=&quot;/_astro/16.DgOMH9AX_irQvV.webp&quot; srcset=&quot;/_astro/16.DgOMH9AX_11O7br.webp 640w, /_astro/16.DgOMH9AX_Z29vulM.webp 750w, /_astro/16.DgOMH9AX_vI2jy.webp 828w, /_astro/16.DgOMH9AX_Z2elP85.webp 1080w, /_astro/16.DgOMH9AX_1o09Yu.webp 1280w, /_astro/16.DgOMH9AX_ZS8SaW.webp 1668w, /_astro/16.DgOMH9AX_irQvV.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「KEY-VALUEペア」の中の1つをクリックすると、どの部分を指しているのかを確認することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/17.DGr2DEV6_3Bm2T.webp&quot; srcset=&quot;/_astro/17.DGr2DEV6_Z1qN5Sq.webp 640w, /_astro/17.DGr2DEV6_124UXo.webp 750w, /_astro/17.DGr2DEV6_Z1mRFac.webp 828w, /_astro/17.DGr2DEV6_Z2uEelq.webp 1080w, /_astro/17.DGr2DEV6_17GKL9.webp 1280w, /_astro/17.DGr2DEV6_Z19rhoi.webp 1668w, /_astro/17.DGr2DEV6_3Bm2T.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「テーブル」をクリックすると、テーブル状のフォームだと判断された部分が表示されます。&lt;/p&gt;&lt;p&gt;ここでも、あまりOCRでしっかり読み取れていませんね・・・&lt;/p&gt;&lt;p&gt;「エンティティ」は、該当すると判断された箇所がありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/18.CaOr3OsL_Z1zCyOi.webp&quot; srcset=&quot;/_astro/18.CaOr3OsL_Z1a1yH5.webp 640w, /_astro/18.CaOr3OsL_1iQs9J.webp 750w, /_astro/18.CaOr3OsL_Z1668XQ.webp 828w, /_astro/18.CaOr3OsL_VhXAj.webp 1080w, /_astro/18.CaOr3OsL_Zvxa63.webp 1280w, /_astro/18.CaOr3OsL_2huUxr.webp 1668w, /_astro/18.CaOr3OsL_Z1zCyOi.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Document AI の標準のプロセッサ「Document OCR」を試す&lt;a href=&quot;#document-ai-の標準のプロセッサdocument-ocrを試す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Form Parserでは厳しそうでしたので、もう一つの標準プロセッサである「Document OCR」を試していこうと思います。&lt;/p&gt;&lt;p&gt;「Form Parser」と同様に、プロセッサ名とリージョンと暗号化を設定していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;917&quot; src=&quot;/_astro/19.B1XBLQMC_Z1WLtME.webp&quot; srcset=&quot;/_astro/19.B1XBLQMC_17mKih.webp 640w, /_astro/19.B1XBLQMC_Z1tVlDP.webp 750w, /_astro/19.B1XBLQMC_1bib1v.webp 828w, /_astro/19.B1XBLQMC_zJ2kP.webp 1080w, /_astro/19.B1XBLQMC_1DB6MU.webp 1280w, /_astro/19.B1XBLQMC_1UNTjo.webp 1668w, /_astro/19.B1XBLQMC_Z1WLtME.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;プロセッサが作成されると、Form Parserと同様の情報が表示されます。&lt;/p&gt;&lt;p&gt;「テストドキュメントをアップロード」をクリックしてOCRを試します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;914&quot; src=&quot;/_astro/20.DaqwoIdz_Z1zvit0.webp&quot; srcset=&quot;/_astro/20.DaqwoIdz_ZkVf5n.webp 640w, /_astro/20.DaqwoIdz_27VLLr.webp 750w, /_astro/20.DaqwoIdz_Zh0Om9.webp 828w, /_astro/20.DaqwoIdz_Z1z9Seg.webp 1080w, /_astro/20.DaqwoIdz_23c6Sj.webp 1280w, /_astro/20.DaqwoIdz_2j55D3.webp 1668w, /_astro/20.DaqwoIdz_Z1zvit0.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アップロードしてOCRされた結果が表示されました。&lt;/p&gt;&lt;p&gt;しかし、やはりOCRはただ単に文字列を判別して網羅するだけですので、もう一声欲しいです。キーバリュー型で欲しいですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/21.CJYMV17D_24vMfd.webp&quot; srcset=&quot;/_astro/21.CJYMV17D_ZnMSuA.webp 640w, /_astro/21.CJYMV17D_2558me.webp 750w, /_astro/21.CJYMV17D_ZjRsLm.webp 828w, /_astro/21.CJYMV17D_ZtJN97.webp 1080w, /_astro/21.CJYMV17D_Z1VzVPt.webp 1280w, /_astro/21.CJYMV17D_Qs8N1.webp 1668w, /_astro/21.CJYMV17D_24vMfd.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、「Document OCR」では、OCR構造を細かく編集することが出来ます。&lt;/p&gt;&lt;p&gt;プレミア機能を使えば、論文などからLaTeXなどで書かれた公式のOCRも出来るみたいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/22.YpNmH59U_2aeA8e.webp&quot; srcset=&quot;/_astro/22.YpNmH59U_6owx3.webp 640w, /_astro/22.YpNmH59U_Z2uTzp4.webp 750w, /_astro/22.YpNmH59U_ajWgh.webp 828w, /_astro/22.YpNmH59U_Zo20g6.webp 1080w, /_astro/22.YpNmH59U_Z1PR8Ws.webp 1280w, /_astro/22.YpNmH59U_WaVG2.webp 1668w, /_astro/22.YpNmH59U_2aeA8e.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生成 AI に学習させて使用する「カスタムプロセッサ」を試す&lt;a href=&quot;#生成-ai-に学習させて使用するカスタムプロセッサを試す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Document AI標準のプロセッサ2つを試して、使用感が微妙だったので、もう少し踏み込んでいきたいと思います。&lt;/p&gt;&lt;p&gt;Document AIのサービスでは、生成AIに学習させて使用する「カスタムプロセッサ」なるものを作成して活用することが出来るみたいなので、次にこれを試していきます。&lt;/p&gt;&lt;p&gt;このマイプロセッサ一覧画面から、「カスタムプロセッサを作成」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/31.DL2iEyVW_6CdnD.webp&quot; srcset=&quot;/_astro/31.DL2iEyVW_Z1FEK4y.webp 640w, /_astro/31.DL2iEyVW_MdgMg.webp 750w, /_astro/31.DL2iEyVW_Z1BJklk.webp 828w, /_astro/31.DL2iEyVW_Z2qbtgn.webp 1080w, /_astro/31.DL2iEyVW_1cavQc.webp 1280w, /_astro/31.DL2iEyVW_Z14Xwjf.webp 1668w, /_astro/31.DL2iEyVW_6CdnD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、「ワークベンチ」画面に遷移します。&lt;/p&gt;&lt;p&gt;Document AIで作成できるカスタムプロセッサの種類は、2024-04-20時点では4種類のようです。&lt;/p&gt;&lt;p&gt;「Custom Extractor」、「Custom Classifier」、「Custom Splitter」、「Summarizer」のようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/32.i6ecbDRp_Z2oBXIl.webp&quot; srcset=&quot;/_astro/32.i6ecbDRp_1vvw1Q.webp 640w, /_astro/32.i6ecbDRp_Z15MzUg.webp 750w, /_astro/32.i6ecbDRp_1zqVK5.webp 828w, /_astro/32.i6ecbDRp_8Ksqz.webp 1080w, /_astro/32.i6ecbDRp_Z1j4FfM.webp 1280w, /_astro/32.i6ecbDRp_1tXpnH.webp 1668w, /_astro/32.i6ecbDRp_Z2oBXIl.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回は、個々のゲーム設定画面の画像を使って学習させていきたいので、「Custom Extractor」を選択します。&lt;/p&gt;&lt;p&gt;選択すると、標準プロセッサと同様のお決まりの設定メニューが表示されるので、お決まりの設定をしていきます。&lt;/p&gt;&lt;p&gt;一つだけ、「ストレージの選択」という項目を追加で設定する必要があるので、「Googleが管理するストレージ」を選択してプロセッサを作成します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/33.CTxU_TgN_Z2bzAeP.webp&quot; srcset=&quot;/_astro/33.CTxU_TgN_25TxTd.webp 640w, /_astro/33.CTxU_TgN_Zvoy2T.webp 750w, /_astro/33.CTxU_TgN_29OXCr.webp 828w, /_astro/33.CTxU_TgN_kkWaL.webp 1080w, /_astro/33.CTxU_TgN_Z17ubvA.webp 1280w, /_astro/33.CTxU_TgN_1FxT7T.webp 1668w, /_astro/33.CTxU_TgN_Z2bzAeP.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カスタムプロセッサが作成されると、標準プロセッサとはまた少し違った画面が表示されます。&lt;/p&gt;&lt;p&gt;このプロセッサには、追加で学習させることが出来るので、「スキーマの定義とプレビュー」や「ビルドバージョンを作成する」ことが出来るようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/34.C7hgXN25_Z2p65jr.webp&quot; srcset=&quot;/_astro/34.C7hgXN25_Z1UCD5A.webp 640w, /_astro/34.C7hgXN25_xfnLe.webp 750w, /_astro/34.C7hgXN25_Z1QHdmm.webp 828w, /_astro/34.C7hgXN25_8hlPt.webp 1080w, /_astro/34.C7hgXN25_Z1jxLPS.webp 1280w, /_astro/34.C7hgXN25_1tuiMB.webp 1668w, /_astro/34.C7hgXN25_Z2p65jr.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まずは一旦、このプロセッサの「データセット」が反映されるまで待ちます。このデータセットの反映が終わらないと、追加で学習させることが出来ません。&lt;/p&gt;&lt;p&gt;反映される前に、学習させるための新しいデータセットを入れようとすると、こんなアラートが表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/35.DkFIEMiZ_Zl81v1.webp&quot; srcset=&quot;/_astro/35.DkFIEMiZ_Z1cxcfg.webp 640w, /_astro/35.DkFIEMiZ_1gkOBy.webp 750w, /_astro/35.DkFIEMiZ_Z18BLw2.webp 828w, /_astro/35.DkFIEMiZ_2cfpDT.webp 1080w, /_astro/35.DkFIEMiZ_JpgWx.webp 1280w, /_astro/35.DkFIEMiZ_Z1wILcT.webp 1668w, /_astro/35.DkFIEMiZ_Zl81v1.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ということで反映されるまで待つと、「データセット」の部分で「Googleが管理するロケーション」といったような表示がされますので、そうしたら学習の開始です！
&lt;img loading=&quot;lazy&quot; width=&quot;1463&quot; height=&quot;513&quot; src=&quot;/_astro/36.DdlO4BaB_1cQdb3.webp&quot; srcset=&quot;/_astro/36.DdlO4BaB_ZUGEiB.webp 640w, /_astro/36.DdlO4BaB_IdPpn.webp 750w, /_astro/36.DdlO4BaB_Qqlax.webp 828w, /_astro/36.DdlO4BaB_Z130iiH.webp 1080w, /_astro/36.DdlO4BaB_6Gm7C.webp 1280w, /_astro/36.DdlO4BaB_1cQdb3.webp 1463w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;「Custom Extractor」への学習データセットを作る&lt;a href=&quot;#custom-extractorへの学習データセットを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;カスタムプロセッサ：「Custom Extractor」を学習させていく流れは、①画像のアップロード、②フィールドの編集になります。この流れをひたすら繰り返していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;最初のカスタムデータセットを作る&lt;a href=&quot;#最初のカスタムデータセットを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、①画像のアップロードです。&lt;/p&gt;&lt;p&gt;アップロード元は、ローカルPC側からと、Google Cloud Storageからでも行えるようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;908&quot; src=&quot;/_astro/37.DSPmrA-u_Z24awAo.webp&quot; srcset=&quot;/_astro/37.DSPmrA-u_1m7eW7.webp 640w, /_astro/37.DSPmrA-u_Z1fbR00.webp 750w, /_astro/37.DSPmrA-u_1q2EFl.webp 828w, /_astro/37.DSPmrA-u_Z25p64x.webp 1080w, /_astro/37.DSPmrA-u_Z1057R9.webp 1280w, /_astro/37.DSPmrA-u_ZHJfn6.webp 1668w, /_astro/37.DSPmrA-u_Z24awAo.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像をアップロードしてデータセットとしてインポートされると、このような画面が表示されます。&lt;/p&gt;&lt;p&gt;最初にあらかじめカスタムプロセッサがOCRで文字列だと判断した箇所が表示されます。&lt;/p&gt;&lt;p&gt;我々ユーザーは、主に下記の事柄をチェックしていきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;その箇所が正しいかどうか。&lt;/li&gt;
&lt;li&gt;その判断した箇所に過不足がないかどうか。&lt;/li&gt;
&lt;li&gt;フィールドが間違っていないかどうか。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;最初は、フィールドをただ一つも設定していないので、カスタムプロセッサが抽出した箇所は0件になっているようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;914&quot; src=&quot;/_astro/38.DTQVLqN9_1Jpdhs.webp&quot; srcset=&quot;/_astro/38.DTQVLqN9_Zookfk.webp 640w, /_astro/38.DTQVLqN9_24tGBu.webp 750w, /_astro/38.DTQVLqN9_ZksTw6.webp 828w, /_astro/38.DTQVLqN9_1JKCwc.webp 1080w, /_astro/38.DTQVLqN9_hUtOP.webp 1280w, /_astro/38.DTQVLqN9_xNszz.webp 1668w, /_astro/38.DTQVLqN9_1Jpdhs.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは、我々ユーザー側から、「フィールド」を設定していきたいと思います。&lt;/p&gt;&lt;p&gt;「新しいフィールドを作成」をクリックすると、「新しいラベルを作成」ダイアログが表示されて新規作成することが出来ます。まあ、、、「フィールド」も「ラベル」も同じようなものなのでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/39.CPaJQqSg_XAGDB.webp&quot; srcset=&quot;/_astro/39.CPaJQqSg_e3YzF.webp 640w, /_astro/39.CPaJQqSg_Z2nf7mr.webp 750w, /_astro/39.CPaJQqSg_hYpiT.webp 828w, /_astro/39.CPaJQqSg_Z1zESJI.webp 1080w, /_astro/39.CPaJQqSg_22G6mQ.webp 1280w, /_astro/39.CPaJQqSg_ZerVMA.webp 1668w, /_astro/39.CPaJQqSg_XAGDB.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まずは、「大項目」を抽出するためのラベル: &lt;code&gt;pi01&lt;/code&gt;を作成します。&lt;/p&gt;&lt;p&gt;「Satisfactory」というゲームの大項目＞中項目といった感じで設定項目が羅列されています。そのため、まずは大項目を読み取るラベルを以下のように用意します。&lt;/p&gt;&lt;p&gt;「オカレンス」は、そのラベルが一つの画像の中にいくつ存在するものなのかを設定する項目になっています。大項目は、一つの画像の中で複数回存在する可能性があるので、「オプションの複数回」で設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/40.DneqpBqa_Z18sK39.webp&quot; srcset=&quot;/_astro/40.DneqpBqa_1sW8P7.webp 640w, /_astro/40.DneqpBqa_Z18lX70.webp 750w, /_astro/40.DneqpBqa_1wRyyl.webp 828w, /_astro/40.DneqpBqa_1nrMms.webp 1080w, /_astro/40.DneqpBqa_Z4nljT.webp 1280w, /_astro/40.DneqpBqa_Z2lwoul.webp 1668w, /_astro/40.DneqpBqa_Z18sK39.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ラベル: &lt;code&gt;pi01&lt;/code&gt;を作成しました。&lt;/p&gt;&lt;p&gt;そうしたら、そのラベルで抽出したい箇所を、画像の中をクリックして範囲選択をします。&lt;/p&gt;&lt;p&gt;範囲選択をすると、付与したいラベルをラベル一覧から選択できますので選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;909&quot; src=&quot;/_astro/41.CQtcvdI7_ZN4q9r.webp&quot; srcset=&quot;/_astro/41.CQtcvdI7_1jASrE.webp 640w, /_astro/41.CQtcvdI7_Z1hHdus.webp 750w, /_astro/41.CQtcvdI7_1nwjaS.webp 828w, /_astro/41.CQtcvdI7_1HQ7ga.webp 1080w, /_astro/41.CQtcvdI7_g0XyN.webp 1280w, /_astro/41.CQtcvdI7_Z2184AD.webp 1668w, /_astro/41.CQtcvdI7_ZN4q9r.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ラベルを付与すると、ラベル一覧の中に、「pi01」が付与された1件の範囲が追加されました。&lt;/p&gt;&lt;p&gt;この処理を繰り返して、データセットを増やしていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;915&quot; src=&quot;/_astro/42.n48CRgml_bMWlS.webp&quot; srcset=&quot;/_astro/42.n48CRgml_VAWsY.webp 640w, /_astro/42.n48CRgml_Z1EH9t8.webp 750w, /_astro/42.n48CRgml_quRB6.webp 828w, /_astro/42.n48CRgml_c9mAC.webp 1080w, /_astro/42.n48CRgml_1g1r3H.webp 1280w, /_astro/42.n48CRgml_ZYMMl0.webp 1668w, /_astro/42.n48CRgml_bMWlS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「si001」ラベルを作ります。このラベルは、中項目を抽出するためのラベルになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;913&quot; src=&quot;/_astro/43.YsEUlX_h_2le3Cn.webp&quot; srcset=&quot;/_astro/43.YsEUlX_h_ZRe3H6.webp 640w, /_astro/43.YsEUlX_h_11CsyB.webp 750w, /_astro/43.YsEUlX_h_Z1nk8yY.webp 828w, /_astro/43.YsEUlX_h_ZbzD1D.webp 1080w, /_astro/43.YsEUlX_h_Z1DpLI0.webp 1280w, /_astro/43.YsEUlX_h_19CiUu.webp 1668w, /_astro/43.YsEUlX_h_2le3Cn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この中項目用のラベル: &lt;code&gt;si001&lt;/code&gt;で、「Gameplay」直下の項目「Creature hostility」を、値も含めて抽出します。&lt;/p&gt;&lt;p&gt;「si001」は、「Creature hostility」のように左右をクリックすることで値を選択する形式の項目だけに適用するラベルとしたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/44._PIHzcCn_JD9Sq.webp&quot; srcset=&quot;/_astro/44._PIHzcCn_1hH4bE.webp 640w, /_astro/44._PIHzcCn_Z1jB2Ks.webp 750w, /_astro/44._PIHzcCn_1lCtTS.webp 828w, /_astro/44._PIHzcCn_Z1MawKA.webp 1080w, /_astro/44._PIHzcCn_1PbslY.webp 1280w, /_astro/44._PIHzcCn_ZqWzNs.webp 1668w, /_astro/44._PIHzcCn_JD9Sq.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同様に、ラベルを増やしていって、最初の画像にはラベルを設定し終えました。&lt;/p&gt;&lt;p&gt;そうしたら、「ラベル付きとしてマーク」をクリックして、ラベル付きのデータセットとして保存します。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;915&quot; src=&quot;/_astro/45.CNCIPlGd_1NGz7E.webp&quot; srcset=&quot;/_astro/45.CNCIPlGd_aKACb.webp 640w, /_astro/45.CNCIPlGd_Z2qxvjV.webp 750w, /_astro/45.CNCIPlGd_ZkkteH.webp 828w, /_astro/45.CNCIPlGd_1O2Ymo.webp 1080w, /_astro/45.CNCIPlGd_Z2ch4Ys.webp 1280w, /_astro/45.CNCIPlGd_C5OpL.webp 1668w, /_astro/45.CNCIPlGd_1NGz7E.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2 番目以降のカスタムデータセットを作る&lt;a href=&quot;#2-番目以降のカスタムデータセットを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、 2 枚目の画像をインポートして、先ほどと同じ要領でデータセットを作っていきます。&lt;/p&gt;&lt;p&gt;ちなみに、 1 つ目のデータセットがラベル付きとして保存されたので、今回のカスタムプロセッサのフィールド一覧の画面に先ほど設定したラベルが表示されていますね。&lt;/p&gt;&lt;p&gt;それでは、先ほどと同じサイドメニューを表示させて画像をアップロードしてインポートしていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/46.Vl9Aiy0C_Z2fMmab.webp&quot; srcset=&quot;/_astro/46.Vl9Aiy0C_Z16imsI.webp 640w, /_astro/46.Vl9Aiy0C_1mzEo6.webp 750w, /_astro/46.Vl9Aiy0C_Z12mVJu.webp 828w, /_astro/46.Vl9Aiy0C_hA4YJ.webp 1080w, /_astro/46.Vl9Aiy0C_Z1af3GC.webp 1280w, /_astro/46.Vl9Aiy0C_1CN1VR.webp 1668w, /_astro/46.Vl9Aiy0C_Z2fMmab.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、2 枚目以降からは、既に設定したラベルが存在していますので、そのラベルの情報から生成AIによって自律的に OCR が行われています。&lt;/p&gt;&lt;p&gt;しかし、まだカスタムデータセットが1件しか無いからか、内容的には満足できるものとはなっていません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/47.BpcTAkx8_ZXiaIW.webp&quot; srcset=&quot;/_astro/47.BpcTAkx8_Z1HMt8J.webp 640w, /_astro/47.BpcTAkx8_K5xI5.webp 750w, /_astro/47.BpcTAkx8_Z1DR3pv.webp 828w, /_astro/47.BpcTAkx8_1z5gpX.webp 1080w, /_astro/47.BpcTAkx8_7f7IB.webp 1280w, /_astro/47.BpcTAkx8_Z29SUqP.webp 1668w, /_astro/47.BpcTAkx8_ZXiaIW.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;生成 AI が判断した箇所を選択すると、「確認」の UI が追加されています。&lt;/p&gt;&lt;p&gt;抽出された内容に問題がなければ、「確認」をクリックすることでそのままデータセット内で反映されます。問題があれば、再び編集していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/48.Bpsv0YnE_2lzFIn.webp&quot; srcset=&quot;/_astro/48.Bpsv0YnE_ZCcTfR.webp 640w, /_astro/48.Bpsv0YnE_1PF7AW.webp 750w, /_astro/48.Bpsv0YnE_ZyhtwD.webp 828w, /_astro/48.Bpsv0YnE_Zbe0UD.webp 1080w, /_astro/48.Bpsv0YnE_Z1D49C0.webp 1280w, /_astro/48.Bpsv0YnE_19XV1u.webp 1668w, /_astro/48.Bpsv0YnE_2lzFIn.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Satisfactory の設定画面には、チェックボックスを使って設定する項目もあるので、その項目には「チェックボックス」としてラベルを付与していきます。「チェックボックス」では、チェックされているかどうかを設定できます。&lt;/p&gt;&lt;p&gt;この他にも、スライダー形式の項目や、ドロップダウンボックス形式の項目があったりするので、それぞれ別のラベルとして付与していきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;913&quot; src=&quot;/_astro/49.WSr4dyvr_ZJGFop.webp&quot; srcset=&quot;/_astro/49.WSr4dyvr_Z1WmaMS.webp 640w, /_astro/49.WSr4dyvr_Z3uDwb.webp 750w, /_astro/49.WSr4dyvr_Z2ssfEL.webp 828w, /_astro/49.WSr4dyvr_1MFKKv.webp 1080w, /_astro/49.WSr4dyvr_kPC49.webp 1280w, /_astro/49.WSr4dyvr_Z1Viq6i.webp 1668w, /_astro/49.WSr4dyvr_ZJGFop.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;学習が終わったら、テストをしていく&lt;a href=&quot;#学習が終わったらテストをしていく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、学習が終わったら今度は標準プロセッサにも行ったように、テストをしていきます。&lt;/p&gt;&lt;p&gt;今回の学習結果として、合計 23 枚の画像をカスタムデータセットとして使用し、付与したラベルは以下のようになりました。&lt;/p&gt;
























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ラベル名&lt;/th&gt;&lt;th&gt;意味合い&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;pi01&lt;/code&gt;&lt;/td&gt;&lt;td&gt;大項目&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si001&lt;/code&gt;&lt;/td&gt;&lt;td&gt;ドロップダウンボックスの選択項目のプロパティ及び値&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si002&lt;/code&gt;&lt;/td&gt;&lt;td&gt;チェックボックスの値&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si003&lt;/code&gt;&lt;/td&gt;&lt;td&gt;チェックボックスに対応するプロパティ（false）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si004&lt;/code&gt;&lt;/td&gt;&lt;td&gt;チェックボックスに対応するプロパティ（true）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si005&lt;/code&gt;&lt;/td&gt;&lt;td&gt;チェックボックスに対応するプロパティ及び値（false3縦）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si006&lt;/code&gt;&lt;/td&gt;&lt;td&gt;左右切替ボックスの選択項目のプロパティ及び値&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si011&lt;/code&gt;&lt;/td&gt;&lt;td&gt;スライダー式の項目のプロパティ及び値&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si020&lt;/code&gt;&lt;/td&gt;&lt;td&gt;値のUIが存在しないプロパティ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si030&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自由入力項目&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si031sad&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自由入力項目SAD対策&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;si040&lt;/code&gt;&lt;/td&gt;&lt;td&gt;カラー入力項目&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;「自由入力項目SAD対策」や「チェックボックスに対応するプロパティ及び値（false3縦）」は、 OCR が、&lt;code&gt;S&lt;/code&gt;, &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;D&lt;/code&gt; が縦に並んでいる場合に&lt;code&gt;sad&lt;/code&gt;という単語として認識してしまったり、チェックボックスが縦に3つある場合に&lt;code&gt;□□□&lt;/code&gt;という文字列として認識してしまう事象への対策としてラベルになっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;912&quot; src=&quot;/_astro/61.C1-UzCoS_21QNrS.webp&quot; srcset=&quot;/_astro/61.C1-UzCoS_Z8Owvf.webp 640w, /_astro/61.C1-UzCoS_2k3ulz.webp 750w, /_astro/61.C1-UzCoS_Z4T6M1.webp 828w, /_astro/61.C1-UzCoS_ZuVSc8.webp 1080w, /_astro/61.C1-UzCoS_Z1WM1Su.webp 1280w, /_astro/61.C1-UzCoS_Pg3K0.webp 1668w, /_astro/61.C1-UzCoS_21QNrS.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;標準プロセッサへのテストと同様に画像をアップロードしてテストしていきます。&lt;/p&gt;&lt;p&gt;この「評価とテスト」画面で「テストドキュメントをアップロード」をクリックしてテストしていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;913&quot; src=&quot;/_astro/62.pCc0VNi6_3SomT.webp&quot; srcset=&quot;/_astro/62.pCc0VNi6_2koA6k.webp 640w, /_astro/62.pCc0VNi6_ZPV1qT.webp 750w, /_astro/62.pCc0VNi6_1Oiver.webp 828w, /_astro/62.pCc0VNi6_Z2sUih7.webp 1080w, /_astro/62.pCc0VNi6_19qGPs.webp 1280w, /_astro/62.pCc0VNi6_Z17HljY.webp 1668w, /_astro/62.pCc0VNi6_3SomT.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうしたら、テスト結果が表示されました。&lt;/p&gt;&lt;p&gt;しかし・・・、あまり結果が芳しくないです・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;914&quot; src=&quot;/_astro/63.B6RwDpD3_Z12GGfm.webp&quot; srcset=&quot;/_astro/63.B6RwDpD3_k8S9n.webp 640w, /_astro/63.B6RwDpD3_Z2hadMJ.webp 750w, /_astro/63.B6RwDpD3_o4iRB.webp 828w, /_astro/63.B6RwDpD3_Z12lh0C.webp 1080w, /_astro/63.B6RwDpD3_Z2ubpGY.webp 1280w, /_astro/63.B6RwDpD3_Z2eiqWf.webp 1668w, /_astro/63.B6RwDpD3_Z12GGfm.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;結果が芳しくなかった原因としては、下記の2つが考えられます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;「SAD対策」に対するデータセットが少なすぎる。&lt;/li&gt;
&lt;li&gt;「自由入力項目」のデータセットが多すぎて過学習が起きている。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;今回、 Satisfactory の設定画面を最初から最後までスクショして、それら全てをデータセットとして利用しました。そして、「自由入力項目」の設定項目は、他の設定項目の 2, 3 倍以上は存在するので、データセットが他の設定項目より多くなってしまいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1664&quot; height=&quot;790&quot; src=&quot;/_astro/64.IbuKYyY5_Z20Jeib.webp&quot; srcset=&quot;/_astro/64.IbuKYyY5_1ID2bb.webp 640w, /_astro/64.IbuKYyY5_ZRF4KV.webp 750w, /_astro/64.IbuKYyY5_1MyrTp.webp 828w, /_astro/64.IbuKYyY5_1In9lN.webp 1080w, /_astro/64.IbuKYyY5_gx0Er.webp 1280w, /_astro/64.IbuKYyY5_Z20Jeib.webp 1664w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このブログ記事では、 Google Cloud のDocument AI を使用してゲーム「Satisfactory」の設定を管理する方法を紹介しました。以下が記事の要点です：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Document AI の基本とその設定方法&lt;/li&gt;
&lt;li&gt;標準プロセッサ&lt;code&gt;Form Parser&lt;/code&gt;と&lt;code&gt;Document OCR&lt;/code&gt;の使用体験&lt;/li&gt;
&lt;li&gt;カスタムプロセッサ&lt;code&gt;Custom Extractor&lt;/code&gt;の作成と訓練&lt;/li&gt;
&lt;li&gt;複数のカスタムデータセットを作成して学習させるプロセス&lt;/li&gt;
&lt;li&gt;実際のテストと評価&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;以上の内容を通して、ゲームの設定を効率的に管理する方法を構築しようとしましたが、今回は上手くいきませんでした。&lt;/p&gt;&lt;p&gt;問題と思われる箇所を修正すれば使えるようになるのかもしれませんが、このデータセットの作成が、作業に5時間以上掛かりなかなかに泥臭く、もう少しデータを増やすとなるとさらに時間を要するので、この方法はあまり効率的ではないのかもしれません。&lt;/p&gt;&lt;p&gt;もう少し AI への学習に慣れる必要がありそうです。それまでは一旦、ゲームの設定は画像として管理していこうと思います・・・。&lt;/p&gt;&lt;p&gt;あと、最後にプロセッサのデプロイを切るのを忘れないようにしましょう！（プロセッサのステータスが「無効」になっていることを確認！）&lt;/p&gt;&lt;p&gt;財布が力尽きてしまいます！
&lt;img loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;239&quot; src=&quot;/_astro/71.Buv6zFcx_ZIqBIw.webp&quot; srcset=&quot;/_astro/71.Buv6zFcx_ZIqBIw.webp 436w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～ん、人生って厳しいなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;けっこう泥臭いよな・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【TypeScript初心者】選択したテキストをコンテキストメニューを使ってクリップボードにコピーするChrome拡張機能</title><link>https://endorphinbath.com/posts/chrome-extension-copying-with-contextmenu/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-extension-copying-with-contextmenu/</guid><description>テキストを選択して右クリックメニューからクリップボードにコピーするChrome拡張機能の開発に関する記事になります。サービスワーカーとコンテンツスクリプト間のやり取りと、Uncaught (in promise) NotAllowedError: Failed to execute &apos;writeText&apos; on &apos;Clipboard&apos;: Document is not focused.のエラーへの対応も紹介します。</description><pubDate>Fri, 19 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでどうだあああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうだあああああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ダメだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでどうだあああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうだあああああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ダメだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでどうだあああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでどうだあああああああっ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いけたわ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでいけるのか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この記事について&lt;a href=&quot;#この記事について&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;日々、色々と調べ物をするわけですが、その情報のソースを保存したい時にその題名と URL をいちいち2回選択してメモ場所（僕の場合は Notion か Google スプレッドシート）に行ったり来たりするのが億劫になってきました。もう限界です。
よし、 Chrome 拡張機能を開発しよう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回、開発した Chrome 拡張機能の概要&lt;a href=&quot;#今回開発した-chrome-拡張機能の概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、 Chrome 拡張機能を開発して、 Chrome ブラウザのページ内で選択したテキストを、 Chrome のコンテキストメニューを使って、クリップボードにコピーする方法を紹介します。コピーする内容は、選択したテキスト、および現在いるタブが表示しているページの URL です。&lt;/p&gt;&lt;p&gt;コンテキストメニューを呼び出すとこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1124&quot; height=&quot;620&quot; src=&quot;/_astro/01.BPeKYhi-_Z220roe.webp&quot; srcset=&quot;/_astro/01.BPeKYhi-_Z1zLnaW.webp 640w, /_astro/01.BPeKYhi-_1qFfwF.webp 750w, /_astro/01.BPeKYhi-_EKLEk.webp 828w, /_astro/01.BPeKYhi-_Z254RhR.webp 1080w, /_astro/01.BPeKYhi-_Z220roe.webp 1124w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;想定する読者&lt;a href=&quot;#想定する読者&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事は、 Chrome 拡張機能を作ったことがない人や、最近作り始めた人を対象に解説する記事になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;利用したツール&lt;a href=&quot;#利用したツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の Chrome 拡張機能を開発する際には、 TypeScript （Node.js 上で）を使用してみます。&lt;/p&gt;&lt;p&gt;いつも、 Google Apps Script をバニラで使っているので型チェックがダルかった・・・。まあその厳しさが後々効いてくるんでしょうけど。&lt;/p&gt;&lt;a href=&quot;https://typescriptbook.jp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://typescriptbook.jp/img/logo.svg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;typescriptbook.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;TypeScript | TypeScript入門『サバイバルTypeScript』&lt;/div&gt;&lt;div&gt;TypeScript入門『サバイバルTypeScript』〜実務で使うなら最低限ここだけはおさえておきたいこと〜&lt;/div&gt;&lt;div&gt;typescriptbook.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://typescriptbook.jp/img/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Chrome の拡張機能には、基本的に Chrome API を使います。&lt;/p&gt;&lt;p&gt;やはり Google 様のリファレンスは分かりやすい。&lt;/p&gt;&lt;a href=&quot;https://developer.chrome.com/docs/extensions?hl=nl&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/chrome/images/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Chrome for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Chrome-extensies | Chrome Extensions | Chrome for Developers&lt;/div&gt;&lt;div&gt;Leer hoe u Chrome-extensies ontwikkelt.&lt;/div&gt;&lt;div&gt;developer.chrome.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;サービスワーカー内でコンテキストメニューを設定する&lt;a href=&quot;#サービスワーカー内でコンテキストメニューを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、コンテキストメニューの開発です。 Chrome のコンテキストメニューへの機能追加は、サービスワーカーを使用します。&lt;/p&gt;&lt;p&gt;サービスワーカーは、拡張機能のロジックをバックグラウンドで処理する役割を担います。 Chrome API を使った処理や、他の API へのリクエストはサービスワーカーが基本的に担当します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;@types/chrome ライブラリの追加&lt;a href=&quot;#typeschrome-ライブラリの追加&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、 TypeScript で Chrome 拡張機能を開発するときには、このライブラリがあると型チェックへの対応が楽になります。&lt;code&gt;package.json&lt;/code&gt;にこんなライブラリがあることを確認します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;web-ext-react-template&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;devDependencies&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;@types/chrome&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;^0.0.266&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 後は略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;manifest.json での設定&lt;a href=&quot;#manifestjson-での設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、&lt;code&gt;manifest.json&lt;/code&gt;で使いたい Chrome API をこんな感じで設定します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;manifest_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Landmaster&apos;s Army Knife&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;1.0.0&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;permissions&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;tabs&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;storage&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;contextMenus&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;content_scripts&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;all_frames&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;matches&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;all_urls&amp;gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;js&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;src/content.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;background&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;service_worker&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;src/background/background.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 後は略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サービスワーカーにコンテキストメニューを設定&lt;a href=&quot;#サービスワーカーにコンテキストメニューを設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、&lt;code&gt;&quot;background&quot;&lt;/code&gt;で指定した&lt;code&gt;background.ts&lt;/code&gt;がサービスワーカーなる存在ですので、コイツにコンテキストメニューを追加する処理を書きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CommandDict&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;cid&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;commandsDict&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CommandDict&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;copyMd&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Copy selected text as Markdown&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;copyTsv&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Copy selected text as TSV&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; This event listener is triggered when the extension is installed or updated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* It creates context menu items for each command defined in the commandsDict object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{chrome.runtime.OnInstalledDetails}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;details&lt;/span&gt;&lt;span&gt; - Details of the installation or update event.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;runtime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onInstalled&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;cid&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;entries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commandsDict&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;contextMenus&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cid&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;normal&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;contexts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;selection&apos;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;なんとこれだけでコンテキストメニューに独自に追加メニューが追加できてしまいます。思ったより楽だ。&lt;/p&gt;&lt;p&gt;&lt;code&gt;chrome.runtime.onInstalled.addListener()&lt;/code&gt;で、コンテキストメニューに追加するメニューの内容を設定します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サービスワーカーにコンテキストメニューにおけるアクションを設定&lt;a href=&quot;#サービスワーカーにコンテキストメニューにおけるアクションを設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、&lt;code&gt;background.ts&lt;/code&gt;に、この処理を書きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; This event listener handles the click event on the context menu items.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* It sends a message to the content script in the active tab with the ID of the clicked menu item.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{chrome.contextMenus.OnClickData}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt; - Details of the clicked context menu item.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{chrome.tabs.Tab | undefined}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt; - Details of the tab where the context menu was clicked.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;contextMenus&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onClicked&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addListener&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;contextMenus&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;OnClickData&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tabs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Tab&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;chrome.contextMenus.onClicked.addListener() process START: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;tab not found.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cid&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;menuItemId&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tabId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb--------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tabs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sendMessage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tabId&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;sender&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;contextmenu&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cid&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;chrome.tabs.sendMessage()&lt;/code&gt;で、コンテキストメニューでクリックされた時に、「コンテンツスクリプト」にメッセージを送って呼び出す処理を行います。&lt;/p&gt;&lt;p&gt;「コンテンツスクリプト」とは、 Web 側で動作するスクリプトの事です。&lt;/p&gt;&lt;p&gt;どうして、そのコンテンツスクリプトを呼び出す必要があるのかというと、サービスワーカー内では、ページの中に干渉することが出来ず、選択したテキストを取得できないためです。&lt;/p&gt;&lt;p&gt;なので、ページ内の DOM を参照編集したい場合は、コンテンツスクリプトに処理を記述する必要があります。
（ちなみに、 JavaScript スタンドアロンではないサードパーティの API へのリクエストを Web 側（コンテンツスクリプト）で行うと拡張機能の管理画面でエラーを吐き出すようになるので、そういった API を呼び出す処理は、基本的にバックグラウンド側で行う方が無難です。）&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;サービスワーカーからコンテンツスクリプトを呼び出す&lt;a href=&quot;#サービスワーカーからコンテンツスクリプトを呼び出す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは次に、コンテンツスクリプトの中にテキストを取得する処理を書いていきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;manifest.json&lt;/code&gt;で指定した、&lt;code&gt;content.ts&lt;/code&gt;の中に&lt;code&gt;chrome.tabs.sendMessage()&lt;/code&gt;で送ったメッセージを受け取る処理を記述します。その処理を担う関数が、&lt;code&gt;chrome.runtime.onMessage.addListener()&lt;/code&gt;です。&lt;/p&gt;&lt;p&gt;この関数内で、先程サービスワーカーから送ったメッセージオブジェクトの内容を確認して、コンテキストメニュー内のどの項目がクリックされたか、どの処理を行うのかどうかを分岐させます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; This event listener handles messages from the content script or other parts of the extension.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* It performs different actions based on the sender and the message received.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{chrome.runtime.Message}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; - The message received from the sender.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;runtime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onMessage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addListener&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;chrome.runtime.onMessage.addListener() process START: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sender&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sender&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sender&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;sender&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;contextmenu&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commandsDict&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RangeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;The message from the service worker is invalid.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;copyMd&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;copySelectedTextAsMarkdown&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;copyTsv&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;copySelectedTextAsTsv&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;copySelectedTextAsMarkdown()&lt;/code&gt;で Makdown を、&lt;code&gt;copySelectedTextAsTsv()&lt;/code&gt;で TSV の形式でクリップボードにコピーします。主な処理は双方とも同じですので、 Markdown の方で今後の処理を見ていきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;コンテンツスクリプト内でクリップボードにコピペする&lt;a href=&quot;#コンテンツスクリプト内でクリップボードにコピペする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Web 側の処理に入ります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;コードの概要&lt;a href=&quot;#コードの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;選択したテキストをクリップボードにコピーする処理になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;getSelectedTextAndUrl()&lt;/code&gt;で選択したテキストおよび URL を取得して、&lt;code&gt;copyAsMarkdown()&lt;/code&gt;で Markdown の形でクリップボードにコピーします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Retrieves the currently selected text and the current URL.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; An object containing the selected text and the URL.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSelectedTextAndUrl&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; } {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;getSelectedTextAndUrl() process START: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;undefined&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//クッキーに値をセット&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cookie&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;クッキー&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSelection&lt;/span&gt;&lt;span&gt;()?.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;selectedText&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;getSelectedTextAndUrl() process END: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; };&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Copies the provided text as a markdown link to the clipboard.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt; The text to be formatted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; The URL to be included in the markdown link.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyAsMarkdown&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;copyAsMarkdown() process START: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;markdownLink&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`[&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clipboard&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;markdownLink&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// onFulfilled: clipboard successfully set&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// onRejected: clipboard write failed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; This function copies the selected text and URL in Markdown format to the clipboard.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{void}&lt;/span&gt;&lt;span&gt; - This function does not return any value.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copySelectedTextAsMarkdown&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;copySelectedTextAsMarkdown() process START: --------&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSelectedTextAndUrl&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;copyAsMarkdown&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;navigator.clipboard.writeText()は非同期処理であり、処理を完了させる必要がある&lt;a href=&quot;#navigatorclipboardwritetextは非同期処理であり処理を完了させる必要がある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このコピー処理で、注意したい点があります。&lt;/p&gt;&lt;p&gt;それは、&lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt;が動作するためには、 Web ページがフォーカスされている状態でなければならないことです。&lt;/p&gt;&lt;p&gt;フォーカスが当たっていないと、このようなエラーが発生してクリップボードにコピーすることが出来ません。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Uncaught (in promise) NotAllowedError: Failed to execute &apos;writeText&apos; on &apos;Clipboard&apos;: Document is not focused.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;どういう時にこういうエラーが起こるのかと言うと、&lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt;周りでこのような処理を書いた時です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Copies the provided text as a markdown link to the clipboard.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;span&gt; The text to be formatted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; The URL to be included in the markdown link.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyAsMarkdown&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedText&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clipboard&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;markdownLink&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この処理には、&lt;code&gt;.then()&lt;/code&gt;が書いてありません。&lt;/p&gt;&lt;p&gt;&lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt;は非同期処理であり、この書き方になると、コンテキストメニューから Web ページへフォーカスが戻る前にクリップボードへのコピー処理を終了させることになるためにエラーになります。&lt;/p&gt;&lt;p&gt;そのため、&lt;code&gt;.then()&lt;/code&gt;で、&lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt;の非同期処理をしっかり完了させてあげる必要があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;完成です&lt;a href=&quot;#完成です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この一連の処理を記述して、 JavaScript にビルドすれば Chrome 拡張機能として使えるようになります！&lt;/p&gt;&lt;p&gt;ビルドの詳細は省きますが、この拡張機能があれば、 GitHub などで選択したテキストから Markdown をクリップボードに出力できるようになります！（GitHub では、キーを押したらどこかにフォーカスが飛びがちなので。）
&lt;img loading=&quot;lazy&quot; width=&quot;1316&quot; height=&quot;736&quot; src=&quot;/_astro/09.h2iHi6W8_uDUQS.webp&quot; srcset=&quot;/_astro/09.h2iHi6W8_Z17I583.webp 640w, /_astro/09.h2iHi6W8_1SIxzz.webp 750w, /_astro/09.h2iHi6W8_Z1kjEFq.webp 828w, /_astro/09.h2iHi6W8_Z1gBAsT.webp 1080w, /_astro/09.h2iHi6W8_Zfg4yI.webp 1280w, /_astro/09.h2iHi6W8_uDUQS.webp 1316w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、選択したテキストをクリップボードにコピーする Chrome 拡張機能の開発方法を紹介しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;開発環境: TypeScript を使用、 Chrome API との連携&lt;/li&gt;
&lt;li&gt;拡張機能の流れ: サービスワーカー設定、コンテキストメニューの設定、コンテンツスクリプトの呼び出し&lt;/li&gt;
&lt;li&gt;主要機能: ページ内テキストとURLを選択し、 Markdown または TSV 形式でコピー&lt;/li&gt;
&lt;li&gt;エラー処理: &lt;code&gt;navigator.clipboard.writeText&lt;/code&gt;は非同期処理を適切にハンドリングする必要あり&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;機能としては簡単でしたが、サービスワーカーとコンテンツスクリプトの間の呼び出しは基本なので、ここを抑えられたら今後の開発がかなりスムーズに進められるような気がします。&lt;/p&gt;&lt;p&gt;ぜひ本記事をご参考下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;フォーカス問題で少し沼ったな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;execCommandはもう非推奨だからなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Chrome拡張機能開発】GitHubでmainブランチにいる時に目立たせて気付きたい</title><link>https://endorphinbath.com/posts/chrome-extension-github-main-branch-notice/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-extension-github-main-branch-notice/</guid><description>GitHubでmainブランチにいることを目立たせるChrome拡張機能の開発方法を初学者向けに解説します。Storage APIを処理するためにPromiseメソッドチェーンを組んで実装しました。</description><pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あーまた間違えた・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GitHubにファイルをアップロードしてるのか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;また間違えてmainブランチにアップしてしまった・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;CLIからプッシュした方がブランチ固定できないか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ブラウザからアップロードした方が直感的で楽なんだよねえ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;例えば、Chromeの拡張機能を作る時ってブラウザで動作確認するから、そのままブラウザでアップロードする流れはスゴいスムーズ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、個人で開発してる場合はいちいちコミット文を書くのは面倒だしな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;しかし間違えてmainブランチにプッシュしてしまうのじゃあ～～悲しい・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コミット履歴が荒れるな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか対策をしよう。Chrome拡張機能を作るか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、何が起きてるんだ&lt;a href=&quot;#まず何が起きてるんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自分、個人開発をしている時は、 GitHub をブラウザで開いてファイルをアップロード～。&lt;/p&gt;&lt;p&gt;といったことを結構するんですよね。&lt;/p&gt;&lt;p&gt;まあ、複数人で開発してたらあり得ないと思うんですけど、 GAS で開発してる時も（clasp は使っていない。） README とかいちいちローカルに持ってくるのが面倒なので、直接ファイルをアップロードしてます。&lt;/p&gt;&lt;p&gt;そして、その時にサブブランチではなくて、 main ブランチの方に push というかアップロードしてしまうことが結構ありまして、そうするとコミット履歴が汚くなってしまって、それが少し不満でした。（CLI を使うのは面倒。）&lt;/p&gt;&lt;p&gt;そこで、 main ブランチにアップロードするというヒューマンエラーを撲滅するために、 GitHub 上で&lt;code&gt;main&lt;/code&gt;ブランチにいることを視覚的に目立たせる、Chrome拡張機能を作ります！&lt;/p&gt;&lt;p&gt;こんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1893&quot; height=&quot;854&quot; src=&quot;/_astro/01.isotstK-_Z20K8Ft.webp&quot; srcset=&quot;/_astro/01.isotstK-_Dz24P.webp 640w, /_astro/01.isotstK-_2h2D3v.webp 750w, /_astro/01.isotstK-_r6wv2.webp 828w, /_astro/01.isotstK-_Z1ikIk5.webp 1080w, /_astro/01.isotstK-_ZcJAax.webp 1280w, /_astro/01.isotstK-_ZBUTaF.webp 1668w, /_astro/01.isotstK-_Z20K8Ft.webp 1893w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サブブランチだと、この帯は表示されません。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;908&quot; src=&quot;/_astro/01_05.7MQm7ewv_Zuzirv.webp&quot; srcset=&quot;/_astro/01_05.7MQm7ewv_Z14FayY.webp 640w, /_astro/01_05.7MQm7ewv_1qu7q1.webp 750w, /_astro/01_05.7MQm7ewv_H3wcK.webp 828w, /_astro/01_05.7MQm7ewv_1ahS5P.webp 1080w, /_astro/01_05.7MQm7ewv_ZMvm6M.webp 1280w, /_astro/01_05.7MQm7ewv_G2UmV.webp 1668w, /_astro/01_05.7MQm7ewv_Zuzirv.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この記事について&lt;a href=&quot;#この記事について&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事は、 Chrome 拡張機能を作ったことがない人や、最近作り始めた人を対象に解説する記事になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回開発に使ったライブラリなど&lt;a href=&quot;#今回開発に使ったライブラリなど&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この拡張機能の開発には、以下のライブラリを使用しています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Chrome ver. 123.0.6312.86&lt;/li&gt;
&lt;li&gt;素の JavaScript&lt;/li&gt;
&lt;li&gt;jQuery&lt;/li&gt;
&lt;li&gt;jqColorPicker&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;具体的には、オプションページの作成に jQuery を活用し、さらにコンテンツスクリプトやバックグラウンドスクリプトでの処理には Vanilla JS を主に使用しています。これにより、開発の効率化と拡張機能のパフォーマンスが両立されています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自作のChrome拡張機能の導入方法&lt;a href=&quot;#自作のchrome拡張機能の導入方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Chrome 拡張機能を開発し、インストールするプロセスはシンプルです。&lt;/p&gt;&lt;p&gt;まずは、&lt;code&gt;chrome://extensions/&lt;/code&gt;のURLを打ち込んで、Chrome 拡張機能を管理するページに飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;639&quot; src=&quot;/_astro/02.twFUuwdt_1V6o0r.webp&quot; srcset=&quot;/_astro/02.twFUuwdt_1b4251.webp 640w, /_astro/02.twFUuwdt_Z169AOH.webp 750w, /_astro/02.twFUuwdt_1ubDj7.webp 828w, /_astro/02.twFUuwdt_Z1Hkj2f.webp 1080w, /_astro/02.twFUuwdt_217r0I.webp 1280w, /_astro/02.twFUuwdt_Z46gg5.webp 1668w, /_astro/02.twFUuwdt_1V6o0r.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;遷移先のページの右上にある「デベロッパーモード」が ON になっていることを確認して、開発する拡張機能のフォルダを Chrome にドラッグ&amp;amp;ドロップするだけで、簡単に導入が可能です。
&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;775&quot; src=&quot;/_astro/03.Cc3RTkzZ_Z1wbjWD.webp&quot; srcset=&quot;/_astro/03.Cc3RTkzZ_ZVMEFQ.webp 640w, /_astro/03.Cc3RTkzZ_Z1woGyx.webp 750w, /_astro/03.Cc3RTkzZ_NRr2Y.webp 828w, /_astro/03.Cc3RTkzZ_Z2oNvvt.webp 1080w, /_astro/03.Cc3RTkzZ_Z1he9Hk.webp 1280w, /_astro/03.Cc3RTkzZ_1BLARY.webp 1668w, /_astro/03.Cc3RTkzZ_Z1wbjWD.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とりあえず、これでボチボチ開発していきますか・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;拡張機能の全体構成&lt;a href=&quot;#拡張機能の全体構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回作る拡張機能のディレクトリ構成はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└─src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  background.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  content.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  manifest.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  options.css&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  options.html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  options.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├─lib&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│    colorUtils.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│    config.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│    jqColorPicker.min.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│    jquery-3.7.1.min.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│    utils.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└─logo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;128.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;16.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;48.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;manifest.json&lt;/code&gt;の中身はこんな感じです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;&quot;icons&quot;&lt;/code&gt;は、拡張機能のアイコンが入っているフォルダです。&lt;code&gt;16x16&lt;/code&gt;、&lt;code&gt;48x48&lt;/code&gt;、&lt;code&gt;128x128&lt;/code&gt; のサイズの画像ファイルが入っています。実は、画像ファイルの大きさはピッタリその大きさである必要はありません。（ちなみに僕の128の画像のサイズは 500 くらいあります。）&lt;/p&gt;&lt;p&gt;&lt;code&gt;&quot;content_scripts&quot;&lt;/code&gt;、&lt;code&gt;&quot;background&quot;&lt;/code&gt;、&lt;code&gt;&quot;options_ui&quot;&lt;/code&gt;でそれぞれ役割・機能を持った HTML および JavaScript を作成できます。（今回は&lt;code&gt;&quot;default_popup&quot;&lt;/code&gt;は開発しません。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;manifest_version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;This is the Main Branch!! for GitHub&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;version&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;0.0.4&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;icons&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;logo/16.png&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;48&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;logo/48.png&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;128&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;logo/128.png&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;description&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Attention please, this is a Main Branch.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;content_scripts&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;all_frames&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;matches&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;https://github.com/*&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;js&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;lib/config.js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;lib/utils.js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;lib/colorUtils.js&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;content.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;background&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;service_worker&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;background.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;permissions&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;tabs&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;scripting&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;storage&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;host_permissions&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://github.com/*&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;options_ui&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;page&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;options.html&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;コンテンツスクリプトによる要素を描画する処理&lt;a href=&quot;#コンテンツスクリプトによる要素を描画する処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、&lt;code&gt;content.js&lt;/code&gt;というファイルをコネコネと作っていきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;content.js&lt;/code&gt;はコンテンツスクリプトというもので、コンテンツスクリプトは、特定の Web ページに対してJavaScriptを実行し、 DOM を操作するためのスクリプトです。&lt;/p&gt;&lt;p&gt;この拡張機能では、 GitHub のページがロードされたときに&lt;code&gt;main&lt;/code&gt;ブランチにいるかをチェックし、該当する場合は特定の要素のスタイルを変更して目立たせます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Inserts a new DOM element before a reference element in the document.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Element}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; - The new element to insert.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Element}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt; - The reference element before which the new element will be inserted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; True if the insertion was successful, otherwise false.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;insertDom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Insert a new element in front of the specified element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;insertBefore&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Main function to make a notice on the page if it&apos;s the main or master branch of a repository.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{KeyboardEvent}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt; - The event object associated with the keydown event.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;makeNoticeInPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;notice-by-this-is-main-branch-for-github&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;\#&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Already noticed.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSelectorToMakeNotice&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Making notice is not executed...&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;No specified element found.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Specified element found!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`!!! This page is the Main Branch !!!`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// text = text.toUpperCase();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createDom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;insertDom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;main: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;makeNoticeInPage&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この処理には、 DOM の操作が必須で、正確なセレクタの指定が重要です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GitHub遷移時の検知にはサービスワーカーが必要&lt;a href=&quot;#github遷移時の検知にはサービスワーカーが必要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、&lt;code&gt;content.js&lt;/code&gt;だけですと機能としては不十分です。&lt;/p&gt;&lt;p&gt;GitHub 内でのページ遷移は、通常のページロードとは異なり、 Single Page Application （SPA）かを使用した動的な内容の更新があります。&lt;/p&gt;&lt;p&gt;そして、このページ内の要素の動きの際に、 main ブランチの Code 画面に変化したことを検知できずに、&lt;code&gt;content.js&lt;/code&gt;がトリガーされないという問題が発生します。
&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;796&quot; src=&quot;/_astro/11.BUYwzPo__ZEWmQM.webp&quot; srcset=&quot;/_astro/11.BUYwzPo__Z1Y4tz5.webp 640w, /_astro/11.BUYwzPo__1msCaV.webp 750w, /_astro/11.BUYwzPo__Z1mrn1t.webp 828w, /_astro/11.BUYwzPo__11CSIe.webp 1080w, /_astro/11.BUYwzPo__ZpoK6G.webp 1280w, /_astro/11.BUYwzPo__2tkPwt.webp 1668w, /_astro/11.BUYwzPo__ZEWmQM.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;くそう、なんてことだ・・・&lt;/p&gt;&lt;p&gt;そこで、この要素の動きを検知するにはバックグラウンドで動作する「サービスワーカー」が必要です。&lt;/p&gt;&lt;p&gt;サービスワーカーは、特定のイベントが発生したときに実行されるスクリプトで、この拡張機能では GitHub が開かれているタブが更新されたことを検知し、適切なタイミングでコンテンツスクリプトを実行するために使用します。&lt;/p&gt;&lt;p&gt;今回、サービスワーカーを&lt;code&gt;background.js&lt;/code&gt;として作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;tabs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onUpdated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;tabId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;chrome.tabs.onUpdated.addListener is working.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;complete&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;https://github.com/&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scripting&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;tabId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tab&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; }, &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;./content.js&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Calling to &apos;content.js&apos; is failed because of the error.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;chrome.tabs.onUpdated.addListener has worked.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このサービスワーカーを作成することで、 GitHub 上で main ブランチを表示した時は漏れなく目立たせるヤツが表示されるようになりました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;オプションページによる色を設定する処理&lt;a href=&quot;#オプションページによる色を設定する処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、 GitHub で目立たせる要素の色を編集できるようにしていきたいと思います。&lt;/p&gt;&lt;p&gt;その手段としては、ユーザーが拡張機能の表示色をカスタマイズできるように、オプションページを提供することです。
&lt;img loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;383&quot; src=&quot;/_astro/12.CO8vaBw1_179TuH.webp&quot; srcset=&quot;/_astro/12.CO8vaBw1_2ulKiC.webp 640w, /_astro/12.CO8vaBw1_179TuH.webp 743w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この画像のような UI を持ったオプションページを作成します。&lt;/p&gt;&lt;p&gt;オプションページは、&lt;code&gt;options.html&lt;/code&gt;をベースに&lt;code&gt;options.css&lt;/code&gt;と&lt;code&gt;options.js&lt;/code&gt;で色々とスタイルや処理を追加していきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;options.html&lt;/code&gt;はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rel&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/css&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;options.css&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;lib/jquery-3.7.1.min.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;lib/jqColorPicker.min.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;container&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;conditions&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;Text color&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;Background color&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;save&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;save&amp;lt;/&lt;/span&gt;&lt;span&gt;button&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;lib/config.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;lib/utils.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;options.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ここでは、 jQuery を使用して UI を構築し、 Chrome の Storage API を介して設定値を保存していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;jQuery を利用した要素の追加&lt;a href=&quot;#jquery-を利用した要素の追加&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;jQuery で要素を追加していく処理は、以下のような感じで&lt;code&gt;options.js&lt;/code&gt;に記載していきます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;// set event handler&lt;/code&gt;のコメントがある行までは要素のスタイルを設定して、それ以降はイベントハンドラとそれに紐づく処理を記載していきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Adds a condition row to the conditions table on the page.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number{}{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt; - The condition object containing text and background color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number{}{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt; - The default condition object to revert to.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt; - The platform to manage repositories.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number{}{}}&lt;/span&gt;&lt;span&gt; The condition object that was added.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addCondition&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$table&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`#conditions`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$condition&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;tr class=&quot;condition&quot;&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$pfName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;td&amp;gt;&amp;lt;p class=&quot;platform&quot;&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getPfConfig&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;td&amp;gt;&amp;lt;input type=&quot;text&quot; class=&quot;color&quot;&amp;gt;&amp;lt;/input&amp;gt;&amp;lt;/td&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;td&amp;gt;&amp;lt;a href=&quot;#&quot; id=&quot;default&quot;&amp;gt;default&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$pfName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$default&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$table&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$condition&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setColorToElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setColorToElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// set event handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$default&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setColorToElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setColorToElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;colorPicker&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;opacity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;dark&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`#fff`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;light&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`#fff`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`addCondition done.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Sets the background color of a DOM element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{HTMLElement}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; - The DOM element to color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt; - The red component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt; - The green component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt; - The blue component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{undefined}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setColorToElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorRgb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getColorString&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;backgroundColor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorRgb&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorRgb&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Constructs a color string from RGB values.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt; - The red component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt; - The green component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt; - The blue component of the color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; The RGB color string.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;throws&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{TypeError}&lt;/span&gt;&lt;span&gt; If any of the color components is not a number.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getColorString&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`A color code must be number type.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`rgb(&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;red&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;green&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;blue&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これで、 UI 部分は出来ました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Chrome の Storage API を使う処理（保存機能）&lt;a href=&quot;#chrome-の-storage-api-を使う処理保存機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、カスタマイズした色を保存できるようにします。&lt;/p&gt;&lt;p&gt;そこで、 Chrome の Storage API は、拡張機能の設定情報などを保存するのに非常に便利な機能です。&lt;/p&gt;&lt;p&gt;この API を使って、オプションページで設定した色の情報を保存し、コンテンツスクリプトが実行されるたびにその情報を読み込み、設定された色で&lt;code&gt;main&lt;/code&gt;ブランチを強調表示します。&lt;/p&gt;&lt;p&gt;Storage API での保存処理はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Saves the current conditions to Chrome&apos;s sync storage.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{undefined}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;saveConditions&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`saveConditions started.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditionObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConditionObjByClassName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`.condition`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`.color`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditionObj&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`save setting: `&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sync&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`chrome.storage.sync.set started.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`saved!`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`#container`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;span&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/span&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$container&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; () {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`chrome.storage.sync.set terminated...`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`saveConditions terminated.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Generates an array of condition objects for each matching child of the selected parent elements.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parentSelector&lt;/span&gt;&lt;span&gt; - The selector for the parent elements.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;childSelector&lt;/span&gt;&lt;span&gt; - The selector for the child elements.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number{}{}{}}&lt;/span&gt;&lt;span&gt; An array of condition objects derived from the child elements&apos; background colors.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConditionObjByClassName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;parentSelector&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;childSelector&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// let conditions = [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;parentSelector&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;each&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;elem&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtColor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elem&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;childSelector&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;backgroundColor&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtColorParts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getColorsByRegex&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;txtColor&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgColor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;elem&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;childSelector&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;backgroundColor&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgColorParts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getColorsByRegex&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bgColor&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConditionObj&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;parseIntAll&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;txtColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;txtColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;txtColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;bgColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;bgColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;bgColorParts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Creates an object containing text and background color information.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtRed&lt;/span&gt;&lt;span&gt; - The red component of the text color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtGreen&lt;/span&gt;&lt;span&gt; - The green component of the text color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtBlue&lt;/span&gt;&lt;span&gt; - The blue component of the text color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgRed&lt;/span&gt;&lt;span&gt; - The red component of the background color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgGreen&lt;/span&gt;&lt;span&gt; - The green component of the background color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgBlue&lt;/span&gt;&lt;span&gt; - The blue component of the background color.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number{}{}}&lt;/span&gt;&lt;span&gt; An object with `txt_color` and `bg_color` properties.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;throws&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{TypeError}&lt;/span&gt;&lt;span&gt; If any color component is not a number.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConditionObj&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;txtRed&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;txtGreen&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;txtBlue&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgRed&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgGreen&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgBlue&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;txtRed&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;txtGreen&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;txtBlue&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgRed&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgGreen&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bgBlue&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&apos;c&apos; must be number type.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtRed&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtGreen&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;txtBlue&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgRed&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgGreen&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bgBlue&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ChromeのStorage APIを使う処理（保存機能）&lt;a href=&quot;#chromeのstorage-apiを使う処理保存機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、保存した色を Storage から取り出せるようにします&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Asynchronously retrieves setting object from Chrome&apos;s storage.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Promise&amp;lt;number{}{}{}{}&amp;gt;}&lt;/span&gt;&lt;span&gt; A promise that resolves with the setting object containing conditions.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSettingObjFromChromeStorage&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultSetting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getColorConfig&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultTxtColor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;txt&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultBgColor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bg&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getConditionObj&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;defaultTxtColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultTxtColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultTxtColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultBgColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultBgColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;defaultBgColor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt;)) };&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sync&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defaultSetting&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`get setting: `&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasOwnProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;conditions&quot;&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getSettingObjFromChromeStorage : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getSettingObjFromChromeStorage : bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;set_colors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;conditions&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;default_colors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultCond&lt;/span&gt;&lt;span&gt; };&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;condObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これにより、ユーザーは自分の好みに合わせて&lt;code&gt;main&lt;/code&gt;ブランチを目立たせる色を選択できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;903&quot; src=&quot;/_astro/13.Bo52jAud_Zjz0j.webp&quot; srcset=&quot;/_astro/13.Bo52jAud_Z1bRlKJ.webp 640w, /_astro/13.Bo52jAud_1h0F65.webp 750w, /_astro/13.Bo52jAud_Z17VV2v.webp 828w, /_astro/13.Bo52jAud_Z1rg1.webp 1080w, /_astro/13.Bo52jAud_15ivVn.webp 1280w, /_astro/13.Bo52jAud_Z1anCtK.webp 1668w, /_astro/13.Bo52jAud_Zjz0j.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Promiseによる非同期メソッドチェーン&lt;a href=&quot;#promiseによる非同期メソッドチェーン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、 Chrome の Storage API を利用することで、この拡張機能において、非同期処理が挟まるようになってきました。 Storage からまだ値を取得していない状態で、目立たせる処理に行くと、処理が失敗してしまいます。
そこで、&lt;/p&gt;&lt;p&gt;「Storage API が関連する処理はStorageを参照しているスコープの中に全部収めてしまおう！」&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;chrome&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sync&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defaultSetting&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;setting&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// いや～、こんなに長いと見にくいですよねぇ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;しかし、そんなことをすると、一つ一つの変数のスコープがとても長くなって、処理の順序が分かりづらく、メンテしにくいコードになってしまいそうです。&lt;/p&gt;&lt;p&gt;その一連の非同期処理を小分けのメソッドに分割する必要がありそうです。&lt;/p&gt;&lt;p&gt;そこで、&lt;code&gt;Promise&lt;/code&gt;チェーンを下記のように連ねていきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;makeNoticeInPage&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getSettingObjFromChromeStorage&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSelectorToMakeNotice&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RangeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Making notice is not executed...&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetSelector&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RangeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;No specified element found.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Specified element found!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;notice-by-this-is-main-branch-for-github&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;\#&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RangeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Already noticed.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`!!! This page is the Main Branch !!!`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// text = text.toUpperCase();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colorObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;set_colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;txt_color&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;set_colors&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;github&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bg_color&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createDom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colorObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;insertDom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;newElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;referenceElement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`makeNoticeInPage is terminated...`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;基本的に一つのオブジェクトの中に、一つ一つの非同期処理で取得した情報を格納して、次の非同期処理に渡していく流れです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一旦、完成！&lt;a href=&quot;#一旦完成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この流れで、 GitHub の main ブランチに居ることを、自分の好きな色で目立たせることが出来る Chrome 拡張機能が完成しました。&lt;/p&gt;&lt;p&gt;最初の拡張機能開発でフロントエンドもそんなに触ったことが無かったので、分からないことが多くて苦労しましたが、一旦こんなもので。
&lt;img loading=&quot;lazy&quot; width=&quot;1897&quot; height=&quot;900&quot; src=&quot;/_astro/14.Cslp3d9U_1T4QIb.webp&quot; srcset=&quot;/_astro/14.Cslp3d9U_1UvsME.webp 640w, /_astro/14.Cslp3d9U_ZFMD9s.webp 750w, /_astro/14.Cslp3d9U_1YqSvS.webp 828w, /_astro/14.Cslp3d9U_8iuEq.webp 1080w, /_astro/14.Cslp3d9U_Z1jwD1V.webp 1280w, /_astro/14.Cslp3d9U_1tvrBy.webp 1668w, /_astro/14.Cslp3d9U_1T4QIb.webp 1897w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事では、 GitHub で&lt;code&gt;main&lt;/code&gt;リポジトリにいることを視覚的に目立たせる Chrome 拡張機能の開発について解説しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;コンテンツスクリプトの使用&lt;/li&gt;
&lt;li&gt;サービスワーカーによるページ遷移の検知&lt;/li&gt;
&lt;li&gt;オプションページでの色設定&lt;/li&gt;
&lt;li&gt;Storage API の利用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Promise&lt;/code&gt;による非同期処理の効率化&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;など、拡張機能開発の基本から解説しました。&lt;/p&gt;&lt;p&gt;拡張機能を作る時の参考として、ぜひ役立てて下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お～、これは目立つなあぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでミスの防止にはなったかな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年03月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202403/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202403/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Satisfactoryの新しいシリーズが更新されています。</description><pubDate>Tue, 02 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年3月に投稿した動画の一覧&lt;a href=&quot;#2024年3月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：9&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】基地総集編 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky基地総集編--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/HIeoWkyn9IE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】未知の設備でゆっくり工業化 #01【ゆっくり実況】&lt;a href=&quot;#satisfactory未知の設備でゆっくり工業化-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fixiznZhgis/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄鉱石を貪るケーブルとコンクリート #02 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory鉄鉱石を貪るケーブルとコンクリート-02--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/IzmUZ9T9jM0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ネジか鉄板で作れるプロテインと風力タービン #03 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryネジか鉄板で作れるプロテインと風力タービン-03--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/coP7zQX_Igk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄を材料とするケーブルを材料とするバイオ燃料 #04 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory鉄を材料とするケーブルを材料とするバイオ燃料-04--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PV9itRzVI5Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ルンバのご購入とあらばAWESOMEショップをご利用ください #05 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryルンバのご購入とあらばawesomeショップをご利用ください-05--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gX1v0Q0PM0w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】スペースエレベータとスペースマーケット #06 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryスペースエレベータとスペースマーケット-06--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SK_Mslpk9go/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄のネジで作れる銅のシートと石炭発電所 #07 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactory鉄のネジで作れる銅のシートと石炭発電所-07--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6TpLgxakDms/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】とりあえず製造過程が意味不明な多目的フレームワーク #08 | 未知の設備でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#satisfactoryとりあえず製造過程が意味不明な多目的フレームワーク-08--未知の設備でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/03/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/S9Ays7U_usQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は9本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】「承認が必要です：このプロジェクトがあなたのデータへのアクセス権限を必要としています。」の表示工程を省くようにするスコープ設定</title><link>https://endorphinbath.com/posts/gas-scope-settings-to-skip-oauth-process/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-scope-settings-to-skip-oauth-process/</guid><description>GAS実行時のOAuth承認プロセスを省くために必要なappsscript.jsonのスコープ設定について紹介します。</description><pubDate>Sat, 16 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああもう、いちいち認証画面出すのめんどくさいなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、ときどき表示されるやつだな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自動トリガーを付けてても、この認証切れで動かなくなっちゃうから困っちゃうよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ一応ずっと動かすことは可能です。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この記事の読者の想定&lt;a href=&quot;#この記事の読者の想定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Google Apps Script の認証がいちいちめんどくさいと思う人&lt;/li&gt;
&lt;li&gt;個人で Google Apps Script を使って開発、そして利用している人&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;認証がクドい時ってありますよね&lt;a href=&quot;#認証がクドい時ってありますよね&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script （GAS）を利用している際に、 「承認が必要です：このプロジェクトがあなたのデータへのアクセス権限を必要としています」 というメッセージが表示されることがあります。
&lt;img loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;155&quot; src=&quot;/_astro/01.VvK4zgT2_Z1Rt6wL.webp&quot; srcset=&quot;/_astro/01.VvK4zgT2_Z1Rt6wL.webp 530w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このメッセージは、 GAS が Google サービス内のユーザーのデータにアクセスしようとする時に、そのアクセスに必要な承認がまだ得られていない場合に表示されます。&lt;/p&gt;&lt;p&gt;この承認プロセスは、「OAuth」方式によって行われています。なので、 OAuth 認証情報の期限が切れていると再び認証プロセスを踏んで認証情報を更新して上げる必要があるわけです。&lt;/p&gt;&lt;p&gt;確かに、このメッセージはセキュリティを確保する上で重要です。&lt;/p&gt;&lt;p&gt;しかし、開発中や頻繁にアクセス権限の範囲を変更する必要がない場合は、この承認プロセスを簡素化もしくは省略したいと考えるかもしれません。少なくとも僕はそう考えました。&lt;/p&gt;&lt;p&gt;そこで、この承認プロセスを省略するための方法を紹介していきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1. GCPプロジェクトの設定を確認する&lt;a href=&quot;#1-gcpプロジェクトの設定を確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、承認プロセス省略のためにしなければならないことが、 GCP （Google Cloud Platform） プロジェクトとの連携です。&lt;/p&gt;&lt;p&gt;そこで、 GAS の「プロジェクトの設定」画面を開いて、「Google Cloud Platform（GCP）プロジェクト」の部分にあるプロジェクト番号が自分が紐つけたいプロジェクト番号と一致しているかどうかを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;1546&quot; height=&quot;867&quot; src=&quot;/_astro/11.Du99t9BD_Z2q4Smn.webp&quot; srcset=&quot;/_astro/11.Du99t9BD_Z1fyQUz.webp 640w, /_astro/11.Du99t9BD_ZGfXAB.webp 750w, /_astro/11.Du99t9BD_Z1sarsW.webp 828w, /_astro/11.Du99t9BD_2mihAW.webp 1080w, /_astro/11.Du99t9BD_Z1GxkiN.webp 1280w, /_astro/11.Du99t9BD_Z2q4Smn.webp 1546w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2. GCPプロジェクトでAPIを有効化する&lt;a href=&quot;#2-gcpプロジェクトでapiを有効化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そうしたら次に、その紐づけた GCP プロジェクトでAPIを有効化します。&lt;/p&gt;&lt;p&gt;GCP プロジェクトのダッシュボードを開いて、「APIとサービス」＞「ライブラリ」と遷移します。
&lt;img loading=&quot;lazy&quot; width=&quot;1561&quot; height=&quot;721&quot; src=&quot;/_astro/10.d6Vwx3iq_Z2hVgJ3.webp&quot; srcset=&quot;/_astro/10.d6Vwx3iq_Z2u0Y3r.webp 640w, /_astro/10.d6Vwx3iq_Z1qyRES.webp 750w, /_astro/10.d6Vwx3iq_1NG9Az.webp 828w, /_astro/10.d6Vwx3iq_tTiY4.webp 1080w, /_astro/10.d6Vwx3iq_ZY7yus.webp 1280w, /_astro/10.d6Vwx3iq_Z2hVgJ3.webp 1561w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこでライブラリを検索するページに遷移するのですが、検索する API の名称は、下記の「Google Identity」のスコープのリファレンスで確認します。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/identity/protocols/oauth2/scopes&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;OAuth 2.0 Scopes for Google APIs | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;例えば、 GAS を実行して、認証プロセスのページが開いた時に表示された内容がこのような感じだったとします。
&lt;img loading=&quot;lazy&quot; width=&quot;534&quot; height=&quot;555&quot; src=&quot;/_astro/12.CjyjyfuA_272e7V.webp&quot; srcset=&quot;/_astro/12.CjyjyfuA_272e7V.webp 534w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この場合、適用したい API の名称は、「Apps Script API, v1」になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1288&quot; height=&quot;471&quot; src=&quot;/_astro/13.2e5L0fw-_Z2eiRpj.webp&quot; srcset=&quot;/_astro/13.2e5L0fw-_ZFchgL.webp 640w, /_astro/13.2e5L0fw-_oGHQ6.webp 750w, /_astro/13.2e5L0fw-_1Tyqzt.webp 828w, /_astro/13.2e5L0fw-_ZODTLV.webp 1080w, /_astro/13.2e5L0fw-_Z2dfrdV.webp 1280w, /_astro/13.2e5L0fw-_Z2eiRpj.webp 1288w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、「Apps Script API」が有効になっていることを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;941&quot; height=&quot;585&quot; src=&quot;/_astro/14.DpgPWjfd_29VmWE.webp&quot; srcset=&quot;/_astro/14.DpgPWjfd_Z17FMOF.webp 640w, /_astro/14.DpgPWjfd_Z19mbul.webp 750w, /_astro/14.DpgPWjfd_ZQ4o1.webp 828w, /_astro/14.DpgPWjfd_29VmWE.webp 941w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで有効化は完了です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3. GAS内でスコープの明示&lt;a href=&quot;#3-gas内でスコープの明示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、 GAS プロジェクト内で OAuth のスコープを明示します。&lt;/p&gt;&lt;p&gt;そのために、「マニフェストファイル」というものを編集していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;appsscript.jsonを編集可にする&lt;a href=&quot;#appsscriptjsonを編集可にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GAS の「プロジェクトの設定」画面を開いて、「全般設定」内の『&lt;code&gt;appsscript.json&lt;/code&gt;マニフェストファイルをエディタで表示する』にチェックを付けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1546&quot; height=&quot;867&quot; src=&quot;/_astro/11.Du99t9BD_Z2q4Smn.webp&quot; srcset=&quot;/_astro/11.Du99t9BD_Z1fyQUz.webp 640w, /_astro/11.Du99t9BD_ZGfXAB.webp 750w, /_astro/11.Du99t9BD_Z1sarsW.webp 828w, /_astro/11.Du99t9BD_2mihAW.webp 1080w, /_astro/11.Du99t9BD_Z1GxkiN.webp 1280w, /_astro/11.Du99t9BD_Z2q4Smn.webp 1546w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、&lt;code&gt;appsscript.json&lt;/code&gt;というファイルが編集できるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;224&quot; src=&quot;/_astro/15.qmV4CqJT_Z2i43UY.webp&quot; srcset=&quot;/_astro/15.qmV4CqJT_Z2i43UY.webp 320w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;appsscript.jsonを編集する&lt;a href=&quot;#appsscriptjsonを編集する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;appsscript.json&lt;/code&gt;を開くと、色々なフィールドに対して設定が書かれていると思いますが、そのファイルの中に、&lt;code&gt;&quot;oauthScopes&quot;&lt;/code&gt;フィールドを追加して OAuth スコープを明示していきます。&lt;/p&gt;&lt;p&gt;例えば、さっきのように、認証画面でこのように表示されていた場合・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;534&quot; height=&quot;555&quot; src=&quot;/_astro/12.CjyjyfuA_272e7V.webp&quot; srcset=&quot;/_astro/12.CjyjyfuA_272e7V.webp 534w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これらのスコープを加える必要があるでしょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;timeZone&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;exceptionLogging&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;STACKDRIVER&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;runtimeVersion&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;V8&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;oauthScopes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/drive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/documents&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/calendar/feeds&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.external_request&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.container.ui&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;一部、別サイトに載っているスコープがある・・・&lt;a href=&quot;#一部別サイトに載っているスコープがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google ドライブ、ドキュメント、スプレッドシートや Google カレンダーは、前節で挙げたスコープのリファレンスに載っているので比較的分かりやすいです。&lt;/p&gt;&lt;p&gt;しかし、「外部サービスへの接続」、「Googleアプリケーション内のプロンプトとサイドバーで、サードパーティのウェブコンテンツを表示、実行します」の項目はいまいちどのスコープで明示できるのかが分かりません・・・&lt;/p&gt;&lt;p&gt;それもそうです。なぜならば、先程挙げたスコープのリファレンスには載っていません。&lt;/p&gt;&lt;p&gt;まず、「外部サービスへの接続」なのですが、このスコープは別にあるスコープのリファレンスに載っています。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/workspace/add-ons/concepts/workspace-scopes&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Scopes | Google Workspace add-ons | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;おそらく、「Other scopes」の部分で、発見できるかと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;timeZone&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;exceptionLogging&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;STACKDRIVER&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;runtimeVersion&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;V8&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;oauthScopes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/drive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/documents&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/calendar/feeds&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.external_request&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// &amp;lt;- This is it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.container.ui&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;そして、また別のサイトに載っているスコープがある・・・&lt;a href=&quot;#そしてまた別のサイトに載っているスコープがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、「Googleアプリケーション内のプロンプトとサイドバーで、サードパーティのウェブコンテンツを表示、実行します」の項目なのですが、このスコープのリファレンスはまた別の場所で掲載されています・・・&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/workspace/add-ons/concepts/editor-scopes?hl=it&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Ambiti di autorizzazione per i componenti aggiuntivi dell&apos;editor | Google Workspace Add-ons | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このような記述が発見できたかと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;oauthScopes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.container.ui&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;なので、&lt;code&gt;appsscript.json&lt;/code&gt;の&lt;code&gt;&quot;oauthScopes&quot;&lt;/code&gt;の中身はこのようになるでしょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;timeZone&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;exceptionLogging&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;STACKDRIVER&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;runtimeVersion&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;V8&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;oauthScopes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/drive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/documents&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/calendar/feeds&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.external_request&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.container.ui&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// &amp;lt;- This is it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets.currentonly&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// &amp;lt;- This is it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;と、なると思うのですが、実際のところ、やりたいこととは少し違ってきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;currentonlyをスコープに含めると結局認証プロセスが走ってしまう&lt;a href=&quot;#currentonlyをスコープに含めると結局認証プロセスが走ってしまう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;currentonly&lt;/code&gt;があるスコープは、ざっと挙げると以下のものになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/documents.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/presentations.currentonly&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、これらのスコープを&lt;code&gt;appsscript.json&lt;/code&gt;に含めてしまうと、結局例の認証画面を開いて認証しなければならなくなりますので、今回はこれらのスコープは省きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;timeZone&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;exceptionLogging&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;STACKDRIVER&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;runtimeVersion&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;V8&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;oauthScopes&quot;&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/drive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/documents&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/spreadsheets&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/calendar/feeds&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.external_request&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/script.container.ui&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// &amp;lt;- This is it only!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そして、実行！&lt;a href=&quot;#そして実行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、編集した&lt;code&gt;appsscript.json&lt;/code&gt;が保存されていれば、認証するためのクドい画面はもう出てこなくなるはずです。&lt;/p&gt;&lt;p&gt;しかし、 GAS プロジェクトを作成してから最初の実行時は、もしかしたら認証プロセスが必ず走るかもしれません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script (GAS) でOAuth認証プロセスを省略するためのスコープ設定方法を紹介しました。&lt;/p&gt;&lt;p&gt;本記事は、以下の流れで書かれました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;GCP プロジェクトの設定確認&lt;/li&gt;
&lt;li&gt;認証を省略したいスコープを担う API の有効化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;appsscript.json&lt;/code&gt;ファイルの設定方法&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;しかしながら、スコープの掲載場所が分かれていて探すのに苦労しました・・・&lt;/p&gt;&lt;p&gt;個人的には、もう、スコープは全部同じ場所に一覧で表示していてもらいたいです・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptの関連書籍&lt;a href=&quot;#google-apps-scriptの関連書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script Webアプリ開発 第4版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script クローリング＆スクレイピングのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、設定できてしまえば、これはかなり快適かもしれない&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;クドかったからなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub Actions、Bash】curlでPOSTする時のJSONの書き方いろいろ</title><link>https://endorphinbath.com/posts/github-actions-bash-curl-json-to-post/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-actions-bash-curl-json-to-post/</guid><description>GitHub Actionsでcurlを使い、JSON形式でPOSTする方法は、直接書き込み、ファイル使用、jq利用、変数を利用するなどがあります。</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわあ、どこが悪いんだろおおう&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はBashか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;文法が違うことは分かるんだけど・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どこだっどこだ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;起きた事象&lt;a href=&quot;#起きた事象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GitHub Actions を使って、別の API に対して&lt;code&gt;curl&lt;/code&gt;を試そうとした時の事です&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Record log&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;curl &apos;${{ env.API_ENDPOINT }}?scriptname=${{ env.MY_SCRIPT_NAME }}&amp;amp;function-name=${{ env.THIS_FUNCTION_NAME }}&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-X POST \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-d &apos;{&quot;path&quot;: &quot;/log&quot;, &quot;method&quot;: &quot;POST&quot;, &quot;client_info&quot;: {&quot;id&quot;: &quot;${{ env.CLIENT_ID }}&quot;, &quot;secret&quot;: &quot;${{ env.CLIENT_SECRET }}&quot;}}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラー文:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: POST-H&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl: (3) URL using bad/illegal format or missing URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl: (3) nested brace in URL position 51:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&quot;path&quot;: &quot;/log&quot;, &quot;method&quot;: &quot;POST&quot;, &quot;client_info&quot;: {&quot;id&quot;: &quot;***&quot;, &quot;secret&quot;: &quot;***&quot;}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                                  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Error: Process completed with exit code 3.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が原因だあ？&lt;a href=&quot;#何が原因だあ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原因は・・・&lt;/p&gt;&lt;p&gt;改行の前に半角スペースを入れてないからでした🐽&lt;/p&gt;&lt;p&gt;これが正解。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Record log&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;curl &apos;${{ env.API_ENDPOINT }}?scriptname=${{ env.MY_SCRIPT_NAME }}&amp;amp;function-name=${{ env.THIS_FUNCTION_NAME }}&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-X POST \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-H &quot;Content-Type: application/json&quot; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-d &apos;{&quot;path&quot;: &quot;/log&quot;, &quot;method&quot;: &quot;POST&quot;, &quot;client_info&quot;: {&quot;id&quot;: &quot;${{ env.CLIENT_ID }}&quot;, &quot;secret&quot;: &quot;${{ env.CLIENT_SECRET }}&quot;}}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;なるほど、&lt;code&gt;-H&lt;/code&gt;ヘッダーの部分を読み取れないというのはそういうことでしたか。&lt;/p&gt;&lt;p&gt;&lt;code&gt;curl&lt;/code&gt;で JSON を書くと煩雑で混乱しがちになります・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああら、そんなことかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;つい、データ部に目が行っちゃうよな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub Actions、Bash】「curl: (3) URL using bad/illegal format or missing URL」「curl: (3) nested brace in URL」といったエラーメッセージが出た時に試したこと</title><link>https://endorphinbath.com/posts/github-actions-curl-error-01/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-actions-curl-error-01/</guid><description>GitHub Actionsでcurlを叩いたときに遭遇したエラーを対処した時の記事になります。うっかりエラーですが、bash初心者だと陥りやすいと思ってこの記事を書きました。</description><pubDate>Sun, 10 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ、GitHub Actionsだとそうなるんだ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Bashかあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;エスケープしなくて良くなるなあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;記法が少し増えるんだよなあ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;curlコマンド&lt;a href=&quot;#curlコマンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Bash の&lt;code&gt;curl&lt;/code&gt;コマンドは 、API にリクエストする時に便利なコマンドです。&lt;/p&gt;&lt;p&gt;そして、それを使って、 JSON 形式のデータを POST する方法は多岐にわたります。&lt;/p&gt;&lt;p&gt;GitHub Actions を利用する方法も踏まえて、見ていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本の書き方&lt;a href=&quot;#基本の書き方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、基本的な書き方は、&lt;code&gt;curl&lt;/code&gt;コマンドの&lt;code&gt;-d&lt;/code&gt;オプションまたは&lt;code&gt;--data&lt;/code&gt;オプションを使用して JSON データを直接書き込むことです。この際、&lt;code&gt;Content-Type&lt;/code&gt;ヘッダーに&lt;code&gt;application/json&lt;/code&gt;を指定する必要があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{&quot;key&quot;: &quot;value&quot;}&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;データファイルを使用する&lt;a href=&quot;#データファイルを使用する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;JSON データが複雑になってくる場合、外部ファイルに JSON を保存して、&lt;code&gt;-d&lt;/code&gt;オプションにファイルを指定することで POST データとして使用できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;data.json&lt;/code&gt;は、送信したい JSON データを含むファイルのことです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@data.json&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;jqを使う&lt;a href=&quot;#jqを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;jq&lt;/code&gt;は JSON を扱うためのコマンドラインツールであり、データ部を切り離して考えることが出来ます。&lt;/p&gt;&lt;p&gt;GitHub Actions の実行環境では&lt;code&gt;jq&lt;/code&gt;がプリインストールされていて、すぐに利用できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{key: &quot;value&quot;}&apos;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;環境変数やシェル変数を使用する&lt;a href=&quot;#環境変数やシェル変数を使用する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;シェルスクリプト内の変数や、 GitHub Actions の環境変数を JSON データに含めることができます。これには&lt;code&gt;env&lt;/code&gt;コマンドを利用したり、シェルの変数置換機能を活用します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;{&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;$YOUR_VARIABLE&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GitHub Actionsのシークレットや環境変数を利用する&lt;a href=&quot;#github-actionsのシークレットや環境変数を利用する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、&lt;code&gt;$&lt;/code&gt;を使った記法は、ダブルクォーテーションをエスケープする必要性が出てきてしまいます。&lt;/p&gt;&lt;p&gt;僕が、 GitHub Actions を編集している時のリゾルバ的なやつに注意された時、結局どこが悪いのかが分からなくなったこととか普通にあります・・・。&lt;/p&gt;&lt;p&gt;そのため、 GitHub Actions を編集する際には、シェルスクリプト内の変数をJSONデータに含める際に、&lt;code&gt;$&lt;/code&gt;を使った記法を使うよりも可読性が上がる書き方があります。&lt;/p&gt;&lt;p&gt;GitHub Actions の&lt;code&gt;secrets&lt;/code&gt;を利用する場合の記法。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{&quot;key&quot;: &quot;${{ secrets.YOUR_SECRET }}&quot;}&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;シェル内の環境変数利用する場合の記法はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{&quot;key&quot;: &quot;${{ env.YOUR_SECRET }}&quot;}&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://example.com/api&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この書き方であれば、ダブルクォーテーションをエスケープする必要がなくなるので、読みやすいコマンドになってより安全により速くコードをチェックできますね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GitHub Actions で&lt;code&gt;curl&lt;/code&gt;を使用して JSON データを POST する方法は、シンプルなものから複雑なデータ構造を扱うものまで様々です。シナリオに応じて最適な方法を選択し、外部APIとの連携を効率的に行いましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだこれは視力検査かァ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ただでさえ見にくいJSONを、さらに見にくいBashで編集する修行・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】スプレッドシートに入力したキーワードで検索してヒットした画像をGoogleドライブに保存する</title><link>https://endorphinbath.com/posts/gas-search-to-save-images/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-search-to-save-images/</guid><description>Google Apps ScriptでGoogle Spreadsheetに入力した文字で画像検索し、結果をGoogleドライブに保存する処理を書きます。Custom Search APIを使います。</description><pubDate>Sat, 09 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これ1個ずつ検索してダウンロードするの面倒くさいなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;300個あるもんなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はああ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっとでも作業を減らせれば良いなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;概要&lt;a href=&quot;#概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、 Google Apps Script （GAS）を使って、 Google のサービスを自動化していきます。&lt;/p&gt;&lt;p&gt;実装する処理の目的は、アプリのロゴをなるべく自動で集めて楽をすることです。&lt;/p&gt;&lt;p&gt;そこで、 GAS を使用してスプレッドシートに入力されたキーワードに基づいて画像を検索し、見つかった最初の画像を Google ドライブに自動的に保存する処理を作っていきます。
どれぐらい行けそうなものか試してみましょう。&lt;/p&gt;&lt;p&gt;こんな風に入力して、
&lt;img loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;512&quot; src=&quot;/_astro/00_01.Dm6FIrpG_Z1RVgP4.webp&quot; srcset=&quot;/_astro/00_01.Dm6FIrpG_ZxDPOI.webp 640w, /_astro/00_01.Dm6FIrpG_25FEOx.webp 750w, /_astro/00_01.Dm6FIrpG_1jpkBG.webp 828w, /_astro/00_01.Dm6FIrpG_Z1RVgP4.webp 915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな風に画像が保存されることを期待します。
&lt;img loading=&quot;lazy&quot; width=&quot;1582&quot; height=&quot;768&quot; src=&quot;/_astro/00_02.CG6fnH9l_1g9oNo.webp&quot; srcset=&quot;/_astro/00_02.CG6fnH9l_2cEcnI.webp 640w, /_astro/00_02.CG6fnH9l_184dHy.webp 750w, /_astro/00_02.CG6fnH9l_1oBT4f.webp 828w, /_astro/00_02.CG6fnH9l_ZicVNy.webp 1080w, /_astro/00_02.CG6fnH9l_Z1lJnp3.webp 1280w, /_astro/00_02.CG6fnH9l_1g9oNo.webp 1582w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前準備&lt;a href=&quot;#前準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;スクリプトを書く前に、諸々と準備が必要です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Custom Search API を有効にする。&lt;/li&gt;
&lt;li&gt;API キーを入手する。&lt;/li&gt;
&lt;li&gt;カスタム検索エンジン（Custom Search Engine）を設定する。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;Custom Search APIを有効にする&lt;a href=&quot;#custom-search-apiを有効にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、 Google Cloud Platform のコンソール画面で、「Custom Search API」というものを有効にします。&lt;/p&gt;&lt;p&gt;「APIとサービス」＞「ライブラリ」と遷移して、検索します。
&lt;img loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;615&quot; src=&quot;/_astro/01.B9qSTqxN_Z1gHWbP.webp&quot; srcset=&quot;/_astro/01.B9qSTqxN_1ALDtw.webp 640w, /_astro/01.B9qSTqxN_Z29zsDO.webp 750w, /_astro/01.B9qSTqxN_2skLzQ.webp 828w, /_astro/01.B9qSTqxN_Z2i61Yy.webp 1080w, /_astro/01.B9qSTqxN_Z1gHWbP.webp 1254w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「Custom Search API」が有効になっていることを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;905&quot; height=&quot;493&quot; src=&quot;/_astro/02.CVbCRpYF_ZhrVFo.webp&quot; srcset=&quot;/_astro/02.CVbCRpYF_Z26synf.webp 640w, /_astro/02.CVbCRpYF_Z1gmuOw.webp 750w, /_astro/02.CVbCRpYF_J7xmR.webp 828w, /_astro/02.CVbCRpYF_ZhrVFo.webp 905w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;APIキーを入手する&lt;a href=&quot;#apiキーを入手する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、この Custom Search API を利用するためのAPIキーを入手しましょう。&lt;/p&gt;&lt;p&gt;「APIとサービス」＞「認証情報」と遷移した先の画面で、「認証情報を作成」をクリックして、「APIキー」を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;875&quot; height=&quot;173&quot; src=&quot;/_astro/03.C9kF0R5w_1TP9HY.webp&quot; srcset=&quot;/_astro/03.C9kF0R5w_Z1UsnVD.webp 640w, /_astro/03.C9kF0R5w_Z1PsKed.webp 750w, /_astro/03.C9kF0R5w_2sAG05.webp 828w, /_astro/03.C9kF0R5w_1TP9HY.webp 875w&quot; /&gt;&lt;/p&gt;&lt;p&gt;API キーが作成されたら編集します。
デフォルトでは、プロジェクトで有効にしている全ての API にアクセスできるようになっていると思うので、 1 つの API キーで利用できる API を一つに限定させます。&lt;/p&gt;&lt;p&gt;「APIの制限」の部分で、「Custom Search API」だけを選択して保存します。
&lt;img loading=&quot;lazy&quot; width=&quot;1558&quot; height=&quot;853&quot; src=&quot;/_astro/04.E04BOKdN_ZEsooY.webp&quot; srcset=&quot;/_astro/04.E04BOKdN_gOGqF.webp 640w, /_astro/04.E04BOKdN_Z1LTNED.webp 750w, /_astro/04.E04BOKdN_Z1XMLVR.webp 828w, /_astro/04.E04BOKdN_Zhi2cg.webp 1080w, /_astro/04.E04BOKdN_Z2v23BJ.webp 1280w, /_astro/04.E04BOKdN_ZEsooY.webp 1558w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、この API キーは Custom Search API しか利用できないキーになりました。セキュリティセキュリティ。
「API Key」にある値は、後で使います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カスタム検索エンジン（Custom Search Engine）を設定する&lt;a href=&quot;#カスタム検索エンジンcustom-search-engineを設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、この準備も必要です。&lt;/p&gt;&lt;p&gt;「カスタム検索エンジン」というものを作ることで、スクリプトで実行する検索方法を設定します。&lt;/p&gt;&lt;p&gt;まずは、以下のサイトに飛んで、「使ってみる」を選びます。&lt;/p&gt;&lt;a href=&quot;https://programmablesearchengine.google.com/intl/ja_jp/about/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.google.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google のプログラム可能な検索エンジン&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google のプログラム可能な検索エンジン&lt;/div&gt;&lt;div&gt;ウェブサイトを訪れた人たちが、必要なものを簡単に検索できるようにしましょう。カスタマイズ可能な検索ボックスをウェブページに追加し、Google の技術を活用して関連性の高い検索結果をすばやく提供できます。&lt;/div&gt;&lt;div&gt;programmablesearchengine.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://programmablesearchengine.google.com/about/social_banner.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、カスタム検索エンジンを作ります。&lt;/p&gt;&lt;p&gt;ここで忘れてはならないのが、「検索設定」の部分で「画像検索」を ON にすることです！
&lt;img loading=&quot;lazy&quot; width=&quot;1709&quot; height=&quot;896&quot; src=&quot;/_astro/05.DEn-0mn2_2gAAo7.webp&quot; srcset=&quot;/_astro/05.DEn-0mn2_ZpOTja.webp 640w, /_astro/05.DEn-0mn2_2n0vBt.webp 750w, /_astro/05.DEn-0mn2_bE7fR.webp 828w, /_astro/05.DEn-0mn2_Z1A0OAg.webp 1080w, /_astro/05.DEn-0mn2_1XT38o.webp 1280w, /_astro/05.DEn-0mn2_Z135dVz.webp 1668w, /_astro/05.DEn-0mn2_2gAAo7.webp 1709w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちゃんと「画像検索」が ON になっているカスタム検索エンジンが作成できたら、そのエンジンの「検索エンジンID」をメモります。後で使います。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スプレッドシートの準備&lt;a href=&quot;#スプレッドシートの準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そうしたら、事前準備は終わったので、 GAS を実装していきましょう。&lt;/p&gt;&lt;p&gt;今回は、スプレッドシート上に入力したキーワードで検索するので、スプレッドシート上に入力部を準備します。&lt;/p&gt;&lt;p&gt;こんな感じの入力部分を作ります。今回は 2 列分作ります。
&lt;img loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;463&quot; src=&quot;/_astro/06.C8oebLM-_Z1w8R7p.webp&quot; srcset=&quot;/_astro/06.C8oebLM-_ZkJgGp.webp 640w, /_astro/06.C8oebLM-_ulLQj.webp 750w, /_astro/06.C8oebLM-_ZoFBd5.webp 828w, /_astro/06.C8oebLM-_Z1w8R7p.webp 838w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、冒頭のようにキーワードを並べていきます。
右側には、保存する画像ファイルの名前を入力します。拡張子は除いた形です。
&lt;img loading=&quot;lazy&quot; width=&quot;915&quot; height=&quot;512&quot; src=&quot;/_astro/00_01.Dm6FIrpG_Z1RVgP4.webp&quot; srcset=&quot;/_astro/00_01.Dm6FIrpG_ZxDPOI.webp 640w, /_astro/00_01.Dm6FIrpG_25FEOx.webp 750w, /_astro/00_01.Dm6FIrpG_1jpkBG.webp 828w, /_astro/00_01.Dm6FIrpG_Z1RVgP4.webp 915w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの実装&lt;a href=&quot;#スクリプトの実装&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、やっとスクリプトを実装していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;処理の概要&lt;a href=&quot;#処理の概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、処理の本流になります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check whether the element is an empty value.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkEmpty&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check whether empty element is existing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isEmptyExisting&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;empties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;checkEmpty&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;empties&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Search by keywords specified in the sheet and save into the Google Drive.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchToSaveImageToDrive&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folderIdToSaveLogoBySearching&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FOLDER_ID_TO_SAVE_LOGO_BY_SEARCHING&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_6TH&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ROW_INDEX_5TH_TO_START_OUTPUTING_RECORDS&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startColumn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLUMN_INDEX_5TH_OF_FILE_LIST_TO_SAVE_IMAGE_BY_SEARCH&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;isEmptyExisting&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gottenBlobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchByKeywordToGetImages&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;gottenBlobs&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;saveImageFiles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gottenBlobs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createImageFilesFromBlobs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;folderIdToSaveLogoBySearching&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;saveImageFiles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;saveImageFiles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkEmpty&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;saveImageFiles&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myPromise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;recordLog&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MY_SCRIPT_NAME&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;searchToSaveImageToDrive&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folderUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://drive.google.com/drive/folders/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;folderIdToSaveLogoBySearching&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Saving Files By Searching Terminated...&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`&amp;lt;h2&amp;gt;Done.&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;saveImageFiles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; images saved in &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getHref&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;this folder&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchToSaveImageToDrive: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;処理流れとしては、以下の2部構成です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;画像検索の処理&lt;/li&gt;
&lt;li&gt;画像を取得して Google ドライブに保存する処理&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画像検索の処理&lt;a href=&quot;#画像検索の処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、&lt;code&gt;gottenBlobs&lt;/code&gt;という配列に画像検索してヒットした画像の Blob オブジェクトを含む情報を格納していきます。&lt;/p&gt;&lt;p&gt;この行の処理で、スプレッドシートからキーワードとファイル名を取得します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;また、&lt;code&gt;checkEmpty()&lt;/code&gt;や&lt;code&gt;isEmptyExisting()&lt;/code&gt;という関数は、&lt;code&gt;null&lt;/code&gt;や&lt;code&gt;&quot;&quot;&lt;/code&gt;（空文字）になっている要素を省くために使います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check whether the element is an empty value.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkEmpty&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Check whether empty element is existing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isEmptyExisting&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;empties&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;checkEmpty&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;empties&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そしたら、この処理で Blob オブジェクトを含んだオブジェクトの配列を取得します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gottenBlobs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchByKeywordToGetImages&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;rec&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;まずは、&lt;code&gt;searchByKeywordToGetImages()&lt;/code&gt;の処理はこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Search by specified keyword to get blob object.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyword&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gettingBlobName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any{}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchByKeywordToGetImages&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;keyword&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;gettingBlobName&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API_KEY_TO_SEARCH_BY_CUSTOM_SEARCH_API&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchEngineId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SEARCH_ENGINE_ID_TO_SAVE_IMAGE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blob&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;blobFullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywordToSearch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyword&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;+&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;replaceAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;+&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;keywordToSearch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;encodeURIComponent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;keywordToSearch&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;+logo`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;searchUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`https://www.googleapis.com/customsearch/v1?q=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;keywordToSearch&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;amp;cx=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;searchEngineId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;amp;searchType=image&amp;amp;key=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;amp;num=1`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;searchUrl&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;blob&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchByKeywordToGetImages: eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;link&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageResponse&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageUrl&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;blob&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blob&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBlob&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blob&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchByKeywordToGetImages: gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 元の画像のURLからファイルの拡張子を取得します&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageUrl&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;imageUrl&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;lastIndexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;.&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 拡張子がある場合、クエリパラメーターまたは他のパスの一部を含まないようにします&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;?&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;?&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 拡張子らしき文字列が6文字以上もしくは拡張子が正しく取得できない場合は、デフォルトとして.jpgを使用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;.jpg&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blobFullName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;gettingBlobName&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobFullName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchByKeywordToGetImages: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;No images found for: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywordToSearch&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchByKeywordToGetImages: jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`searchByKeywordToGetImages: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;blob&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blob&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blobFullName&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;画像検索をする流れは以下です。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;半角スペースと全角スペースを考慮した検索文字列にする。&lt;/li&gt;
&lt;li&gt;その検索文字列に&lt;code&gt;logo&lt;/code&gt;というキーワードも追加して、ロゴが画像検索にヒットしやすくする。&lt;/li&gt;
&lt;li&gt;検索用 URL が出来たら、&lt;code&gt;UrlFetchApp.fetch()&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;li&gt;検索結果から、最初にヒットした画像がある URL を取得する。&lt;/li&gt;
&lt;li&gt;再び、&lt;code&gt;UrlFetchApp.fetch()&lt;/code&gt;を実行して、画像のデータを取得する。&lt;/li&gt;
&lt;li&gt;取得した画像にファイル名を付ける。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Blobオブジェクト&lt;/code&gt;と&lt;code&gt;ファイル名&lt;/code&gt;を返す。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;特に、「取得した画像にファイル名を付ける。」処理ですが、その処理は以下の流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ここではまず、元々の画像の拡張子を取得します。&lt;/li&gt;
&lt;li&gt;しかし、 URL から取得した拡張子にはクエリパラメータが含まれている可能性があるので、クエリパラメーターを削ります。&lt;/li&gt;
&lt;li&gt;そして、クエリパラメーターが削られたら、&lt;code&gt;.jpeg&lt;/code&gt;とか&lt;code&gt;.png&lt;/code&gt;とか&lt;code&gt;.webp&lt;/code&gt;といった拡張子が来ることを期待しますが、ファイル名に&lt;code&gt;.&lt;/code&gt;が含まれていてちゃんと取得できない可能性があります。&lt;/li&gt;
&lt;li&gt;そこで、拡張子が 6 文字以上だったら、&lt;code&gt;.jpg&lt;/code&gt;で拡張子を決定します。（画像フォーマットだったら大体このくらいの長さでいいんじゃないでしょうか。）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;code&gt;.&lt;/code&gt;を考慮しないと、こんな画像ファイルが生まれてきてしまうので、
&lt;img loading=&quot;lazy&quot; width=&quot;943&quot; height=&quot;245&quot; src=&quot;/_astro/07.DA8vEwTB_taOfh.webp&quot; srcset=&quot;/_astro/07.DA8vEwTB_Z18jTdD.webp 640w, /_astro/07.DA8vEwTB_Z1U6HIB.webp 750w, /_astro/07.DA8vEwTB_15lmWH.webp 828w, /_astro/07.DA8vEwTB_taOfh.webp 943w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;.&lt;/code&gt;の長さを考慮することにします。
&lt;img loading=&quot;lazy&quot; width=&quot;810&quot; height=&quot;240&quot; src=&quot;/_astro/08.l4g8Dz9K_Z2hANzp.webp&quot; srcset=&quot;/_astro/08.l4g8Dz9K_sDfHo.webp 640w, /_astro/08.l4g8Dz9K_Z1KCn9c.webp 750w, /_astro/08.l4g8Dz9K_Z2hANzp.webp 810w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、画像を保存する下地は出来ました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画像を取得してGoogleドライブに保存する処理&lt;a href=&quot;#画像を取得してgoogleドライブに保存する処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;画像オブジェクトを Google ドライブに保存します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Create image files into the Google Drive.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{DriveApp.File}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createImageFilesFromBlobs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;FOLDER_ID_TO_SAVE_LOGO_BY_SEARCHING&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createImageFilesFromBlobs: eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[object Null]&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createFile&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;blobInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;blob&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;setName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;moveTo&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createImageFilesFromBlobs: iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Image saved to Drive with name: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`createImageFilesFromBlobs: kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ここではもう、渡されたオブジェクトをファイルオブジェクトのプロパティに割り当てているだけになります。&lt;/p&gt;&lt;p&gt;これで、画像が目当ての Google ドライブフォルダの中に保存されました！
&lt;img loading=&quot;lazy&quot; width=&quot;1582&quot; height=&quot;768&quot; src=&quot;/_astro/00_02.CG6fnH9l_1g9oNo.webp&quot; srcset=&quot;/_astro/00_02.CG6fnH9l_2cEcnI.webp 640w, /_astro/00_02.CG6fnH9l_184dHy.webp 750w, /_astro/00_02.CG6fnH9l_1oBT4f.webp 828w, /_astro/00_02.CG6fnH9l_ZicVNy.webp 1080w, /_astro/00_02.CG6fnH9l_Z1lJnp3.webp 1280w, /_astro/00_02.CG6fnH9l_1g9oNo.webp 1582w&quot; /&gt;&lt;/p&gt;&lt;p&gt;処理の本流にある&lt;code&gt;displayHtml()&lt;/code&gt;という処理では、何個のファイルが保存されたかを表示しています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;displayHtml(&quot;index_html&quot;, &quot;Saving Files By Searching Terminated...&quot;, `&amp;lt;h2&amp;gt;Done.&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;${saveImageFiles.length} images saved in ${getHref(folderUrl, &quot;this folder&quot;)}.&amp;lt;/p&amp;gt;`);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1173&quot; height=&quot;524&quot; src=&quot;/_astro/09.Cx5byuXo_7nV6o.webp&quot; srcset=&quot;/_astro/09.Cx5byuXo_Z1w41qy.webp 640w, /_astro/09.Cx5byuXo_6ozx7.webp 750w, /_astro/09.Cx5byuXo_Z19v1pf.webp 828w, /_astro/09.Cx5byuXo_2tIA9n.webp 1080w, /_astro/09.Cx5byuXo_7nV6o.webp 1173w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;じゃあ、どれぐらいロゴが保存できるんだろう？&lt;a href=&quot;#じゃあどれぐらいロゴが保存できるんだろう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さて、処理が出来たところで、この画像検索による処理の精度が気になってきます。&lt;/p&gt;&lt;p&gt;Google ドライブで画像を一覧で眺めてみると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1666&quot; height=&quot;793&quot; src=&quot;/_astro/10.tDJG9uco_Z26chqu.webp&quot; srcset=&quot;/_astro/10.tDJG9uco_1er71l.webp 640w, /_astro/10.tDJG9uco_Z1mQYUL.webp 750w, /_astro/10.tDJG9uco_1imwJz.webp 828w, /_astro/10.tDJG9uco_1CU2NG.webp 1080w, /_astro/10.tDJG9uco_b4T7k.webp 1280w, /_astro/10.tDJG9uco_Z26chqu.webp 1666w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ふむふむ、なるほど・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1668&quot; height=&quot;789&quot; src=&quot;/_astro/11.Dm1BmJ7n_Z1kBO3q.webp&quot; srcset=&quot;/_astro/11.Dm1BmJ7n_2tVrCx.webp 640w, /_astro/11.Dm1BmJ7n_Z7mEjz.webp 750w, /_astro/11.Dm1BmJ7n_Z2wkgsa.webp 828w, /_astro/11.Dm1BmJ7n_2mTt44.webp 1080w, /_astro/11.Dm1BmJ7n_Z1BWGxt.webp 1280w, /_astro/11.Dm1BmJ7n_Z1kBO3q.webp 1668w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、画像検索のロゴを取得する精度としては、 50 ～ 60 点というところでしょうか。&lt;/p&gt;&lt;p&gt;個人的には、以下の点がまだ至っていないなあと思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;文字が入っていないロゴが欲しい。&lt;/li&gt;
&lt;li&gt;少しマイナーなサービスだと厳しいかなあ。&lt;/li&gt;
&lt;li&gt;なんか画像じゃないファイルが混ざってる・・・（これは、画像検索処理で結果を複数取得して、先頭から画像かどうかで処理を分岐させれば回避できそうですね。）&lt;/li&gt;
&lt;li&gt;あと、画像の取得処理が遅い！（非同期にすれば全然速くなりそうです。）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これで、スプレッドシートに入力されたキーワードで画像を検索し、ヒットした最初の画像を Google ドライブに自動で保存する機能が一旦完成しました。&lt;/p&gt;&lt;p&gt;本記事は、以下の流れで書かれました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Custom Search API の有効化&lt;/li&gt;
&lt;li&gt;API キーの取得&lt;/li&gt;
&lt;li&gt;カスタム検索エンジンの設定&lt;/li&gt;
&lt;li&gt;Google スプレッドシートの準備&lt;/li&gt;
&lt;li&gt;GAS スクリプトの実装（画像検索して画像を取得）&lt;/li&gt;
&lt;li&gt;GAS スクリプトの実装（取得した画像を Google ドライブに保存）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Google のポリシーと利用規約や、 API の使用制限、クォータなどにも気を付けて使ってみましょう。保存される画像の使用範囲や著作権にも注意ですね。（ちなみに、 Custom Search API は、1 日 100 リクエストより多くリクエストすると有料になります。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、作業が半分以上は減ったと思うと悪くないかなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;手頃に作りました。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年02月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202402/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202402/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Terra Nilのシリーズが更新されて完結しました。</description><pubDate>Fri, 08 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年2月に投稿した動画の一覧&lt;a href=&quot;#2024年2月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：8&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】フラフラと現れるフラミンゴ #06【ゆっくり実況】&lt;a href=&quot;#terra-nilフラフラと現れるフラミンゴ-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/QuXsmIPgkCI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】グラグラと揺れるグラドルが如く地表 #07【ゆっくり実況】&lt;a href=&quot;#terra-nilグラグラと揺れるグラドルが如く地表-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KefyKR9HnQw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】モルィモルィと生えていく藻類 #08【ゆっくり実況】&lt;a href=&quot;#terra-nilモルィモルィと生えていく藻類-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5sqZMiEIiTg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】ペンペン草みたいに生えてくるペンギン #09【ゆっくり実況】&lt;a href=&quot;#terra-nilペンペン草みたいに生えてくるペンギン-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/604Cs2XeMyc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】モリモリと積まれていく盛土 #10【ゆっくり実況】&lt;a href=&quot;#terra-nilモリモリと積まれていく盛土-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gCoUXAXxbZ0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】タケダケしい竹 #11【ゆっくり実況】&lt;a href=&quot;#terra-nilタケダケしい竹-11ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/WF7bOb4Nc5k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】パンパンに肥えているパンダ #12【ゆっくり実況】&lt;a href=&quot;#terra-nilパンパンに肥えているパンダ-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/g9XZvDRuOlM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】ドロドロになりながら働くドローンは刻々とコックピットを完成させる #13（完）【ゆっくり実況】&lt;a href=&quot;#terra-nilドロドロになりながら働くドローンは刻々とコックピットを完成させる-13完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/02/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/UDt5nr4Vfn8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は8本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】「We&apos;re sorry, a server error occurred while reading from storage. Error code NOT_FOUND.」というエラーメッセージが出てきた時。</title><link>https://endorphinbath.com/posts/gas-error-code-not-found/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-error-code-not-found/</guid><description>Google Apps Scriptを使用した時に、「Error code NOT_FOUND」エラーに直面したときの体験談になります。</description><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何このエラー・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何か起きた？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スプレッドシートのメニューにもUIが表示されないし、あまつさえ、スクリプトエディタからもGASが実行できないんだよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんじゃそりゃあ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;概要&lt;a href=&quot;#概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script （GAS） を使用している際に、&lt;code&gt;We&apos;re sorry, a server error occurred while reading from storage. Error code NOT_FOUND.&lt;/code&gt;というエラーメッセージに直面したことはありますか？&lt;/p&gt;&lt;p&gt;このメッセージは、スクリプトがストレージから読み出しを行う過程でサーバー側のエラーが発生したことを示しています。&lt;/p&gt;&lt;p&gt;以下が、本メッセージでググったときに、考えうる対策案になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;V8 ランタイムが有効である。&lt;/li&gt;
&lt;li&gt;ライブラリに developer モードのものがある。&lt;/li&gt;
&lt;li&gt;スクリプトのオーナー以外のユーザーによる実行である。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;しかし、僕の場合は、いずれのケースにも当てはまりませんでした。&lt;/p&gt;&lt;p&gt;今回、僕が遭遇した事象では、一部のスプシだけで発生していて、発生していないスプシでは developer モードのライブラリも参照していました。&lt;/p&gt;&lt;p&gt;スクリプトのオーナーもちゃんと自分だったし、 V8 も大丈夫。キャッシュが何か悪さをしているのかと思い、別のブラウザでもログインしてみましたが、それでも動きませんでした。&lt;/p&gt;&lt;p&gt;シートを作り直して、 Git からソースを丸ごと pull してもダメ・・・。何が悪いんだ？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;じゃあ、何が原因だったの？&lt;a href=&quot;#じゃあ何が原因だったの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;簡単に原因を言います。&lt;/p&gt;&lt;p&gt;それは、そのスクリプトが「参照しているライブラリが参照しているライブラリが存在しなかった」ためです。&lt;/p&gt;&lt;p&gt;なので、ライブラリの参照部分をちゃんと直してあげれば解消しました・・・。&lt;/p&gt;&lt;p&gt;あんまりライブラリの参照をネストさせるのはやめておこう、と思った次第でした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptの関連書籍&lt;a href=&quot;#google-apps-scriptの関連書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script Webアプリ開発 第4版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script クローリング＆スクレイピングのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;わぁけ分かんなかったなあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ブラックボックス化されていると手強いな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Googleカレンダーに曜日を指定してスケジュールを登録するスプレッドシートの構築</title><link>https://endorphinbath.com/posts/gas-scheduling-googlecalendar-02/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-scheduling-googlecalendar-02/</guid><description>Google Apps Scriptを使い、スプレッドシートからGoogleカレンダーに曜日指定でスケジュールを追加するシステムを作りました。繰り返し入力する版と個別に入力する版があります。</description><pubDate>Thu, 29 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はGoogleカレンダーへのスケジュールの登録を楽にするスクリプトを作るか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーい、ボンカレー食べるかー？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;食べる！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;概要&lt;a href=&quot;#概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「Googleカレンダーに曜日を指定してスケジュールを登録するスプレッドシート」を作りました。
スプレッドシートの UI はこんなかんじになっていて、以下の 4 つの範囲に分かれています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;必須で入力する範囲&lt;/li&gt;
&lt;li&gt;任意で入力する範囲&lt;/li&gt;
&lt;li&gt;曜日を入力する範囲&lt;/li&gt;
&lt;li&gt;Google カレンダーのイベントの色のコード一覧（入力はしない。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1541&quot; height=&quot;721&quot; src=&quot;/_astro/01.CjM852a1_ZPoXgv.webp&quot; srcset=&quot;/_astro/01.CjM852a1_Z12XGYO.webp 640w, /_astro/01.CjM852a1_23uidT.webp 750w, /_astro/01.CjM852a1_26FqsX.webp 828w, /_astro/01.CjM852a1_1gEdfM.webp 1080w, /_astro/01.CjM852a1_w0EVt.webp 1280w, /_astro/01.CjM852a1_ZPoXgv.webp 1541w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スクリプトが実行されるとこんな感じに Google カレンダーで入力されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1611&quot; height=&quot;881&quot; src=&quot;/_astro/02.DV-dVigv_Z1QJsD9.webp&quot; srcset=&quot;/_astro/02.DV-dVigv_Z1baTch.webp 640w, /_astro/02.DV-dVigv_2pie6s.webp 750w, /_astro/02.DV-dVigv_1DnKe7.webp 828w, /_astro/02.DV-dVigv_fbDmF.webp 1080w, /_astro/02.DV-dVigv_yBIPW.webp 1280w, /_astro/02.DV-dVigv_Z1QJsD9.webp 1611w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;カレンダーに入力する準備&lt;a href=&quot;#カレンダーに入力する準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それではまず、カレンダーに入力するための下準備に取り掛かります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. Google Cloudの Console での設定&lt;a href=&quot;#1-google-cloudの-console-での設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;必要ありません。&lt;/p&gt;&lt;p&gt;Google Cloud のコンソール上で「APIとサービス」で「Google Calendar API」というものが探せますが、この API は有効にする必要はありません。（ChatGPT-4 嘘付かないで！）&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1243&quot; height=&quot;893&quot; src=&quot;/_astro/03.D4HoSjX6_n4KuL.webp&quot; srcset=&quot;/_astro/03.D4HoSjX6_1GlPgH.webp 640w, /_astro/03.D4HoSjX6_Z2pxDDl.webp 750w, /_astro/03.D4HoSjX6_OziDx.webp 828w, /_astro/03.D4HoSjX6_ZttnvD.webp 1080w, /_astro/03.D4HoSjX6_n4KuL.webp 1243w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. スクリプトの準備&lt;a href=&quot;#2-スクリプトの準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の流れでスクリプトを作成します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google スプレッドシートを開き、&lt;code&gt;ツール&lt;/code&gt; &amp;gt; &lt;code&gt;Apps Script&lt;/code&gt; を選択してスクリプトエディタを開きます。&lt;/li&gt;
&lt;li&gt;スクリプトエディタで、 &lt;code&gt;GoogleCalendarApp&lt;/code&gt; にアクセスし、イベントを操作する関数を記述します。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. カレンダーへのアクセスとイベントの追加&lt;a href=&quot;#3-カレンダーへのアクセスとイベントの追加&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下は、特定の日付と時間にイベントを追加する基本的なスクリプトの例です。&lt;/p&gt;&lt;p&gt;この関数は、イベントのタイトル、開始時間、終了時間をパラメータとして受け取り、デフォルトの Google カレンダーに新しいイベントを追加します。 &lt;code&gt;startTime&lt;/code&gt; と &lt;code&gt;endTime&lt;/code&gt; は、JavaScript の &lt;code&gt;Date&lt;/code&gt; オブジェクトに変換可能な形式である必要があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addEventToCalendar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDefaultCalendar&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// デフォルトのカレンダーを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;)); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// イベントを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GoogleスプレッドシートのUI&lt;a href=&quot;#googleスプレッドシートのui&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;カレンダーに入力する下地ができたので、次にスプシの UI を作ります。&lt;/p&gt;&lt;p&gt;作るエリアは、前述の通り、 4 種類になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;必須で入力する範囲&lt;/li&gt;
&lt;li&gt;任意で入力する範囲&lt;/li&gt;
&lt;li&gt;曜日を入力する範囲&lt;/li&gt;
&lt;li&gt;Google カレンダーのイベントの色のコード一覧（入力はしない。）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1541&quot; height=&quot;721&quot; src=&quot;/_astro/01.CjM852a1_ZPoXgv.webp&quot; srcset=&quot;/_astro/01.CjM852a1_Z12XGYO.webp 640w, /_astro/01.CjM852a1_23uidT.webp 750w, /_astro/01.CjM852a1_26FqsX.webp 828w, /_astro/01.CjM852a1_1gEdfM.webp 1080w, /_astro/01.CjM852a1_w0EVt.webp 1280w, /_astro/01.CjM852a1_ZPoXgv.webp 1541w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. チェックボックスで曜日を指定できるようにする&lt;a href=&quot;#1-チェックボックスで曜日を指定できるようにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google スプシって、 Excel よりもUIが少ないのですが、チェックボックスなら搭載されています。&lt;/p&gt;&lt;p&gt;設定方法は、チェックボックスを使いたいセルを選択＞「挿入」＞「チェックボックス」をクリック の流れで行うことが出来ます。&lt;/p&gt;&lt;p&gt;チェックボックスは、&lt;code&gt;true&lt;/code&gt;と&lt;code&gt;false&lt;/code&gt;の二値を持つことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;467&quot; height=&quot;237&quot; src=&quot;/_astro/04.DL61zYt5_1OF7lu.webp&quot; srcset=&quot;/_astro/04.DL61zYt5_1OF7lu.webp 467w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 名前付き範囲を設定する&lt;a href=&quot;#2-名前付き範囲を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら次に、 Google スプレッドシート上に名前付き範囲を設定していきます。&lt;/p&gt;&lt;p&gt;これにより、スプシに入力された値をスクリプト上で取得しやすくします。（今回は、各範囲の左上のセルを名前付き範囲にします。）&lt;/p&gt;&lt;p&gt;設定方法は、名前付き範囲に指定したいセルを選択＞「データ」＞「名前付き範囲」をクリック　の流れで行うことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;824&quot; height=&quot;601&quot; src=&quot;/_astro/05.CkvAHPrb_Z1xm0o1.webp&quot; srcset=&quot;/_astro/05.CkvAHPrb_Z14f2qL.webp 640w, /_astro/05.CkvAHPrb_Z1nbY4h.webp 750w, /_astro/05.CkvAHPrb_Z1xm0o1.webp 824w&quot; /&gt;&lt;/p&gt;&lt;p&gt;名前付き範囲はこんな感じで4つのエリアそれぞれに対して設定しました。
&lt;img loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;445&quot; src=&quot;/_astro/06.DLVR81EO_1wX1rG.webp&quot; srcset=&quot;/_astro/06.DLVR81EO_24MwV8.webp 640w, /_astro/06.DLVR81EO_1iXuK3.webp 750w, /_astro/06.DLVR81EO_1hsPlg.webp 828w, /_astro/06.DLVR81EO_1wX1rG.webp 857w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. セルにメモを挿入する&lt;a href=&quot;#3-セルにメモを挿入する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、 1 箇所のセルにメモを付けます。こんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;538&quot; height=&quot;196&quot; src=&quot;/_astro/07.CpsvrfFo_UepoA.webp&quot; srcset=&quot;/_astro/07.CpsvrfFo_UepoA.webp 538w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このメモの内容は後々解説するとして・・・。&lt;/p&gt;&lt;p&gt;また、セルにメモを付けるのは、スクリプトで実行することも出来ます。ちなむと、名前付き範囲も設定できます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initializeSheet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;SHEET_NAME_12TH&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rangeName01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RANGE_NAME_IN_SHEET_12TH_TO_INPUT_MANDATORY_ITEMS&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rangeName02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RANGE_NAME_IN_SHEET_12TH_TO_INPUT_DAY_OF_WEEK&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rangeName03&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RANGE_NAME_IN_SHEET_12TH_TO_INPUT_OPTIONAL_ITEMS&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rangeName04&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RANGE_NAME_IN_SHEET_12TH_TO_LIST_COLOR_INDICES&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setNamedRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeName01&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A1&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setNamedRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeName02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A5&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setNamedRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeName03&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A9&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setNamedRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeName04&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;A13&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setNote&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;「all」と入れると全日の予定になる&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`initializeSheet: 99999999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;入力された値の整形&lt;a href=&quot;#入力された値の整形&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここまでで、シートのUIは出来たので、次にそのシートで入力された値をカレンダーに入力するために整形していきます。&lt;/p&gt;&lt;p&gt;それではまず、ベースとなるスクリプトを書いていきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Input calendar with sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputCalendarWithSheet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;SHEET_NAME_12TH&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;forms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RANGE_FORMS_IN_SHEET_12TH&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objNamedRange&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getObjAboutCorrectnessOFNamedRanges&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;forms&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isCorrect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objNamedRange&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;is_correct&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;isCorrect&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet wasn&apos;t executed.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 111111111111111111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isCorrect&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objNamedRange&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 2222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getItemsFromNamedRangeInSheet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;objNamedRange&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 333333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;All mandatory items must be filled.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;is_mandatory_filled&quot;&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Select a correct color index.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;is_color_index_correct&quot;&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Guests must be specified with e-mail adress.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;guests&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;guests&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isInput&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputCalendar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 55555555555555555555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 99999999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;1. 名前付き範囲が今のもので正しいかどうかを確認する&lt;a href=&quot;#1-名前付き範囲が今のもので正しいかどうかを確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;順序を追って行きましょう。&lt;/p&gt;&lt;p&gt;まず、&lt;code&gt;getObjAboutCorrectnessOFNamedRanges()&lt;/code&gt;の関数で名前付き範囲が今のもので正しいかどうかを確認します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Crop multi images to output each image by values in the specified area to output message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formParams&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string{}}&lt;/span&gt;&lt;span&gt; key: &quot;data&quot;, &quot;statement&quot;and &quot;is_correct&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getObjAboutCorrectnessOFNamedRanges&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;forms&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRanges&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getNamedRanges&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rangeNames&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;forms&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeNames&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 11111111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rangeNames&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;forms&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;formObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;rows&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;rows&quot;&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&quot;columns&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;columns&quot;&lt;/span&gt;&lt;span&gt;]};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;namedRanges&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rangeNames&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;))){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;row&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getRow&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;column&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getColumn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;a1notation&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namedRange&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getA1Notation&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;rows&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;rows&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;columns&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyName&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;columns&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;entries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;texts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;: &apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;a1notation&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStatementLineBrokenToDisplayArrays&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; sheet must have NamedRanges.&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;Now, target names are declared on the following ranges...`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;:&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 4444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;data&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objRequredNamedRanges&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;statement&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reply&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;alert&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;ButtonSet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;YES_NO&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;reply&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;YES&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;is_correct&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;reply&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NO&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 777777777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;is_correct&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`The user clicked the close button in the dialog&apos;s title bar.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getObjAboutCorrectnessOFNamedRanges: 888888888888888888888888888888888888888888888888888888`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;is_correct&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Google スプレッドシートでは、このような画面 UI が実装できるので、使っていきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;353&quot; src=&quot;/_astro/08.BTub_GSg_Z1QsnFn.webp&quot; srcset=&quot;/_astro/08.BTub_GSg_ZpHAIV.webp 640w, /_astro/08.BTub_GSg_Z1QsnFn.webp 648w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. getValues()をしてからオブジェクトとして取得する&lt;a href=&quot;#2-getvaluesをしてからオブジェクトとして取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、名前付き範囲のチェックが終わったら、実際に入力値を整形していきます。&lt;/p&gt;&lt;p&gt;今回のスクリプトでは、&lt;code&gt;SpreadsheetApp.spreadsheet.sheet.getValues()&lt;/code&gt;のメソッドを4回呼び出す形にしました。&lt;/p&gt;&lt;p&gt;1 回でもまあ出来ないことはないですし、そっちの方が挙動が速くなりそうですが、コードの見やすさを優先して4回の方にしました。&lt;/p&gt;&lt;p&gt;そして、取り出して 2 次元配列としてオブジェクトに割り当てた結果はコレです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ startCellToInputMandatoryItems:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ [ &apos;mandatory_items&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;start_of_period&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;end_of_period&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;start_time&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;end_time&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;title&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;color&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;2024-05-06&apos;, &apos;2024-05-24&apos;, &apos;17:00:00&apos;, &apos;18:00:00&apos;, &apos;スーパー玉出&apos;, 5 ] ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startCellToInputDayOfWeek:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ [ &apos;selected_days_of_week&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;sunday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;monday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;tuesday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;wednesday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;thursday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;friday&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;saturday&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ false, true, false, false, false, true, false ] ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startCellToInputOptionalItems:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ [ &apos;optional_items&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;description&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;location&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;guests&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;sendInvites&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;to_be_decided_items_01&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;to_be_decided_items_02&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;&apos;, &apos;&apos;, &apos;&apos;, false, &apos;&apos;, &apos;&apos; ] ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startCellToListColorIndices:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ [ &apos;color_indices&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos;, &apos;&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ &apos;PALE_BLUE&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;PALE_GREEN&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;MAUVE&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;PALE_RED&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;YELLOW&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ORANGE&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;CYAN&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;GRAY&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;BLUE&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;GREEN&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;RED&apos; ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] ] }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、&lt;code&gt;getItemsFromNamedRangeInSheet()&lt;/code&gt;のメソッドで色々コネコネして、各プロパティに対応させて入力値をオブジェクトに繁栄した結果がコレです。シート上の項目の名前をそのまま持ってきています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ is_mandatory_filled: true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_color_index_correct: true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start_of_period: &apos;2024-05-06&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_of_period: &apos;2024-05-24&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start_time: &apos;17:00:00&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_time: &apos;18:00:00&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;title: &apos;スーパー玉出&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;color: 5,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selected_days_of_week: [ false, true, false, false, false, true, false ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description: &apos;&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location: &apos;&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;guests: &apos;&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sendInvites: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;to_be_decided_items_01: &apos;&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;to_be_decided_items_02: &apos;&apos; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;特に、&lt;code&gt;selected_days_of_week&lt;/code&gt;のプロパティですが、これはシート上でチェックボックスで選択された曜日を格納した値になっています。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;カレンダーに曜日指定で入力する&lt;a href=&quot;#カレンダーに曜日指定で入力する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、この整形したオブジェクトを引き下げて、カレンダーへのスケジュールを入力していきたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. カレンダー入力前のチェック&lt;a href=&quot;#1-カレンダー入力前のチェック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;と、その前に必要項目がちゃんと入力されているかどうかなどをチェックします。&lt;/p&gt;&lt;p&gt;チェックに引っかかったら&lt;code&gt;Calendar input failed.&lt;/code&gt;をシート上のHTMLで表示してカレンダー入力処理は行いません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;All mandatory items must be filled.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;is_mandatory_filled&quot;&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Select a correct color index.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;is_color_index_correct&quot;&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;Guests must be specified with e-mail adress.&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;guests&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;guests&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Calendar input failed.&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendarWithSheet: 444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. カレンダー入力処理の全体&lt;a href=&quot;#2-カレンダー入力処理の全体&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、やっとカレンダー入力処理に着手します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;inputCalendar()&lt;/code&gt;メソッドで行っていきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Input calendar.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputCalendar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isRecording&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDefaultCalendar&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;weekdaysOnGoogleCalendar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SUNDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;MONDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;TUESDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WEDNESDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;THURSDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;FRIDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Weekday&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SATURDAY&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueReferingToAllDayAtCellOfStartOfPeriod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;all&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const timezoneStr = &quot;+09:00&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputingWeekdays&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;weekdaysOnGoogleCalendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wds&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;weekdaysOnGoogleCalendar&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doNothing&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wds&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputingWeekdays&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 111111111111111111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;newRecurrence&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;addWeeklyRule&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onlyOnWeekdays&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputingWeekdays&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;until&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T23:59:59&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;description&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;location&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;guests&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;sendInvites&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doNothing&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 2222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;start_time&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueReferingToAllDayAtCellOfStartOfPeriod&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 4444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_time&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tempTimestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_time&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tempTimestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 55555555555555555555555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endTime02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 6666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;start_time&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;end_time&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 777777777777777777777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 8888888888888888888888888888888888888888888888888888888888888888`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 99999999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;とても長いですが・・・、今回の入力処理は、以下の 3 種類の条件分岐を設けることで 8 通りに変化します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;全日のスケジュールかどうか。&lt;/li&gt;
&lt;li&gt;繰り返し入力かどうか。&lt;/li&gt;
&lt;li&gt;任意の（オプション）項目が入力されているかどうか&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;それでは、各条件の詳細に移りましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. カレンダー入力処理の分岐（全日のスケジュールかどうか）&lt;a href=&quot;#3-カレンダー入力処理の分岐全日のスケジュールかどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1 つ目の条件分岐ですが、これは前述した、「3. セルにメモを挿入する」の部分で少し触れた、「&lt;code&gt;all&lt;/code&gt;と入れると全日の予定になる」になるという機能です。&lt;/p&gt;&lt;p&gt;Google カレンダーでは、時間が指定されたイベントと、時間が指定されていない（全日）イベントの2種類を入力することが出来ます。&lt;/p&gt;&lt;p&gt;そして、このシートでは、&lt;code&gt;&quot;start_time&quot;&lt;/code&gt;に&lt;code&gt;all&lt;/code&gt;が入力されると全日の予定になります。該当する処理のコードブロックはこの部分です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;start_time&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueReferingToAllDayAtCellOfStartOfPeriod&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 4444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これからのこの章の解説は、このコードブロックをベースに解説していきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. カレンダー入力処理の分岐（繰り返し入力かどうか）&lt;a href=&quot;#4-カレンダー入力処理の分岐繰り返し入力かどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、「繰り返し入力かどうか」の分岐についてです。&lt;/p&gt;&lt;p&gt;繰り返し入力にすると、 Google カレンダー上でまとまったイベントとして処理できます。&lt;/p&gt;&lt;p&gt;例えば、このように入力して繰り返し入力で Google カレンダーにインプットすると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1541&quot; height=&quot;721&quot; src=&quot;/_astro/01.CjM852a1_ZPoXgv.webp&quot; srcset=&quot;/_astro/01.CjM852a1_Z12XGYO.webp 640w, /_astro/01.CjM852a1_23uidT.webp 750w, /_astro/01.CjM852a1_26FqsX.webp 828w, /_astro/01.CjM852a1_1gEdfM.webp 1080w, /_astro/01.CjM852a1_w0EVt.webp 1280w, /_astro/01.CjM852a1_ZPoXgv.webp 1541w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Google カレンダー上で、イベントの束を一気に処理できるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;620&quot; src=&quot;/_astro/09.BU4Wl2Zc_q1rdm.webp&quot; srcset=&quot;/_astro/09.BU4Wl2Zc_1J7GH1.webp 640w, /_astro/09.BU4Wl2Zc_Z21epqk.webp 750w, /_astro/09.BU4Wl2Zc_Z2tvj0A.webp 828w, /_astro/09.BU4Wl2Zc_1VAAQG.webp 1080w, /_astro/09.BU4Wl2Zc_q1rdm.webp 1260w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、場合によっては、この「定期的な予定の削除」ダイアログが表示されるのが鬱陶しいこともあるかもしれません。
なので、繰り返し入力かどうかを分岐できるように今回のツールでは実装しています。&lt;/p&gt;&lt;p&gt;そこで、繰り返し入力「ではない」バージョンの処理がこちら。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;start_time&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;end_time&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart01&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart02&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timeDiffGMT9&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate01&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate02&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 繰り返し入力をしないバージョンの処理&lt;a href=&quot;#5-繰り返し入力をしないバージョンの処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;繰り返し入力しない、かつ曜日を指定して入力する。&lt;/p&gt;&lt;p&gt;この 2 つの要件で行う処理が今回、最も面倒くさかった部分です。（一応動くことには動きますが、少し至っていない部分もあります。）&lt;/p&gt;&lt;p&gt;まず、メソッドでタイムスタンプの配列を取得します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get timestamps to input event  to calendar.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedDaysOfWeek&lt;/span&gt;&lt;span&gt;: length must be 7.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addingTime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number[]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedDaysOfWeek&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;addingTime&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;00:00:00&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;weekdaysOnPrimitiveJsString&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Sun&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Mon&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Tue&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Wed&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Thu&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Fri&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Sat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const timezoneStr = &quot;+09:00&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Symbol&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toPrimitive&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;&quot;string&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// get day of week&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dowIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;weekdaysOnPrimitiveJsString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dow&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tempTimestamp02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oneDayInTimestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;periodDays&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;tempTimestamp02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oneDayInTimestamp&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// なぜかタイムゾーンがズレるので仕方なく+2してる。本来は+1の筈。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []; &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dow&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dowIndex&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getInputtingTimestamps: 3333333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp02&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;periodDays&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getInputtingTimestamps: 4444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;oneDayInTimestamp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getInputtingTimestamps: 5555555555555555555555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;periodDays&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;dowIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;weekdaysOnPrimitiveJsString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedDaysOfWeek&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`2001-04-01T&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;addingTime&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;atTimestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getHours&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMinutes&lt;/span&gt;&lt;span&gt;()) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;addingTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;atTimestamp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getInputtingTimestamps: 66666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedDaysOfWeek&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oneDayInTimestamp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;atTimestamp&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doNothing&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// selectedDaysOfWeek[s] ? inputtingTimestampsFromStart.push(tempTimestamp01 + i * oneDayInTimestamp) : doNothing();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getInputtingTimestamps: &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;どういうタイムスタンプを取得するのかと言うと、 Google カレンダーに入力する日時のタイムスタンプになります。&lt;/p&gt;&lt;p&gt;どうやって、取得しているかと言うと・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;まず、&lt;code&gt;&quot;start_date&quot;&lt;/code&gt;プロパティで指定されている日付を使います。&lt;/li&gt;
&lt;li&gt;この日付が何曜日なのかを取得します。方法は、&lt;code&gt;startDate[Symbol.toPrimitive](&quot;string&quot;).substring(0, 3)&lt;/code&gt;というメソッドで「Sun」やら「Fri」やらの曜日を表す文字列を取得します。&lt;/li&gt;
&lt;li&gt;そして、本メソッドの冒頭で、&lt;code&gt;weekdaysOnPrimitiveJsString&lt;/code&gt;を宣言しています。この配列（本節では今後①と呼びます。）のインデックスは、以下の配列と対応しています。
&lt;ul&gt;
&lt;li&gt;シートで入力した曜日を持っている、&lt;code&gt;selected_days_of_week&lt;/code&gt;のプロパティ内の配列。（本節では今後②と呼びます。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inputCalendar&lt;/code&gt;メソッド内&lt;code&gt;weekdaysOnGoogleCalendar&lt;/code&gt;の配列。（本節では今後③と呼びます。）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for(let i = 0; i &amp;lt; periodDays; i++){&lt;/code&gt;の行から入力する日時を取得する処理です。&lt;/li&gt;
&lt;li&gt;①とイテレーションする変数&lt;code&gt;s&lt;/code&gt;を使ってインデックスを取得して、そのインデックスを②に紐づけて&lt;code&gt;true&lt;/code&gt;か&lt;code&gt;false&lt;/code&gt;を取得します。&lt;code&gt;true&lt;/code&gt;だったら、その時のタイムスタンプをカレンダー入力用の配列に格納する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これで、カレンダーを入力する配列は出来ました。&lt;/p&gt;&lt;p&gt;しかしながら、ちなみに、&lt;code&gt;new Date()&lt;/code&gt;するときにタイムゾーンがズレる問題というものがあり、これが原因でこの行だけ少し不服な処理になってしまっています。（一応動きますけど・・・）&lt;/p&gt;&lt;p&gt;+2 することで、 1 日余分に入力してしまう可能性が生まれています。まあ、多くイベントを作ってしまったら、余分な所は手で削除することにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;periodDays&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;tempTimestamp02&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tempTimestamp01&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;oneDayInTimestamp&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// なぜかタイムゾーンがズレるので仕方なく+2してる。本来は+1の筈。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;その、「タイムゾーンがズレる問題」がこんな感じ。結局原因が分からなかった・・・。&lt;/p&gt;&lt;p&gt;発生する時としない時があって、事象の再現方法も分からない・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;inputCalendar: 2222222222222222222222222222222222222222222222222222222222222222222&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Mon May 06 2024 03:00:00 GMT-0400 (Eastern Daylight Time)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Mon May 06 2024 04:00:00 GMT-0500 (Western Digital Time)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;inputCalendar: 55555555555555555555555555555555555555555555555555555555555555555555&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. カレンダーへイベントを入力する&lt;a href=&quot;#6-カレンダーへイベントを入力する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;とまあ、そんなこともありましたが、一応入力する準備は出来ました。&lt;/p&gt;&lt;p&gt;カレンダーにイベント、スケジュールを入力していきます。繰り返さないで入力する場合はこんな感じです。&lt;code&gt;inputDate&lt;/code&gt;は、タイムスタンプではなく&lt;code&gt;Date&lt;/code&gt;オブジェクトです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 全日イベントを繰り返さないで入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 時間を指定したイベントを繰り返さないで入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. カレンダー入力処理の分岐（任意の（オプション）項目が入力されているかどうか）&lt;a href=&quot;#7-カレンダー入力処理の分岐任意のオプション項目が入力されているかどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、ここらでオプションの有無を確認します。スプレッドシートの任意項目を入力している場合、&lt;code&gt;options&lt;/code&gt;を渡して Google カレンダーにイベントを入力していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1015&quot; height=&quot;345&quot; src=&quot;/_astro/10.CswhmFQj_1U5gYv.webp&quot; srcset=&quot;/_astro/10.CswhmFQj_Z19yoy9.webp 640w, /_astro/10.CswhmFQj_1Dp6l4.webp 750w, /_astro/10.CswhmFQj_2lD6Gl.webp 828w, /_astro/10.CswhmFQj_1U5gYv.webp 1015w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;options&lt;/code&gt;を&lt;code&gt;null&lt;/code&gt;にして渡す事も考えましたが、&lt;a href=&quot;https://developers.google.com/apps-script/reference/calendar/calendar-app#createalldayeventseriestitle,-startdate,-recurrence&quot; target=&quot;_blank&quot;&gt;GASのリファレンス&lt;/a&gt;では、&lt;code&gt;options&lt;/code&gt;を渡す場合と渡さない場合でメソッドの項目が棲み分けられていたので、念のため処理を分岐させています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 全日イベントの入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 時間を指定したイベントの入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 6666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. . 繰り返し入力をするバージョンの処理&lt;a href=&quot;#8--繰り返し入力をするバージョンの処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;前節でチラッとメソッドを出しましたが、&lt;code&gt;createEventSeries()&lt;/code&gt;で、時間を指定したイベントの入力を繰り返し入力として行います。&lt;code&gt;createAllDayEventSeries()&lt;/code&gt;も全日イベントになるだけで同様に繰り返し入力をするメソッドになっています。&lt;/p&gt;&lt;p&gt;スクリプトを書く上では、繰り返し入力の方が書きやすいですね。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;start_time&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueReferingToAllDayAtCellOfStartOfPeriod&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;start_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRecurring&lt;/span&gt;&lt;span&gt;){ &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 繰り返す&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;// 繰り返さない&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;end_of_period&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;T00:00:00&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;timezoneStr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getInputtingTimestamps&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;selected_days_of_week&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputtingTimestampsFromStart&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTime&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ts&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createAllDayEvent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputDate&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;eventSeries&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;itemsObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`inputCalendar: 4444444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. 全日イベントで繰り返さない入力をしてみる&lt;a href=&quot;#9-全日イベントで繰り返さない入力をしてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そしたら、実際に入力してみましょう。&lt;/p&gt;&lt;p&gt;&lt;code&gt;start_time&lt;/code&gt;に&lt;code&gt;all&lt;/code&gt;を入力してスクリプトを実行します。
&lt;img loading=&quot;lazy&quot; width=&quot;1175&quot; height=&quot;692&quot; src=&quot;/_astro/11.wwSVwlZu_2cACUM.webp&quot; srcset=&quot;/_astro/11.wwSVwlZu_Z2bsMPm.webp 640w, /_astro/11.wwSVwlZu_1IWIwc.webp 750w, /_astro/11.wwSVwlZu_ZK1f7u.webp 828w, /_astro/11.wwSVwlZu_1nhNDe.webp 1080w, /_astro/11.wwSVwlZu_2cACUM.webp 1175w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、 Google スプレッドシートではメニューの UI にボタンを追加することが出来ます。「google スプレッドシート onOpen メニュー」でググったら出てくると思います！
&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;279&quot; src=&quot;/_astro/11_5.D8aszI2p_2bdMgQ.webp&quot; srcset=&quot;/_astro/11_5.D8aszI2p_2bdMgQ.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、 Google カレンダーで確認します。　入力されています。
&lt;img loading=&quot;lazy&quot; width=&quot;1588&quot; height=&quot;888&quot; src=&quot;/_astro/12.C_Cm-iTQ_ZkzKKC.webp&quot; srcset=&quot;/_astro/12.C_Cm-iTQ_Z2aCwP4.webp 640w, /_astro/12.C_Cm-iTQ_PO5Ry.webp 750w, /_astro/12.C_Cm-iTQ_Z2ne7nr.webp 828w, /_astro/12.C_Cm-iTQ_1PAko8.webp 1080w, /_astro/12.C_Cm-iTQ_Z2dfhvC.webp 1280w, /_astro/12.C_Cm-iTQ_ZkzKKC.webp 1588w&quot; /&gt;&lt;/p&gt;&lt;p&gt;繰り返し入力にしていなければ、削除ボタンをクリックすればすぐ消えてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;427&quot; src=&quot;/_astro/13.I29X5TK8_Zdcn41.webp&quot; srcset=&quot;/_astro/13.I29X5TK8_Z2g45x.webp 640w, /_astro/13.I29X5TK8_Z1nzYwb.webp 750w, /_astro/13.I29X5TK8_b49lC.webp 828w, /_astro/13.I29X5TK8_Zdcn41.webp 877w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1585&quot; height=&quot;896&quot; src=&quot;/_astro/14.CEwFRlRp_Z7pOjo.webp&quot; srcset=&quot;/_astro/14.CEwFRlRp_Z1PaVer.webp 640w, /_astro/14.CEwFRlRp_BfbS4.webp 750w, /_astro/14.CEwFRlRp_ZIFLzo.webp 828w, /_astro/14.CEwFRlRp_Zt4xuK.webp 1080w, /_astro/14.CEwFRlRp_Z1YS8uk.webp 1280w, /_astro/14.CEwFRlRp_Z7pOjo.webp 1585w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GAS と Google スプレッドシートを利用して、曜日を指定して Google カレンダーにスケジュールを効率的に追加する方法でした。&lt;/p&gt;&lt;p&gt;以下の流れで行ったので、ご参考下さい。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;スクリプトの準備&lt;/li&gt;
&lt;li&gt;カレンダーへのイベントの追加の導入&lt;/li&gt;
&lt;li&gt;Google スプレッドシートの UI の設計&lt;/li&gt;
&lt;li&gt;入力値の書式設定&lt;/li&gt;
&lt;li&gt;指定された曜日に基づいたカレンダーへのスケジュールの入力&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーい、ボンカレー食べるかー？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;食べる！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、GPT-4】OpenAI APIでGmailに届くエラーメールをスプレッドシートに記録する</title><link>https://endorphinbath.com/posts/gas-record-gamil-with-openai/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-record-gamil-with-openai/</guid><description>Google Apps Scirptを使っていると、Gmailにそのエラー情報が送られてきたりします。そこで、OpenAI APIのGPT-4とParserで情報を抽出しましょう。</description><pubDate>Sat, 24 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ～～、これ自動で書いてくんねえかな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Gmailのやつか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;届けてくれるのはありがたいんだけど、もう一つ欲しいよね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、作るか&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回やりたいこと&lt;a href=&quot;#今回やりたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Scirpt を使っていると、 Gmail にエラーメッセージやその周辺の情報が送られてくることがあります。しかし、メールとして断片的になっているデータって、扱いづらいですよねえ・・・&lt;/p&gt;&lt;p&gt;そこで本記事では、 Gmail に届くメッセージから必要な情報を抽出し、管理を効率化する方法について紹介します。&lt;/p&gt;&lt;p&gt;今回、こんな風に送られてくるエラー情報を・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1528&quot; height=&quot;574&quot; src=&quot;/_astro/01.x2Yt4YTn_ZwSfYD.webp&quot; srcset=&quot;/_astro/01.x2Yt4YTn_ZKENQD.webp 640w, /_astro/01.x2Yt4YTn_ZONNU0.webp 750w, /_astro/01.x2Yt4YTn_F2SNn.webp 828w, /_astro/01.x2Yt4YTn_KzTsR.webp 1080w, /_astro/01.x2Yt4YTn_3zYG2.webp 1280w, /_astro/01.x2Yt4YTn_ZwSfYD.webp 1528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スプレッドシートに書き込んでいく機能を実装していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1219&quot; height=&quot;421&quot; src=&quot;/_astro/02.DQDL7_wd_ZNH6yb.webp&quot; srcset=&quot;/_astro/02.DQDL7_wd_Z12dgEa.webp 640w, /_astro/02.DQDL7_wd_Z20lams.webp 750w, /_astro/02.DQDL7_wd_Z1R8EBi.webp 828w, /_astro/02.DQDL7_wd_Z1NL5nE.webp 1080w, /_astro/02.DQDL7_wd_ZNH6yb.webp 1219w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順&lt;a href=&quot;#手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、実装の手順です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1．Gmailのメッセージの取得&lt;a href=&quot;#1gmailのメッセージの取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、 Gmail にあるメッセージを取得しましょう。&lt;/p&gt;&lt;p&gt;最初にメールのリストを取得します。ここでは、エラーメールの件名と未読かどうかでフィルタリングしています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Write error log from Gamil into the sheet with GPT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeErrorLogFromGmailWithGpt&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Summary of failures for Google Apps Script: `&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`label:inbox is:unread subject:&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 検索条件を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GmailApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Gmailのスレッドを検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;()).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessageCount&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージの個数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessages&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSubject&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2．OpenAIのChat Completions APIを使う&lt;a href=&quot;#2openaiのchat-completions-apiを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、取得したメッセージを GPT-4 に与えましょう。&lt;/p&gt;&lt;p&gt;まだ使ったことがなければ、以下の OpenAI の Developer Platform で、 API キーを作りましょう。&lt;/p&gt;&lt;a href=&quot;https://platform.openai.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;platform.openai.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;platform.openai.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;platform.openai.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;API キーを作ったら、 GAS を書いていきます。&lt;/p&gt;&lt;p&gt;追加した処理の中で、 GPT-4 にプロンプトを与えていきます。（&lt;code&gt;generatedMsg&lt;/code&gt;は後で使います。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Write error log from Gamil into the sheet with GPT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeErrorLogFromGmailWithGpt&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Summary of failures for Google Apps Script: `&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`label:inbox is:unread subject:&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 検索条件を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GmailApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Gmailのスレッドを検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;()).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessageCount&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージの個数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessages&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSubject&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: START ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;function&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;error_message&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;trigger&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoInPlainText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedMsg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: END ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;それでは、&lt;code&gt;extractErrorInfoInPlainText()&lt;/code&gt;の中身を見ていきましょう。&lt;/p&gt;&lt;p&gt;この関数で、 OpenAI の Chat Completions API にリクエストする内容を作ります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Extract error info in txt.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string{}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoInPlainText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 抽出した情報を格納するオブジェクト&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`この[# プレーンテキスト]から[# 欲しい情報]を[# 形式]の形式で取得してください&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;[# プレーンテキスト]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;[# 欲しい情報]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;[# 形式]&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;HTMLのTable形式で、[# 欲しい情報]がヘッダーになる。`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;system&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;You are a helpful assistant.&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;span&gt;&quot;role&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gpt-4&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxTokens&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2048&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 生成する文章のランダム性（0：完全に確定的、2：完全にランダム）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateChatCompletionWithOpenaiApi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;maxTokens&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`extractErrorInfoInPlainText: 66666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resObj&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Generate chat completions like ChatGPT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]{}}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxTokens&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any{}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateChatCompletionWithOpenaiApi&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;gpt-4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;maxTokens&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;2048&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.openai.com/v1/chat/completions&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API_KEY_OPENAI&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;messages&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;model&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;max_tokens&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxTokens&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;temperature&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;temperature&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;headers&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endpoint&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数の中の、&lt;code&gt;prompt&lt;/code&gt;変数にはプロンプトしたい文章が入っています。
ChatGPT で入力してみるとこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;この[# プレーンテキスト]から[# 欲しい情報]を[# 形式]の形式で取得してください&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# プレーンテキスト]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;スクリプト TestFunctionSheet を正常に完了できませんでした。失敗のまとめを下記&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;に示します。このスクリプトのトリガーを設定したり、今後の失敗の通知の受信設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;を変更したりするには、ここをクリックしてください。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;起動 関数 エラー メッセージ トリガー End&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024/02/18 5時00分55秒 日本標準時 testfunction TypeError:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;statement.replace is not a function time-based 2024/02/18 5時01分15秒 日本標&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;準時&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;よろしくお願いいたします。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Google Apps Script&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;サポートが必要な場合は、Google Apps Script のドキュメントをご覧ください。本&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;メールは配信専用です。ご返信なさらぬようご注意ください。(c) 2024 Google&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# 欲しい情報]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- error_message&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- trigger&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[# 形式]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;HTMLのTable形式で、[# 欲しい情報]がヘッダーになる。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1651&quot; height=&quot;903&quot; src=&quot;/_astro/03.CoYGQRC4_223iXO.webp&quot; srcset=&quot;/_astro/03.CoYGQRC4_ZidhEr.webp 640w, /_astro/03.CoYGQRC4_Z1LViaD.webp 750w, /_astro/03.CoYGQRC4_2wlmKW.webp 828w, /_astro/03.CoYGQRC4_2eXYWU.webp 1080w, /_astro/03.CoYGQRC4_Z2vM3mJ.webp 1280w, /_astro/03.CoYGQRC4_223iXO.webp 1651w&quot; /&gt;&lt;/p&gt;&lt;p&gt;GAS を実行してみて、こんなエラーメッセージが表示されたら、おそらくクレジットが0になっている可能性があるので、さっきの Developer Platform でクレジットカードを登録しましょう。。。（5 ドルくらい払えばとりあえず問題ないと思います。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;error&quot;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;message&quot;: &quot;The model `gpt-4` does not exist or you do not have access to it. Learn more: https://help.openai.com/en/artic... (use muteHttpExceptions option to examine full response)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3．Parserで欲しい情報を抽出する&lt;a href=&quot;#3parserで欲しい情報を抽出する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、 GPT-4 に生成してもらった内容を切り抜いていきましょう。&lt;/p&gt;&lt;p&gt;今回は、GAS の&lt;code&gt;Parser&lt;/code&gt;ライブラリを使っていきます。スクリプトのライブラリに入れていきましょう。
（ID は、&lt;code&gt;1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw&lt;/code&gt;）&lt;/p&gt;&lt;p&gt;そして、情報を抽出していきます。このために、 GPT-4 には HTML 形式で情報を出してもらったのでした。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Write error log from Gamil into the sheet with GPT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeErrorLogFromGmailWithGpt&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Summary of failures for Google Apps Script: `&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`label:inbox is:unread subject:&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 検索条件を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GmailApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Gmailのスレッドを検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;()).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessageCount&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージの個数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessages&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSubject&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;function&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;error_message&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;trigger&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoInPlainText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedMsg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: START ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedErrorInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoFromChatGptMsg&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;generatedMsg&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: END ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;それでは、&lt;code&gt;extractErrorInfoFromChatGptMsg()&lt;/code&gt;の中身を見ていきましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Extract Error info from messages ChatGPT-4 generated.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoFromChatGptMsg&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;markToParse1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;th&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;markToParse2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;td&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;markToParse1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;markToParse1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;markToParse2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&amp;lt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;markToParse2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`extractErrorInfoFromChatGptMsg: 11111111111111111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;is_table_deformed&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`extractErrorInfoFromChatGptMsg: 22222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;is_table_deformed&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;texts2&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;_&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;info_list&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returns&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`extractErrorInfoFromChatGptMsg: 99999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;すると、&lt;code&gt;returnObj[&quot;info_list&quot;]&lt;/code&gt;の中に、必要な情報が入った配列が入ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[ &apos;testfunction&apos;, &apos;TypeError: statement.replace is not a function&apos;, &apos;time-based&apos; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4．スプレッドシートに記録する&lt;a href=&quot;#4スプレッドシートに記録する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;書き込みたい情報は取れたので、シートに書きます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Write error log from Gamil into the sheet with GPT.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeErrorLogFromGmailWithGpt&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SHEET_NAME_1ST&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Summary of failures for Google Apps Script: `&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`label:inbox is:unread subject:&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// 検索条件を設定&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GmailApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Gmailのスレッドを検索&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;()).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numbers&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 222222222222222222222222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;threads&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessageCount&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージの個数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;thread&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMessages&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// スレッド内のメッセージを取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSubject&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 333333333333333333333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 使う&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPlainBody&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;function&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;error_message&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;trigger&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoInPlainText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;plainText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keywords&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generatedMsg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;choices&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractedErrorInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extractErrorInfoFromChatGptMsg&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;generatedMsg&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: START ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;generateFormulaForConId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getSubject&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetSubject&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;extractedErrorInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;info_list&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;extractedErrorInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;info_list&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;extractedErrorInfo&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;info_list&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;markRead&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isUnread&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 6666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// 追加: END ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 追加: START ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`writeErrorLog: 777777777777777777777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;maxNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;colOfNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;valuesToWrite&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 追加: END ---------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そしたら、こんな風にシートに書き込まれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1219&quot; height=&quot;421&quot; src=&quot;/_astro/02.DQDL7_wd_ZNH6yb.webp&quot; srcset=&quot;/_astro/02.DQDL7_wd_Z12dgEa.webp 640w, /_astro/02.DQDL7_wd_Z20lams.webp 750w, /_astro/02.DQDL7_wd_Z1R8EBi.webp 828w, /_astro/02.DQDL7_wd_Z1NL5nE.webp 1080w, /_astro/02.DQDL7_wd_ZNH6yb.webp 1219w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5．運用コストがさぁ・・・&lt;a href=&quot;#5運用コストがさぁ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これでツールは完成！&lt;/p&gt;&lt;p&gt;・・・ですが、実装する過程で 7 回くらい Chat Completions API にリクエストしたわけですが、&lt;/p&gt;&lt;p&gt;その直後に Developer Platform で消費したクレジットの額面を見てみると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1717&quot; height=&quot;902&quot; src=&quot;/_astro/11.DQ9z2eaH_1qP2xo.webp&quot; srcset=&quot;/_astro/11.DQ9z2eaH_12Xiii.webp 640w, /_astro/11.DQ9z2eaH_Z1NoUb7.webp 750w, /_astro/11.DQ9z2eaH_15qOhd.webp 828w, /_astro/11.DQ9z2eaH_OeiYJ.webp 1080w, /_astro/11.DQ9z2eaH_ZG2W5x.webp 1280w, /_astro/11.DQ9z2eaH_1m9TDq.webp 1668w, /_astro/11.DQ9z2eaH_1qP2xo.webp 1717w&quot; /&gt;&lt;/p&gt;&lt;p&gt;たったの7リクエストで 18 円も掛かっている・・・&lt;/p&gt;&lt;p&gt;例えば、 1 日に 3 通のエラーメッセージをシートに記録するとなると、 3 × 365 × 18 ÷ 7 ≒ 2815 円も年額として掛かりますよ！？
うっ、うひゃあ・・・。&lt;/p&gt;&lt;p&gt;これは実際に運用するかどうかというのは、別問題になってくるぞ・・・&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、以下の流れでGmailの内容をGPT-4で抽出する処理を実装しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Gmail のメッセージを取得する&lt;/li&gt;
&lt;li&gt;OpenAI の Chat Completions API を使う&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Parser&lt;/code&gt;で欲しい情報を抽出する&lt;/li&gt;
&lt;li&gt;スプレッドシートに記録する&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Gmail に届くメッセージから必要な情報を効率的に抽出することは、日々の業務効率化に大きく寄与します。 Gmail API と OpenAI API を組み合わせることで、メール管理の自動化が可能となり、重要な情報を見逃すリスクを減らすことができるでしょう。&lt;/p&gt;&lt;p&gt;しかし、お財布と相談するのを忘れずに。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;記録できたぞ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_005.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;財布的に、年がら年中は使えんかもなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【PowerShell】画像ファイルを一括リネームして、Exif情報も反映する</title><link>https://endorphinbath.com/posts/powershell-rename-all-image-files/</link><guid isPermaLink="true">https://endorphinbath.com/posts/powershell-rename-all-image-files/</guid><description>PowerShellを使用して画像ファイルを一括でリネームする方法を紹介します。「yyyyMMddHHmmss」形式で変えて、最終的にはGoogleフォトに反映させていきましょう。</description><pubDate>Tue, 20 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_020.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか最近使ってたリネームアプリが、ダウンロードできなくなっちゃたよお。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あらまあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_006.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もうこの写真たちのファイル名はこのままなのかしら・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあリネーム出来るようにしよう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;重宝していたアプリが消えた・・・&lt;a href=&quot;#重宝していたアプリが消えた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;つい最近までこんなリネームアプリを使っていたのですが、機種変更して OS バージョンが上がったら使えなくなってしまいました・・・
&lt;img loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;300&quot; src=&quot;/_astro/01.CXgEHYzt_Z2hrrEz.webp&quot; srcset=&quot;/_astro/01.CXgEHYzt_Z2hrrEz.webp 342w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1410&quot; src=&quot;/_astro/02.cCRJDjOG_1iPXhz.webp&quot; srcset=&quot;/_astro/02.cCRJDjOG_Z2d5gO7.webp 640w, /_astro/02.cCRJDjOG_Z2iYu1e.webp 750w, /_astro/02.cCRJDjOG_Z1nTTyE.webp 828w, /_astro/02.cCRJDjOG_1iPXhz.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、そろそろこのりネーム機能を作りますか・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ファイルのリネームの基本&lt;a href=&quot;#ファイルのリネームの基本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PowerShell でファイルをリネームする基本コマンドは &lt;code&gt;Rename-Item&lt;/code&gt; です。このコマンドは &lt;code&gt;-Path&lt;/code&gt; パラメータで指定されたファイルの名前を &lt;code&gt;-NewName&lt;/code&gt; パラメータで指定された新しい名前に変更します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;画像ファイルを一括でリネームする&lt;a href=&quot;#画像ファイルを一括でリネームする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;画像ファイルの一括リネームは、デジタルアセットの整理、アップロード前の準備、またはバックアッププロセスの一環として非常に便利です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本コマンド&lt;a href=&quot;#基本コマンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;C:\Images\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Filter &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName { $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.Name&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-replace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;旧文字列&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&apos;新文字列&apos;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このコマンドは、指定したディレクトリ（この例では &lt;code&gt;C:\Images\&lt;/code&gt;）内のすべての jpg ファイルを対象に、ファイル名内の「旧文字列」を「新文字列」に置換します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;このコマンドの詳細&lt;a href=&quot;#このコマンドの詳細&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;少し噛み砕きます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ファイルの選択&lt;a href=&quot;#ファイルの選択&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;対象ディレクトリ&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Filter &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;対象ファイル形式&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このコマンドは、指定したディレクトリ内の特定のファイル形式（例：&lt;code&gt;.jpg&lt;/code&gt;、&lt;code&gt;.png&lt;/code&gt;）を検索します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リネームの実行&lt;a href=&quot;#リネームの実行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リネームプロセスでは、新しいファイル名の形式を定義する必要があります。これは、ファイルの作成日、撮影日、またはシーケンス番号を含むことができます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| &lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName { 新しいファイル名の定義 }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このパイプライン (&lt;code&gt;|&lt;/code&gt;) コマンドは、直前のコマンドレットで選択したファイルを次のコマンドレットに渡します。&lt;/p&gt;&lt;p&gt;今回は&lt;code&gt;Rename-Item&lt;/code&gt;に渡してリネーム操作を適用します。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ファイルの最終更新日からリネームする&lt;a href=&quot;#ファイルの最終更新日からリネームする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この例では、ファイルの最終書き込み時刻を使用して、画像ファイルを&lt;code&gt;年月日時分秒.jpg&lt;/code&gt;の形式でリネームします。&lt;code&gt;$_.Extension&lt;/code&gt;を忘れないようにですね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;C:\Images\&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Filter &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.jpg | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName { $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.LastWriteTime.ToString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;yyyyMMddHHmmss&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.Extension&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;で、ここまで書いたのですが、「ファイルの最終更新日」でリネームしてしまうと、スマホから撮った写真を PC に「コピーした時の日時」でリネームてしまいます。&lt;/p&gt;&lt;p&gt;なので、ここからはもう少し深い部分に入ります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Exif情報からリネームする&lt;a href=&quot;#exif情報からリネームする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、別の情報からファイルのリネームを掛けていきたいと思います。&lt;/p&gt;&lt;p&gt;画像ファイルは、「Exif」という情報を持っています。（Exchangeable image file format というらしいです。）&lt;/p&gt;&lt;p&gt;カメラの ISO だったり、 F 値だったりその時に撮影したカメラの情報とかが画像ファイルの中に色々と入っているわけです。&lt;/p&gt;&lt;p&gt;そして、その Exif の情報の中には「ファイルの作成日時」が存在します。 PowerShell 標準の&lt;code&gt;CreationTime&lt;/code&gt;でも出来そうなもんですが、今回はそのカメラの情報も欲しいので、 Exif という角度から切り込みます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Exif取得に使うツール&lt;a href=&quot;#exif取得に使うツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、 Exif 取得に使うツールは、 Phil Harvey さんが開発している「ExifTool」というものです。この方面では一般的なツールみたいですね。&lt;/p&gt;&lt;p&gt;このサイトから exe をダウンロードしていきましょう。&lt;/p&gt;&lt;a href=&quot;https://exiftool.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://exiftool.org/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;exiftool.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ExifTool by Phil Harvey&lt;/div&gt;&lt;div&gt;A command-line application and Perl library for reading and writing EXIF, GPS, IPTC, XMP, makernotes and other meta information in image, audio and video files. For Windows, MacOS, and Unix systems.&lt;/div&gt;&lt;div&gt;exiftool.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ExifToolを使って、ファイル作成日時からリネームする&lt;a href=&quot;#exiftoolを使ってファイル作成日時からリネームする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使っていきます。以下のコマンドを実行する際には、実行ディレクトリに&lt;code&gt;exiftool.exe&lt;/code&gt;を配置して使っていきます。&lt;/p&gt;&lt;p&gt;詳しい使い方・仕様は、ダウンロードサイトにありますが、実際に実行してみたいコマンドを以下で紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ファイルのCreateDateからリネームする&lt;a href=&quot;#ファイルのcreatedateからリネームする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、ファイルの作成日時からリネームしていきましょう。&lt;/p&gt;&lt;p&gt;流れとしては、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Start-Process&lt;/code&gt;で実行する処理のプロセスを設定。（&lt;code&gt;PassThru&lt;/code&gt;を入れないとプロセスの戻り値を取れません。&lt;code&gt;wait&lt;/code&gt;でプロセス終了まで待ちます。）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;${folderDir}\exiftool&quot;&lt;/code&gt;でディレクトリ内にある&lt;code&gt;exiftool.exe&lt;/code&gt;を指定します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exiftool&lt;/code&gt;に使う引数は、&lt;code&gt;ArgumentList&lt;/code&gt;の引数の中に配置します。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ArgumentList&lt;/code&gt;の引数の中には、&lt;code&gt;&quot;-FileName&amp;lt;CreateDate&quot;&lt;/code&gt;を指定して、ファイルの作成日時からファイル名を変えるようにします。フォーマットは、&lt;code&gt;&quot;%Y%m%d%H%M%S.%%e&quot;&lt;/code&gt;として名付けます。&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; Env:\USERNAME).Value;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;C:\Users\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd &lt;/span&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$proc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Start-Process&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;FilePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\exiftool&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-FileName&amp;lt;CreateDate&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;-d&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;%Y%m%d%H%M%S.%%e&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NoNewWindow &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;wait;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$proc.ExitCode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CreateDateフィールドを作る（画像ファイル版）&lt;a href=&quot;#createdateフィールドを作る画像ファイル版&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかし、ファイルによっては、&lt;code&gt;CreateDate&lt;/code&gt;のフィールドがない画像ファイルがあったりもします。&lt;/p&gt;&lt;p&gt;その場合に、&lt;code&gt;CreateDate&lt;/code&gt;フィールドを作ってあげましょう。&lt;/p&gt;&lt;p&gt;次は、&lt;code&gt;&quot;-CreateDate&amp;lt;FileCreateDate&quot;&lt;/code&gt;と引数に指定して、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2_create_date_setting;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; Env:\USERNAME).Value;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$toCreateDateDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;1-2_create_date_setting&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;C:\Users\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toCreateDateDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$proc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Start-Process&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;FilePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\exiftool&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-CreateDate&amp;lt;FileCreateDate&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;-d&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;%Y:%m:%d:%H:%M:%S&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NoNewWindow &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;wait;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$proc.ExitCode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;CreateDateフィールドを作る（動画ファイル版）&lt;a href=&quot;#createdateフィールドを作る動画ファイル版&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかしながら、画像ファイルと違って、僕が撮影した動画ファイルの&lt;code&gt;CreateDate&lt;/code&gt;には、実際に撮影した日時とは別の情報が入っていました。&lt;/p&gt;&lt;p&gt;そこで次は、&lt;code&gt;&quot;-CreateDate&amp;lt;FileModifyDate&quot;&lt;/code&gt;と引数に指定して、 Exif 内にある更新日時から&lt;code&gt;CreateDate&lt;/code&gt;の情報を作成します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1_movie_escaping;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; Env:\USERNAME).Value;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$toCreateDateDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;1-1_movie_escaping&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;C:\Users\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\Downloads\picture_backup\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toCreateDateDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$proc&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Start-Process&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;FilePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\exiftool&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-CreateDate&amp;lt;FileModifyDate&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;-d&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;%Y:%m:%d:%H:%M:%S&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$folderDir&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NoNewWindow &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;PassThru &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;wait;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$proc.ExitCode&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;しかし、もうファイル作成日時の情報が一切無い場合もある。&lt;a href=&quot;#しかしもうファイル作成日時の情報が一切無い場合もある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかしながら、もう作成日時の情報がファイルの中に一切無い場合もあります。（LINE からダウンロードする時とか。）&lt;/p&gt;&lt;p&gt;なので、そういうイレギュラー画像ファイルには、もう自分が日時を指定してリネームしてあげるしかありません！&lt;/p&gt;&lt;p&gt;PowerShell 上でプロンプトしてリネームしましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$number&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Format &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;yyyyMMddHH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Format &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;yyyyMMddH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;UFormat &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;%Y&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Get-Date&lt;/span&gt;&lt;span&gt;).AddYears(&lt;/span&gt;&lt;span&gt;-1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;UFormat &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;%Y&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$iscorrect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$iscorrect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$false&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Read-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Input prefix of pictures (yyyyMMddHH)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;$date_formatted.length&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$date_formatted&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-like&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$iscorrect&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path . &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;($_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_this&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year_last&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;*&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-notlike&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;*.exe&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-and&lt;/span&gt;&lt;span&gt; $_ &lt;/span&gt;&lt;span&gt;-isnot&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.IO.DirectoryInfo&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.GetType&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&quot;true&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$number_zeropadded&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;{0:0000}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$number&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$ext&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.IO.Path&lt;/span&gt;&lt;span&gt;]::GetExtension($_)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_formatted&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;number_zeropadded&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Rename-Item&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;.\&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NewName &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$newName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$number&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.GetType&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&quot;false&quot;&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;span&gt;.Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そして、加工した画像ファイルに、 Exif 情報を与える&lt;a href=&quot;#そして加工した画像ファイルに-exif-情報を与える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、ここまででは筆者は終わりたくありません。&lt;/p&gt;&lt;p&gt;最近のフラッグシップスマホのカメラで撮る画像ファイルって、容量がデカくありませんか？　5 MB なんて優に超えますよね。&lt;/p&gt;&lt;p&gt;なので、僕は画像ファイルを jpg → webp に変換して容量を下げて、その webp に対して Exif 情報を付与し直すこともしてみました。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Exif 情報を元 JPG ファイルから与える&lt;a href=&quot;#exif-情報を元-jpg-ファイルから与える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デカすぎる画像ファイルを webp に加工した後、その元 jpg ファイルが立ち並ぶディレクトリの中に webp ファイルを格納します。&lt;/p&gt;&lt;p&gt;そうしたら、このコマンドで webp に Exif 情報を与えます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.webp | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ForEach-Object&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$jpg&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.BaseName&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;.jpg&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;Test-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$jpg&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$webpFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $_&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.FullName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Start-Process&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;FilePath &lt;/span&gt;&lt;/span&gt;&lt;span&gt;exiftool.exe&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;-tagsFromFile&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$jpg&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&quot;-exif:all&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;$webpFilePath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;NoNewWindow &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Wait;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Exif情報を元JPGファイルから与える（DOS版）&lt;a href=&quot;#exif情報を元jpgファイルから与えるdos版&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕は当初、 DOS から全てのコマンドを実行したかったので、このコマンドの DOS 実行バージョンもあります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;START&lt;/code&gt;でプロセスを実行、&lt;code&gt;/WAIT&lt;/code&gt;オプションで PowerShell の処理終了まで PowerShell を開きっぱなしにします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Command&lt;/code&gt;の中に、 PowerShell で実行するコマンドを書きます。&lt;/li&gt;
&lt;li&gt;そのコマンドの中の、ダブルクォーテーションはバックスラッシュ（円マーク）でエスケープしてあげましょう。&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;START&lt;/span&gt;&lt;span&gt; /WAIT &lt;/span&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;span&gt; -Command &lt;/span&gt;&lt;span&gt;&quot;Get-ChildItem *.webp | ForEach-Object {$jpg = $_.BaseName + \&quot;&lt;/span&gt;&lt;span&gt;.jpg\&lt;/span&gt;&lt;span&gt;&quot;; if (Test-Path $jpg) {$webpFilePath = $_.FullName; Start-Process -FilePath exiftool.exe -ArgumentList \&quot;&lt;/span&gt;&lt;span&gt;-tagsFromFile\&lt;/span&gt;&lt;span&gt;&quot;,$jpg,\&quot;&lt;/span&gt;&lt;span&gt;-exif:all\&lt;/span&gt;&lt;span&gt;&quot;,$webpFilePath -NoNewWindow -Wait}}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;こうすると、Googleフォトにて・・・&lt;a href=&quot;#こうするとgoogleフォトにて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上記の処理をしてあげることで、 Google フォトにアップロードすると、
①容量が減った webp の状態で、②撮影日時を保持した状態で、③カメラの情報も保持した、写真が出来上がります！
&lt;img loading=&quot;lazy&quot; width=&quot;1110&quot; height=&quot;604&quot; src=&quot;/_astro/11.D_Wnz94F_ZhCK6J.webp&quot; srcset=&quot;/_astro/11.D_Wnz94F_15KC1L.webp 640w, /_astro/11.D_Wnz94F_ZnWntq.webp 750w, /_astro/11.D_Wnz94F_22d2EC.webp 828w, /_astro/11.D_Wnz94F_2cN6VR.webp 1080w, /_astro/11.D_Wnz94F_ZhCK6J.webp 1110w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本記事のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;PowerShell から、ファイルの&lt;code&gt;LastWriteTime&lt;/code&gt;を見てファイルをリネーム出来る。&lt;/li&gt;
&lt;li&gt;しかし、もう少しちゃんとリネームしたかったら、「ExifTool」を使うのがオススメ。&lt;/li&gt;
&lt;li&gt;「ExifTool」では、&lt;code&gt;CreateDate&lt;/code&gt;フィールドを使って撮影日時でリネーム出来る。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CreateDate&lt;/code&gt;フィールドが無い場合は、画像では&lt;code&gt;FileCreateDate&lt;/code&gt;、動画では&lt;code&gt;FileModifyDate&lt;/code&gt;フィールドから編集できる。&lt;/li&gt;
&lt;li&gt;ファイルの Exif 情報に全く情報がない場合は、自動採番したり、別の画像ファイルから Exif 情報を引っ張れる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;PowerShell は最近使ってなかったので、改めて便利だなと感じました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんかExifでリネームするはずが、カメラの情報まで出てくるとは・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ファイルの情報量って、思った以上に深かったな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】「Exception: Invalid argument: id」が出た時の対処方法</title><link>https://endorphinbath.com/posts/gas-error-invalid-augument-id/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-error-invalid-augument-id/</guid><description>Google Apps Scriptで開発を行っている際に、たまに遭遇するエラー文です。シートとかファイルのオブジェクトに関係してきます。</description><pubDate>Sat, 17 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今まで動いてたのに、なんか動かなくなった・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何が起きているんだ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;事象の確認&lt;a href=&quot;#事象の確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Script （GAS） で開発を行っている際に、&lt;code&gt;Exception: Invalid argument: id&lt;/code&gt;というエラーメッセージに遭遇することは、たまに起こります。&lt;/p&gt;&lt;p&gt;このエラーは、関数に無効または不正な ID が渡された場合に発生します。&lt;/p&gt;&lt;p&gt;例えば、こんな感じのスクリプトを走らせた時に遭遇することがあります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`moveFileToFolder: 77777777777777777777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Move file to folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`moveFileToFolder: &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;toFolder&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;moveTo&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;toFolder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ログ結果は以下の感じです。ぼかしている部分は、 Google ドライブのフォルダのIDです。
&lt;img loading=&quot;lazy&quot; width=&quot;971&quot; height=&quot;429&quot; src=&quot;/_astro/01.NyrqNynd_Z2hkcUc.webp&quot; srcset=&quot;/_astro/01.NyrqNynd_jdJNY.webp 640w, /_astro/01.NyrqNynd_1qAmkx.webp 750w, /_astro/01.NyrqNynd_1okptx.webp 828w, /_astro/01.NyrqNynd_Z2hkcUc.webp 971w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この場合は、&lt;code&gt;202402&lt;/code&gt;というキーが&lt;code&gt;folderDict&lt;/code&gt;の中にないために、本エラーが発生しました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;本エラー文の解決方法の候補&lt;a href=&quot;#本エラー文の解決方法の候補&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;ドキュメント、スプレッドシート、スライド、フォルダなどのIDの確認&lt;/li&gt;
&lt;li&gt;引数に渡している ID が、&lt;code&gt;undefined&lt;/code&gt;または&lt;code&gt;null&lt;/code&gt;かどうかの確認&lt;/li&gt;
&lt;li&gt;API のリファレンス確認&lt;/li&gt;
&lt;li&gt;ドキュメント、スプレッドシート、スライド、フォルダなどへのアクセス権の確認&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Script の関連書籍&lt;a href=&quot;#google-apps-script-の関連書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script Webアプリ開発 第4版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script クローリング＆スクレイピングのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スクリプトのロジックがバグってる訳じゃなかったんだあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;フォルダを作り忘れないようにな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、JavaScript】月末や月またぎも考慮した日付の計算をする</title><link>https://endorphinbath.com/posts/gas-date-diff-over-the-month/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-date-diff-over-the-month/</guid><description>JavaScriptで日付を扱う際に、月またぎを考慮した計算も入れなければならないことがあります。その場合にどのような関数で取れるかどうかを紹介します。結局はタイムスタンプを使う方法に帰着するもんですよね。</description><pubDate>Tue, 13 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;月またぎの日付の計算がしたいなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;結構、野放しにしていたこの問題。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;調べても調べても・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、跨ぐか&lt;/div&gt;&lt;/div&gt;&lt;p&gt;※当ページはアフィリエイト広告を利用しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本的な日付の取得&lt;a href=&quot;#基本的な日付の取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、 JavaScript では、&lt;code&gt;Date&lt;/code&gt;オブジェクトを使用して日付を扱います。新しい日付を作成するには、以下のようにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 今日の日付&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;specificDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2024&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// 2024年1月13日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;日本時間を考慮した日付の取得&lt;a href=&quot;#日本時間を考慮した日付の取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、タイムゾーンを考慮した日付の取得はこんな感じで可能です。&lt;/p&gt;&lt;p&gt;まあ、下準備はこんなもんでしょうか。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timezoneDiffOfTokyo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getTimezoneOffset&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;540&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timezoneDiffOfTokyo&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;日付の成分の取得と設定&lt;a href=&quot;#日付の成分の取得と設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;日付から年、月、日などを取得または設定するには、&lt;code&gt;get&lt;/code&gt;および&lt;code&gt;set&lt;/code&gt;メソッドを使用します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFullYear&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 注意: 月は0から始まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setFullYear&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2025&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setMonth&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// 12月&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setDate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;25&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力結果はこうなります。月の部分だけ注意が必要です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Mon Feb 12 2024 20:29:13 GMT-0500 (Eastern Standard Time)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2024&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;12&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Thu Dec 25 2025 20:29:13 GMT-0500 (Eastern Standard Time)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;25&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;日付の計算&lt;a href=&quot;#日付の計算&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;明日の日付や、 1 週間前といった日付を取得したければこう書けます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tomorrow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;tomorrow&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lastWeek&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;lastWeek&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、これだけだと、月またぎを考慮した日付計算ができません。&lt;/p&gt;&lt;p&gt;例えば、 2/13 から 1/31 を引くと、&lt;code&gt;-18&lt;/code&gt;になってダメダメです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;月またぎで 2 つの日付の差が分かる関数&lt;a href=&quot;#月またぎで-2-つの日付の差が分かる関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、本題です。&lt;/p&gt;&lt;p&gt;まずは、コードから見せます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get boolean value whether the difference between formerDay and latterDay is over or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isDateDiffOver&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;abs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;()) &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 555555555555555555555555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;abs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;()) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;diffDates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setDate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// Get end of month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;diffDates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;diffDates&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 666666666666666666666666666666666666666666666666666666666666666666666`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;diffDates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 77777777777777777777777777777777777777777777777777777777777777777777777`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数は、&lt;code&gt;formerDay&lt;/code&gt;（前者の日付）と&lt;code&gt;latterDay&lt;/code&gt;（後者の日付）の差が、&lt;code&gt;targetDiff&lt;/code&gt;の数値を超えているかどうかを取得できるものです。&lt;/p&gt;&lt;p&gt;文章で書くとややこしいので、図付きで説明します。
&lt;img loading=&quot;lazy&quot; width=&quot;1604&quot; height=&quot;899&quot; src=&quot;/_astro/01.veci2jvu_ZdHWjb.webp&quot; srcset=&quot;/_astro/01.veci2jvu_1ugL4k.webp 640w, /_astro/01.veci2jvu_Z2rzXOw.webp 750w, /_astro/01.veci2jvu_1hFbvW.webp 828w, /_astro/01.veci2jvu_Z1jRnha.webp 1080w, /_astro/01.veci2jvu_ZivQmY.webp 1280w, /_astro/01.veci2jvu_ZdHWjb.webp 1604w&quot; /&gt;&lt;/p&gt;&lt;p&gt;考え方としては、最終的には緑色の範囲と青色の範囲が欲しいので、下記の流れになります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;latterDay&lt;/code&gt;（後者の日付）と、&lt;code&gt;formerDay&lt;/code&gt;（前者の日付）に 2 ヶ月以上の差があれば、&lt;code&gt;true&lt;/code&gt;になります。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diffDates&lt;/code&gt;を宣言するときは、&lt;code&gt;latterDay&lt;/code&gt;（後者の日付）から&lt;code&gt;formerDay&lt;/code&gt;（前者の日付）を引きます。&lt;/li&gt;
&lt;li&gt;そして、&lt;code&gt;formerDay → End of Month&lt;/code&gt;の部分の範囲が取れていないので、&lt;code&gt;formerDay.setDate(0)&lt;/code&gt;をします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;formerDay.setDate(0)&lt;/code&gt;をすると、前者の月の末日が取得できます。&lt;/li&gt;
&lt;li&gt;そして、&lt;code&gt;formerDay.getDate()&lt;/code&gt;を足すと、緑色の範囲と青色の範囲が取得できたことになります。&lt;/li&gt;
&lt;li&gt;緑色の範囲と青色の範囲に&lt;code&gt;targetDiff&lt;/code&gt;より大きい差があれば、&lt;code&gt;true&lt;/code&gt;になります。&lt;/li&gt;
&lt;li&gt;緑色の範囲と青色の範囲が&lt;code&gt;targetDiff&lt;/code&gt;より小さかったら、&lt;code&gt;false&lt;/code&gt;になります。（指定した差の中に収まっている。）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;やっぱりタイムスタンプが最強なのかもしれない&lt;a href=&quot;#やっぱりタイムスタンプが最強なのかもしれない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;とまあ、年月日のパラメータを使ってこねていきますが・・・&lt;/p&gt;&lt;p&gt;この考え方で計算すると、じゃあ 12 月と 1 月の場合はどうするの？ とか、&lt;code&gt;formerDay&lt;/code&gt;が&lt;code&gt;latterDay&lt;/code&gt;より新しい日付だったらどうするの？ とか、何だか色々と面倒くさいことが残ってしまいます。&lt;/p&gt;&lt;p&gt;そこで、日付同士を計算する時は、「UNIXタイムスタンプ」を使うのが最善策なのかもしれません。
（JavaScript の&lt;code&gt;Date&lt;/code&gt;型でググっても、あんまり UNIX タイムスタンプで計算する方法がヒットしませんよね・・・）&lt;/p&gt;&lt;p&gt;UNIX タイムスタンプとは、巷で有名なわわわさんから引用すると・・・&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;時間の表現方法だよ。「1970年1月1日午前0時0分0秒（UTC）」からの経過秒数で表現するよ。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;だそうです。&lt;/p&gt;&lt;p&gt;まあ、時刻を表す絶対的な指標ということですかね。&lt;/p&gt;&lt;p&gt;それでは、 UNIX タイムスタンプを活用した関数です。これが本命。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get boolean value whether the difference between formerDay and latterDay is over or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* formerDay = 2022/01/23; latterDay = 2022/01/24; targetDiff = 1; return false;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* formerDay = 2022/01/23; latterDay = 2022/01/24; targetDiff = 0; return true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isDateDiffOver&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 11111111111111111111111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;timestamp2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;abs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;timestamp2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetDiff&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 44444444444444444444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isDateDiffOver: 999999999999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;UNIX タイムスタンプは、日付ではなく整数型の値なので、比較をするのが物凄く楽です。もう、こんなにコードが短くなってしまいました。&lt;/p&gt;&lt;p&gt;UNIX タイムスタンプはミリ秒単位で記録されるものなので、秒間や日にちの比較をする際には 1000 で割ってあげると良いでしょう。&lt;/p&gt;&lt;p&gt;これで、じゃあ 12 月と 1 月の場合はどうするの？とかの問題が解消されます。しかし、「&lt;code&gt;formerDay&lt;/code&gt;が&lt;code&gt;latterDay&lt;/code&gt;より新しい日付だったらどうするの？」とかの問題が残っています。&lt;/p&gt;&lt;p&gt;そこで、もう一つ関数を用意します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get boolean value whether latterDay is later than formerDay or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Date()}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* formerDay = 2022/01/25; latterDay = 2022/01/24; return false;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* formerDay = 2022/01/23; latterDay = 2022/01/24; return true;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isLatterDayLater&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;formerDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;latterDay&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTime&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;timestamp2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timestamp1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isLatterDayLater: 88888888888888888888888888888888888888888888888888888888888888888888888888`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isLatterDayLater: 999999999999999999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この関数を使うことで、&lt;code&gt;formerDay&lt;/code&gt;と&lt;code&gt;latterDay&lt;/code&gt;の前後関係を判定することが出来ます。&lt;/p&gt;&lt;p&gt;なので、この節で紹介した、&lt;code&gt;isDateDiffOver()&lt;/code&gt;と&lt;code&gt;isLatterDayLater()&lt;/code&gt;で論理演算すれば日付に関する計算は問題ないのではないでしょうか。（1970 年 1 月 1 日午前 0 時 0 分 0 秒が基準なのをお忘れなく。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Script の関連書籍&lt;a href=&quot;#google-apps-script-の関連書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script Webアプリ開発 第4版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script クローリング＆スクレイピングのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、日付の差が取れたぞ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;日付の操作って、本当に面倒くさいよな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2024年01月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202401/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202401/</guid><description>kinkingame24bitのYouTube等の更新状況になります。TimberbornとTerra Nilのシリーズが更新されています。</description><pubDate>Thu, 01 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2024年1月に投稿した動画の一覧&lt;a href=&quot;#2024年1月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：10&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】ストォォォップ！ 流れを見極めな！ #05【ゆっくり実況】&lt;a href=&quot;#timberbornストォォォップ-流れを見極めな-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xmTj_B5lh9I/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】ドラァァァッグ！ 鼻くそで治しな！ #06【ゆっくり実況】&lt;a href=&quot;#timberbornドラァァァッグ-鼻くそで治しな-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/__Ti-MRfdbU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】スリィィィップ！ 干ばつで狂いな！ #07【ゆっくり実況】&lt;a href=&quot;#timberbornスリィィィップ-干ばつで狂いな-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/-VMRqdEI1AE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】スコォォォップ！ で掘るよりコレだな！ #08【ゆっくり実況】&lt;a href=&quot;#timberbornスコォォォップ-で掘るよりコレだな-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nBhP7Rq3oR8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】チョリィィィッス！ 世渡りを極めな！ #09【ゆっくり実況】&lt;a href=&quot;#timberbornチョリィィィッス-世渡りを極めな-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/UxBH8btYfNU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】荒廃の焦土をゆっくり緑地化 #01【ゆっくり実況】&lt;a href=&quot;#terra-nil荒廃の焦土をゆっくり緑地化-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7uKRPgaAFeY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】モリモリと生えていく森 #02【ゆっくり実況】&lt;a href=&quot;#terra-nilモリモリと生えていく森-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dT40aWY3OPc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】シカジカと主張する鹿 #03【ゆっくり実況】&lt;a href=&quot;#terra-nilシカジカと主張する鹿-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/NKSgifvE02E/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】サスサスと土地を隆起させる砂州 #04【ゆっくり実況】&lt;a href=&quot;#terra-nilサスサスと土地を隆起させる砂州-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/oi3wYwOYcy0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Terra Nil】サンサンと輝くサンゴ #05【ゆっくり実況】&lt;a href=&quot;#terra-nilサンサンと輝くサンゴ-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2024/01/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/w8cPdEQ-ScY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は10本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【JavaScript】数値を0埋めされた文字列として加工する</title><link>https://endorphinbath.com/posts/js-number-zero-padding/</link><guid isPermaLink="true">https://endorphinbath.com/posts/js-number-zero-padding/</guid><description>JavaScriptで、IDなどを採番する時に0埋めした数値が欲しい時があります。その時に利用できるスニペットを紹介します。</description><pubDate>Wed, 17 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この数字、0埋めしたい！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、埋めるか&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;0埋めする関数の紹介&lt;a href=&quot;#0埋めする関数の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、具体的な数字で、どのように埋めるのかの紹介です。
JavaScriptやGoogle Apps Scriptで使える形で書いていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;具体的にやるとこんな感じ。&lt;a href=&quot;#具体的にやるとこんな感じ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;具体的に0埋めする。
こうすると、例えば「23」を渡した時に「0023」の文字列が返ってきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get number padded by zero and formatted as String.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zeroPadding&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;digit&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;`&quot;0000&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;もう少し抽象化したい。&lt;a href=&quot;#もう少し抽象化したい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、具体的な数字で、どのように埋めるのかの紹介です。
こうすると、さっきと同じ結果を返しますが、桁数を変数として持たせることが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get number padded by zero and formatted as String.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;digit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zeroPadding&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;digit&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;repeat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;digit&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt;digit&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、これさえ覚えてればどこでも使えそうだぞ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、これから埋めるのには不自由しなさそうだな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GraphQL】基礎的な書き方から、AniList API用のMutationクエリ（複数レコード更新）まで。</title><link>https://endorphinbath.com/posts/graphql-base-to-anilist-mutation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/graphql-base-to-anilist-mutation/</guid><description>GraphQLの基礎的な書き方から、初心者でも迷わずにクエリを構築できるように、QueryとMutationの書き方を紹介します。そして、実際にAniListというサービスで叩いた結果も紹介します。</description><pubDate>Tue, 16 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あぁぁ、目が回りそうだぁ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GraphQLを組み立てているね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これって、()なの？　{}なの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おさらいしてみましょうか&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GraphQLを触ってみました&lt;a href=&quot;#graphqlを触ってみました&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なので、今回はGraphQLに関する記事を書いてみます。
本記事では、GraphQLの基礎的な書き方をから、初心者でも迷わずにクエリを構築できるように、基本的なQueryとMutationの書き方を紹介します。
後の方では、実際にAniListというサービスで叩いた結果を紹介します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GraphQLの基本的な部分&lt;a href=&quot;#graphqlの基本的な部分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、GraphQLとは？&lt;/p&gt;&lt;p&gt;スゴイざっくり言うと、「APIにアクセスするための仕組み」です。&lt;/p&gt;&lt;p&gt;LinuxでおなじみのRed Hatさんの記事ではこう書いてあります。（会社の業務で触ったLinuxなつかしい・・・）&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;GraphQL (グラフキューエル、グラフQL) とは、API (アプリケーション・プログラミング・インタフェース向けのクエリ言語とサーバーサイドのランタイムの両方を指します。GraphQL は、クライアントがリクエストしたデータのみを返すことを優先します。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.redhat.com/ja/topics/api/what-is-graphql&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;から引用&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;なるほど、クエリだけじゃなくてランタイムも引っくるめて「GraphQL」なんだな。
GraphQLは、同じAPIの仕組みの一つである「Rest API」と比べて、としては、データの取得や更新が行いやすいクエリ言語を備えています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;クエリを書く前に&lt;a href=&quot;#クエリを書く前に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;クエリを書く前に、以下の2点を確認する必要があります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. GraphQLスキーマ&lt;a href=&quot;#1-graphqlスキーマ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GraphQLスキーマは、GraphQLサーバーで提供されているデータの種類と構造を定義するものです。スキーマは、SDL（Schema Definition Language）と呼ばれる言語で記述されます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 取得したいデータ&lt;a href=&quot;#2-取得したいデータ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;どのようなデータを取得したいかを明確にしましょう。具体的な項目名や関連データなども考慮する必要があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;クエリの書き方&lt;a href=&quot;#クエリの書き方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;基本構文&lt;a href=&quot;#基本構文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GraphQLクエリの基本構文は次のとおりです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 取得したいデータのフィールドを記述&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、ユーザー情報と投稿情報を取得するクエリは次のようになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;posts&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このクエリは、&lt;code&gt;user&lt;/code&gt;フィールドと&lt;code&gt;posts&lt;/code&gt;フィールドを指定しています。&lt;code&gt;user&lt;/code&gt;フィールドではIDとユーザー名を取得し、&lt;code&gt;posts&lt;/code&gt;フィールドではID、題名、内容を取得します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Arguments&lt;a href=&quot;#arguments&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;取得する情報に条件を付けることが出来ます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この場合は、名前が「Tom」だけのユーザーを取得することになります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Nest&lt;a href=&quot;#nest&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ときどき、取得する情報が細分化されて、さらに属性を持っていたりもします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この場合は、ユーザーの誕生日が、さらに年、月、日に分かれているパターンとなります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Variables&lt;a href=&quot;#variables&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、属性のパラメータ値は、まとめて別の場所で宣言することが出来ます。
例えば、こんなクエリに対して、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Tom&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2023&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;query&lt;/code&gt;フィールドとは別に、&lt;code&gt;variables&lt;/code&gt;フィールドとして、パラメータを一括に宣言できます。
宣言方法は次の節で・・・&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Tom&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;birthYear&lt;/span&gt;&lt;span&gt;: 2023&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$birthYear&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;users&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$birthYear&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;パラメータに使える型は、String、Int、Float、Booleanなど、色々あります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;JavaScriptとかでJSON.stringifyすれば・・・&lt;a href=&quot;#javascriptとかでjsonstringifyすれば&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;JavaScritpなどでクエリを作る際に、JSON.stringify()を使えば、クエリとは別に&lt;code&gt;variables&lt;/code&gt;を宣言できます。
例えば、JavaScriptライクな言語「Google Apps Script」からGraphQLを打つ場合は、こんな感じでAPIにアクセスする記述が出来ます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Tom&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;birthYear&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2023&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`query ($username: String, $birthYear: Int) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;users(name: $userName) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;birthDate(year: $birthYear) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}, &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Mutation&lt;a href=&quot;#mutation&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;さて、&lt;code&gt;query&lt;/code&gt;フィールドでは、データを参照するのが主な用途ですが、データを書き換えたりもしたくなります。
そこで使うのが、&lt;code&gt;mutation&lt;/code&gt;フィールドです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mutation&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;createUser&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Mary&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt; }) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;mutation&lt;/code&gt;フィールドでは、編集する属性を指定して、どの属性をレスポンスとして受け取るかを指定することが出来ます。上記のクエリの場合だと、IDがアッチ側で自動採番だとしてこんな風に返ってきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&quot;data&quot;:{&quot;createUser&quot;:{&quot;id&quot;:3,&quot;name&quot;:&quot;Mary,&quot;age&quot;:94}}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Mutationでvariables&lt;a href=&quot;#mutationでvariables&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;mutation&lt;/code&gt;フィールドでも、もちろん&lt;code&gt;variables&lt;/code&gt;が利用できます。
宣言方法は、「JavaScriptとかでJSON.stringifyすれば・・・」の節と同様。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Mary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: 94&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mutation&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;createUser&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt; }) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Mutation内のNestにvariablesを使う&lt;a href=&quot;#mutation内のnestにvariablesを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;mutation&lt;/code&gt;フィールド内で入れ子になっている部分に&lt;code&gt;variables&lt;/code&gt;を使いたい場合に、こんがらがってしまうかもしれません。（実際に僕はこんがらがりました。）
こんな風にします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Mary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: 94&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;birthYear&lt;/span&gt;&lt;span&gt;: 2005&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mutation&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;createUser&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$birthYear&lt;/span&gt;&lt;span&gt;}) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;あくまで、&lt;code&gt;createUser&lt;/code&gt;の「{}」の中身は「参照」したい属性なので、「()」の引数に変数を「設定」しましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;Mary&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: 94&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;birthYear&lt;/span&gt;&lt;span&gt;: 2005&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mutation&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) {                                           // &amp;lt;- 変数を設定したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;createUser&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;: { &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$userName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$age&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$birthYear&lt;/span&gt;&lt;span&gt;}) {  // &amp;lt;- 対象を設定したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;                             // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;                           // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;age&lt;/span&gt;&lt;span&gt;                            // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;birthDate&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;                         // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;                        // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;span&gt;                          // &amp;lt;- 参照したい&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そして、実際にAniList APIで叩いてみた&lt;a href=&quot;#そして実際にanilist-apiで叩いてみた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「AniList」というのは、自分が今までに見たアニメや、これから見たいアニメ、読みたいマンガなどを登録、管理できるサービスです。&lt;/p&gt;&lt;a href=&quot;https://anilist.co/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://anilist.co/img/icons/favicon-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;AniList&lt;/span&gt;&lt;/div&gt;&lt;div&gt;AniList&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;anilist.co&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;APIのリファレンスのGetting-Startedは&lt;a href=&quot;https://anilist.gitbook.io/anilist-apiv2-docs/overview/graphql/getting-started&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;で、GraphQLの属性のリファレンスは&lt;a href=&quot;https://anilist.github.io/ApiV2-GraphQL-Docs/&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;その管理しているデータベースには、「AniList API」を使って参照することができて、編集することも出来ます。
こんな風に打ち込みます。まずは&lt;code&gt;query&lt;/code&gt;でデータ取得です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;anilistUserName&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;userid&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;anilistUserId&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;MediaListCollection&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$username&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;userId&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$id&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; ANIME&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;lists&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;entries&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;media&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;native&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;coverImage&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;extraLarge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;siteUrl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;studios&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isMain&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; FAVOURITES&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; POINT_100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;completedAt&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;updatedAt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;次で、&lt;code&gt;mutation&lt;/code&gt;でデータの編集をしています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;mediaId&lt;/span&gt;&lt;span&gt;: 21127&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;CURRENT&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;: 100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;span&gt;: 13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;completedAtYear&lt;/span&gt;&lt;span&gt;: 2022&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;completedAtMonth&lt;/span&gt;&lt;span&gt;: 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;completedAtDay&lt;/span&gt;&lt;span&gt;: 13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;エル・プサイ・コングルゥ。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mutation&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$mediaId&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$status&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MediaListStatus&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$score&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Float&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$progress&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$completedAtYear&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$completedAtMonth&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$completedAtDay&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Int&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$notes&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;SaveMediaListEntry&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;mediaId&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$mediaId&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$status&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$score&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$progress&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$notes&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;completedAt&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$completedAtYear&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$completedAtMonth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;$completedAtDay&lt;/span&gt;&lt;span&gt;}) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;mediaId&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span&gt; POINT_100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;completedAt&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;レスポンス:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&quot;data&quot;:{&quot;SaveMediaListEntry&quot;:{&quot;id&quot;:246757832,&quot;mediaId&quot;:21127,&quot;status&quot;:&quot;CURRENT&quot;,&quot;score&quot;:100,&quot;progress&quot;:13,&quot;completedAt&quot;:{&quot;year&quot;:2022,&quot;month&quot;:1,&quot;day&quot;:13},&quot;notes&quot;:&quot;\u30a8\u30eb\u30fb\u30d7\u30b5\u30a4\u30fb\u30b3\u30f3\u30b0\u30eb\u30a5\u3002&quot;}}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;複数レコードを編集したいときは？&lt;a href=&quot;#複数レコードを編集したいときは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AniList APIでは、「1分間に90リクエストまで」のレート制限が設けられています。
そのため、複数のアニメを編集したいときは、クエリをまとめて送りたいですよね。
Google Apps Scriptで組むと、こんな風に複数レコードに対する1クエリが作成できます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;mediaId&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;21127&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;CURRENT&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;score&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;progress&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtYear&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2021&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtMonth&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtDay&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;notes&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;エル・プサイ・コングルゥ。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;mediaId&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;9253&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;status&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;PLANNING&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;score&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;90&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;progress&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtYear&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2017&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtMonth&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;completedAtDay&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;notes&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ファーーーハッハッハッハ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getRequestOptionsAnilist: 3333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;saveMedia&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: SaveMediaListEntry (mediaId: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;mediaId&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, status: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, score: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, progress: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, notes: &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;, completedAt: {year: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;completedAtYear&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, month: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;completedAtMonth&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, day: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;variableses&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;completedAtDay&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mediaId&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;score (format: POINT_100)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;progress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;completedAt {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;notes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`mutation {&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getRequestOptionsAnilist: 44444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Bearer &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;access_token&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`application/json`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`application/json`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;muteHttpExceptions &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記でミソなのは、&lt;code&gt;SaveMediaListEntry&lt;/code&gt;の前に、&lt;code&gt;saveMedia${i}:&lt;/code&gt;という風にフィールドに名前を付けている点です。&lt;/p&gt;&lt;p&gt;少し脱線しますが、1つのリクエストに付きのクエリの長さのレート制限は、確認することが出来ませんでした。まあ程々にでしょうか。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以上がGraphQLの基礎的なクエリの書き方と少し応用といった感じでした。
&lt;code&gt;query&lt;/code&gt;と&lt;code&gt;mutation&lt;/code&gt;を使いこなして、効果的にデータを取得・変更できるようになると、GraphQLの真価がより体感できるでしょう。
ぜひこれを参考に、日々の活動でGraphQLを活用してみてください。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほぁぁ、こう書くのか！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一回書けてしまえばなぁ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Cloud StorageのOAuth認証時に「Google ドキュメント内でエラーが発生しました。このページを・・・」が出てくる</title><link>https://endorphinbath.com/posts/gas-gcs-auth-error-in-doc/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-gcs-auth-error-in-doc/</guid><description>Google Apps ScriptでCloud Storageへの認証を行う時にエラーが発生して先に進めなくなりました。その原因を調べていると・・・</description><pubDate>Sun, 14 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか認証できなくなったぁぁ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_005.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわあ、何だろこれマジで・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;1週間前からコード変えてないよ！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;わけわかんねえな・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起こっているのか&lt;a href=&quot;#何が起こっているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、Google Apps Script（GAS）で、Googleドライブにある画像をGoogle Cloud Storage（GCS）にアップロードするために、GCSを認証する時のお話です。&lt;/p&gt;&lt;p&gt;まあ、Google Cloud Platform（GCP）で「APIとサービス」→「認証情報」→「OAuth 2.0 クライアント ID」の流れで、クライアントIDとクライアントシークレットを作っていつも通り認証します。
すると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;964&quot; height=&quot;346&quot; src=&quot;/_astro/01.C8RBZz1E_Z29XqL2.webp&quot; srcset=&quot;/_astro/01.C8RBZz1E_1VrPzt.webp 640w, /_astro/01.C8RBZz1E_Z2sKnB2.webp 750w, /_astro/01.C8RBZz1E_1y2uEq.webp 828w, /_astro/01.C8RBZz1E_Z29XqL2.webp 964w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おお、何だこれは&lt;/p&gt;&lt;p&gt;まあ、数分後にリフレッシュすればいいんだな&lt;/p&gt;&lt;p&gt;そんな調子でリフレッシュしてみますが・・・
&lt;img loading=&quot;lazy&quot; width=&quot;964&quot; height=&quot;346&quot; src=&quot;/_astro/01.C8RBZz1E_Z29XqL2.webp&quot; srcset=&quot;/_astro/01.C8RBZz1E_1VrPzt.webp 640w, /_astro/01.C8RBZz1E_Z2sKnB2.webp 750w, /_astro/01.C8RBZz1E_1y2uEq.webp 828w, /_astro/01.C8RBZz1E_Z29XqL2.webp 964w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれっ、同じ画面だ&lt;/p&gt;&lt;p&gt;どこのNPCかな？&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因を調査する&lt;a href=&quot;#原因を調査する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結局、何分後に読み込み直しても、何時間後に読み込み直しても、依然として同じ画面が出続けます。
IDとシークレットを入れているscriptPropertiesのキーとかも問題ないし、&lt;code&gt;OAuth2&lt;/code&gt;のライブラリがおかしいってことも無さそう。
（OAuth2のライブラリは、ライブラリID: &lt;code&gt;1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF&lt;/code&gt;のやつですね。）&lt;/p&gt;&lt;p&gt;僕が認証機能を作ったのが1週間前で、僕がOAuth2の&lt;a href=&quot;https://github.com/googleworkspace/apps-script-oauth2&quot; target=&quot;_blank&quot;&gt;リポジトリ&lt;/a&gt;を見た時の更新日時が2ヶ月前でした。なので、OAuth2は問題じゃない。&lt;/p&gt;&lt;p&gt;この「Google ドキュメント内でエラーが発生しました。このページを再読み込みするか、数分後にこのページをもう一度開いてみてください。」の文章で調べると、だいたいブラウザの閲覧履歴を消すという対策が出てきましたが、その方法でも解消しませんでした。
Googleから、色々とトラブルシューティングの候補が挙げられています。（でもこれも関係無さそう・・・期間内に新しい拡張機能入れてないんだよな）&lt;/p&gt;&lt;a href=&quot;https://support.google.com/drive/answer/7505592?hl=ja&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.google.com/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;support.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google ドキュメント、スプレッドシート、スライド、Google Vids の編集中のエラーのトラブルシューティング - Google ドライブ ヘルプ&lt;/div&gt;&lt;div&gt;「エラーが発生しました」というエラー メッセージが表示され、ドキュメント、スライド、スプレッドシート、Google Vids を編集できない場合は、問題のトラブルシューティングを行うことができます。今すぐファイルにアクセスして作業を再開する必要がある場合は、以下の手順でワークフローを再開できます。 ドキュメントが開かない場合は、以下のメッセージが表示されることがあります。 「エラーが発生&lt;/div&gt;&lt;div&gt;support.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;他には、PDFに変換する領域内に環境依存文字があることで同じエラー画面が出てくるらしいのです。なので、スプシの内容かと思いましたが、それは関係ありませんでした。（後述しますが）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なぜか認証機能が動いた&lt;a href=&quot;#なぜか認証機能が動いた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、何をしたら動いたかと言うと・・・
ブックとシートを作り直して、そのGASに丸々同じものを書き写したら、動きました！！
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;482&quot; src=&quot;/_astro/02.9zCNpSOS_11yn5K.webp&quot; srcset=&quot;/_astro/02.9zCNpSOS_2qgtDP.webp 640w, /_astro/02.9zCNpSOS_Z14SqXD.webp 750w, /_astro/02.9zCNpSOS_2o6S3n.webp 828w, /_astro/02.9zCNpSOS_1xxzw3.webp 1080w, /_astro/02.9zCNpSOS_Z2iPmzL.webp 1280w, /_astro/02.9zCNpSOS_Z1JF83Q.webp 1668w, /_astro/02.9zCNpSOS_11yn5K.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この画面は、OAuthからのリダイレクト時に、こんなスクリプトで表示する手筈になっているものです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; 認証コールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{null}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStorageService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Authorized!&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authCallback: 111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;center&amp;gt;認証完了&amp;lt;br&amp;gt;タブを閉じてください。&amp;lt;/center&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Not Authorized...&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`authCallback: 222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`認証エラー&amp;lt;br&amp;gt;認証情報をお確かめください。`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; 認証用サービス取得&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStorageService&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyClientId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;KEY_CLIENT_ID_SCRIPT_PROPERTY&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keyClientSecret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;KEY_CLIENT_SECRET_SCRIPT_PROPERTY&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getClientConfig&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isInputting&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keyClientId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;keyClientSecret&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getStorageService: 111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientSecret&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;EXE_TYPE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;authentication&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Authentication failed.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showModelessDialog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Authentication failed.&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;p&amp;gt;Because of the shotage of OAuth2.0 Client Information.&amp;lt;/p&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getStorageService: 22222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;provisioning&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationBaseUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/auth&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://accounts.google.com/o/oauth2/token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientId&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setClientSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cfg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientSecret&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setCallbackFunction&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;authCallback&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setPropertyStore&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PropertiesService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getScriptProperties&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setScope&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://www.googleapis.com/auth/devstorage.full_control&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setParam&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;login_hint&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Session&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveUser&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getEmail&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ふーむ、意味が分からない・・・&lt;/p&gt;&lt;p&gt;ちなみに、認証機能ではシートは全く参照しないというのと、シートの内容も作り直す前のシートと同じ内容にしました。
なので、スプシの内容は僕の場合は関係無さそうでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;思い当たる節は・・・&lt;a href=&quot;#思い当たる節は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そういえば、その1週間の間に、この認証機能があるブックの中にあるシートの内、AppSheetのデータベースとして連携させたものがあったなあ・・・
新しいブックでは、まだAppSheetに連携させているデータベースはない・・・
じゃあ、AppSheetに連携させればまた動かなくなるのかも？（AppSheetっていうのは、ノーコードでアプリが作れるサービスのことです）&lt;/p&gt;&lt;p&gt;まあ、こんな感じで新しいブックをAppSheetのDBとして連携させます。
&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;776&quot; src=&quot;/_astro/03.CHZvXzMt_ZYVKV8.webp&quot; srcset=&quot;/_astro/03.CHZvXzMt_Z1aKNTr.webp 640w, /_astro/03.CHZvXzMt_Z1KmPM8.webp 750w, /_astro/03.CHZvXzMt_zThOo.webp 828w, /_astro/03.CHZvXzMt_Z1RD1FE.webp 1080w, /_astro/03.CHZvXzMt_ZK3ERv.webp 1280w, /_astro/03.CHZvXzMt_28W5HN.webp 1668w, /_astro/03.CHZvXzMt_ZYVKV8.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、認証させてみると・・・アレ？
&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;482&quot; src=&quot;/_astro/02.9zCNpSOS_11yn5K.webp&quot; srcset=&quot;/_astro/02.9zCNpSOS_2qgtDP.webp 640w, /_astro/02.9zCNpSOS_Z14SqXD.webp 750w, /_astro/02.9zCNpSOS_2o6S3n.webp 828w, /_astro/02.9zCNpSOS_1xxzw3.webp 1080w, /_astro/02.9zCNpSOS_Z2iPmzL.webp 1280w, /_astro/02.9zCNpSOS_Z1JF83Q.webp 1668w, /_astro/02.9zCNpSOS_11yn5K.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;認証通っちゃったなあ・・・
結局、原因は分かりませんでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のまとめです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;今回、チェックした事柄&lt;a href=&quot;#今回チェックした事柄&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回チェックした事柄です。同じような事象が発生した時のチェック表としてご活用下さい。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;5分以上待ってからもう一度読み込む&lt;/li&gt;
&lt;li&gt;シートの内容（環境依存文字が入ってたりしないか）&lt;/li&gt;
&lt;li&gt;scriptPropertiesのキー&lt;/li&gt;
&lt;li&gt;OAuth2ライブラリの挙動&lt;/li&gt;
&lt;li&gt;ブラウザ（今回はChrome）の閲覧履歴の全消去&lt;/li&gt;
&lt;li&gt;別のブラウザを試す（普段使わないEdgeで試したりもしました）&lt;/li&gt;
&lt;li&gt;その他&lt;a href=&quot;https://support.google.com/drive/answer/7505592?hl=ja&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;に載っていること&lt;/li&gt;
&lt;li&gt;AppSheetとの連携&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;今後、気を付けたいこと&lt;a href=&quot;#今後気を付けたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自分の今後の心掛けたいこととして、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;GASの不具合でどうしても分からないときはブックを作り直す・・・1時間詰まったら作り直そう。&lt;/li&gt;
&lt;li&gt;Gitは怠けずにブランチを切る・・・個人用途で作っているものなので、ほとんどmainブランチにpushしてしまっていました。なので、ブックを作り直す時にすぐにコードを再現させるために、新機能を作るたびにブランチを切るようにします。&lt;/li&gt;
&lt;li&gt;スクリプトは定期的に動かすようにする・・・今回の事象が発生し始めた日時が分からず、原因が突き止めきれませんでした。なので、普段からコードを動かして原因のスコープを狭めて、即座にデバッグできるようにします。&lt;/li&gt;
&lt;li&gt;OAuthなどの認証機能があるブックは機能を肥大化させない・・・作り直しの時に大変になるので。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Scriptの関連書籍&lt;a href=&quot;#google-apps-scriptの関連書籍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3BhFB5j&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script Webアプリ開発 第4版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4g805wp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gnCfwm&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Google Apps Script クローリング＆スクレイピングのツボとコツがゼッタイにわかる本&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4gvlxeJ&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;腑に落ちない！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず動いて良かったがな・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】AppSheetでグラフを描くために数値データを線形補間する</title><link>https://endorphinbath.com/posts/gas-interpolation-for-appsheet/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-interpolation-for-appsheet/</guid><description>AppSheetで折れ線チャートを描くと、空欄の値は0に判定されてしまいます。場合によってはグラフが見にくくなる原因にもなります。そこで、値がないセルにデータを補間する方法を書きました。</description><pubDate>Sat, 13 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あーなんだ！ このグラフはぁぁぁ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おやおや、グラフに良くないことが起きたようだね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;気に入らん！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;気に入るようにしてみよう&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AppSheetっていうアプリ作成サービスがあります&lt;a href=&quot;#appsheetっていうアプリ作成サービスがあります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「AppSheet」という、ノーコードでアプリを開発できるサービスがあります。&lt;/p&gt;&lt;a href=&quot;https://about.appsheet.com/home/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/marketing-cms/assets/images/26/3a/941d1f494da3a58f0bc9c6823a8b/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;AppSheet&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google AppSheet | Build apps with no code&lt;/div&gt;&lt;div&gt;Use Google AppSheet to build powerful applications that transform your business. Get started today.&lt;/div&gt;&lt;div&gt;about.appsheet.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/marketing-cms/assets/images/0d/50/1ddab0514ed0a05177cb40a972c2/og-image.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このAppSheetは、なんてったって、Googleスプレッドシートをデータベースにしてアプリを開発することが出来ます。
グラフも作れちゃいます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;グラフをAppSheetで描きたいのだが・・・&lt;a href=&quot;#グラフをappsheetで描きたいのだが&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;グラフを描いてみる&lt;a href=&quot;#グラフを描いてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;早速、AppSheetでグラフを描画してみます。
これは毎日測る、体重と血管年齢のグラフです。ちょっと血管年齢が上がっていますね・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1567&quot; height=&quot;870&quot; src=&quot;/_astro/01.CsJvUB_T_ZudgGd.webp&quot; srcset=&quot;/_astro/01.CsJvUB_T_Z20RvQh.webp 640w, /_astro/01.CsJvUB_T_10z6Ql.webp 750w, /_astro/01.CsJvUB_T_Z2dt6oE.webp 828w, /_astro/01.CsJvUB_T_ZOfkWA.webp 1080w, /_astro/01.CsJvUB_T_Z2kUPXA.webp 1280w, /_astro/01.CsJvUB_T_ZudgGd.webp 1567w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、このようなデータからAppSheetでグラフを描画してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;603&quot; src=&quot;/_astro/04.DBXAgYxF_zpp9c.webp&quot; srcset=&quot;/_astro/04.DBXAgYxF_oys0j.webp 640w, /_astro/04.DBXAgYxF_Z1DpKIq.webp 750w, /_astro/04.DBXAgYxF_zpp9c.webp 807w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように描けました。
うーむ・・・
&lt;img loading=&quot;lazy&quot; width=&quot;989&quot; height=&quot;646&quot; src=&quot;/_astro/02.Ac9oeOww_xEWJp.webp&quot; srcset=&quot;/_astro/02.Ac9oeOww_ZIwJLY.webp 640w, /_astro/02.Ac9oeOww_Zjne84.webp 750w, /_astro/02.Ac9oeOww_16ROAx.webp 828w, /_astro/02.Ac9oeOww_xEWJp.webp 989w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんか気に入らない・・・
&lt;img loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;345&quot; src=&quot;/_astro/03.6BVMhp2i_ZcF1ik.webp&quot; srcset=&quot;/_astro/03.6BVMhp2i_ZcF1ik.webp 583w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;気に入らないポイント&lt;a href=&quot;#気に入らないポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;何が気に入らないのかと言うと、
このグラフは日々、スクワットをした回数をメモったデータなんですけど、
スクワットは毎日やるわけでは有りません。ちゃんと太ももを休ませる日も作る必要があります。
そのため、スクワットをしない日は、空欄、もしくは0と入力してました。
&lt;img loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;603&quot; src=&quot;/_astro/04.DBXAgYxF_zpp9c.webp&quot; srcset=&quot;/_astro/04.DBXAgYxF_oys0j.webp 640w, /_astro/04.DBXAgYxF_Z1DpKIq.webp 750w, /_astro/04.DBXAgYxF_zpp9c.webp 807w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしそうすると、空欄もしくは0までグラフを描画するので、スクワットの回数の遷移を表すグラフとしては見にくいものになってしまいます。
0を描画することは納得なのですが、“空欄”まで0として描画してしまうAppSheetの仕様に、困りました。&lt;/p&gt;&lt;p&gt;未来日のレコード（執筆時点は2024/01/31）を見ると分かりやすいです。空欄が0として入力されていることがわかります。
&lt;img loading=&quot;lazy&quot; width=&quot;797&quot; height=&quot;313&quot; src=&quot;/_astro/06.Cs4MU1CP_1mRiYt.webp&quot; srcset=&quot;/_astro/06.Cs4MU1CP_6hiHh.webp 640w, /_astro/06.Cs4MU1CP_Zw8DjB.webp 750w, /_astro/06.Cs4MU1CP_1mRiYt.webp 797w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;583&quot; height=&quot;345&quot; src=&quot;/_astro/03.6BVMhp2i_ZcF1ik.webp&quot; srcset=&quot;/_astro/03.6BVMhp2i_ZcF1ik.webp 583w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;描くための対策&lt;a href=&quot;#描くための対策&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、データが0もしくは空欄になっている部分を、線形補間して入力してあげることで、
データの遷移が見やすいグラフを作ることにしました。
そこで、GoogleスプレッドシートをGoogle Apps Scriptで読み込んで、線形補間したデータを表示する処理を作りました。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;線形補間する処理&lt;a href=&quot;#線形補間する処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これがデータを加工する処理のスクリプトです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get linear-interpolated values by argued values.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[][]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[][]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getLinearInterpolateByColumns&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remain&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: Not linear-interpolated.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 2222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 33333333333333333333333333333333333333333333333`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;difference&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 4444444444444444444444444444444444444444444444444`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numOfNodes&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 555555555555555555555555555555555555555555555555555`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// remain = baseIndices[i + 1] - baseIndices[i];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;remain&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;baseIndices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remain&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;roundedNodes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;round&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;roundedNodes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`getLinearInterpolateByColumns: 999999999999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Get the statement line-broken to display values in the argued arrays.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[][]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrays&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[][]}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStatementLineBrokenToDisplayArrays&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arrays&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;opening&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sepFirst&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;:&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outNumberOfStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrays&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startOfStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;opening&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sepFirst&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;outNumberOfStart&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrays&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;curr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;outNumberOfStart&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;startOfStatement&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Output linear-interpolated values by argued values.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLinearInterpolate&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getActiveSheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`outputLinearInterpolate: 111111111111111111111111111111111111111111111`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RangeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Length of selected column must be 1.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getLinearInterpolateByColumns&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`outputLinearInterpolate: 222222222222222222222222222222222222222222222`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statementBeforeValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStatementLineBrokenToDisplayArrays&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Before interpolation:&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statementAfterValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStatementLineBrokenToDisplayArrays&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;After interpolation:&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;displayHtml&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;index_html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;Linear-interpolation Terminated...&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;statementBeforeValues&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;statementAfterValues&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&amp;lt;/p&amp;gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`outputLinearInterpolate: 999999999999999999999999999999999999999999999`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;スプレッドシート上で、線形補間したいセルを選択した状態で、&lt;code&gt;outputLinearInterpolate()&lt;/code&gt;を実行するとスプレッドシート上にHTMLが表示されるというわけです。
（HTMLを表示する処理は、&lt;code&gt;displayHtml()&lt;/code&gt;が担当しています。）&lt;/p&gt;&lt;p&gt;線形補間前のデータと、
&lt;img loading=&quot;lazy&quot; width=&quot;806&quot; height=&quot;524&quot; src=&quot;/_astro/07.FsmwOOC5_Zj12NW.webp&quot; srcset=&quot;/_astro/07.FsmwOOC5_17AxC6.webp 640w, /_astro/07.FsmwOOC5_Z1vDPNp.webp 750w, /_astro/07.FsmwOOC5_Zj12NW.webp 806w&quot; /&gt;&lt;/p&gt;&lt;p&gt;線形補間後のデータを表示します。
&lt;img loading=&quot;lazy&quot; width=&quot;827&quot; height=&quot;534&quot; src=&quot;/_astro/08.DERZfK0C_OQ8cq.webp&quot; srcset=&quot;/_astro/08.DERZfK0C_2kEtIi.webp 640w, /_astro/08.DERZfK0C_ZrsnvQ.webp 750w, /_astro/08.DERZfK0C_OQ8cq.webp 827w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;表示されたデータをシートに貼り付けて、再描画したグラフを確認する&lt;a href=&quot;#表示されたデータをシートに貼り付けて再描画したグラフを確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、表示したデータを貼り付けます。
表示されたテキストを選択して、
&lt;img loading=&quot;lazy&quot; width=&quot;724&quot; height=&quot;496&quot; src=&quot;/_astro/09.CDOUrvPW_1cSRYc.webp&quot; srcset=&quot;/_astro/09.CDOUrvPW_Z17ClFv.webp 640w, /_astro/09.CDOUrvPW_1cSRYc.webp 724w&quot; /&gt;&lt;/p&gt;&lt;p&gt;貼り付ける。
&lt;img loading=&quot;lazy&quot; width=&quot;830&quot; height=&quot;506&quot; src=&quot;/_astro/10.Bd1Rgpcd_Z1qqknL.webp&quot; srcset=&quot;/_astro/10.Bd1Rgpcd_CtJEN.webp 640w, /_astro/10.Bd1Rgpcd_2tI6U0.webp 750w, /_astro/10.Bd1Rgpcd_Z1APnBf.webp 828w, /_astro/10.Bd1Rgpcd_Z1qqknL.webp 830w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、AppSheet上のグラフを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;916&quot; height=&quot;656&quot; src=&quot;/_astro/11.y8nQMx9u_ZIPV0K.webp&quot; srcset=&quot;/_astro/11.y8nQMx9u_1zJ6DU.webp 640w, /_astro/11.y8nQMx9u_17TGcL.webp 750w, /_astro/11.y8nQMx9u_Z1Vj0Jk.webp 828w, /_astro/11.y8nQMx9u_ZIPV0K.webp 916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;んんっ。。
&lt;img loading=&quot;lazy&quot; width=&quot;1659&quot; height=&quot;741&quot; src=&quot;/_astro/12.BdVZD44a_2nDAJC.webp&quot; srcset=&quot;/_astro/12.BdVZD44a_Z1izsgg.webp 640w, /_astro/12.BdVZD44a_jS8Hp.webp 750w, /_astro/12.BdVZD44a_ZV1seW.webp 828w, /_astro/12.BdVZD44a_ZODkfl.webp 1080w, /_astro/12.BdVZD44a_fVMTc.webp 1280w, /_astro/12.BdVZD44a_2nDAJC.webp 1659w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、今回使ったスクワットのデータの上下差が大きすぎて少し見づらいですが、
測定を実施している期間のスクワットの回数が、0になっている日付はありません。
回数の遷移を純粋に描画したグラフとなったことでしょう！
&lt;img loading=&quot;lazy&quot; width=&quot;974&quot; height=&quot;450&quot; src=&quot;/_astro/13.BUXAEKkA_20kcfC.webp&quot; srcset=&quot;/_astro/13.BUXAEKkA_2p3txH.webp 640w, /_astro/13.BUXAEKkA_Z178CiK.webp 750w, /_astro/13.BUXAEKkA_22RNJj.webp 828w, /_astro/13.BUXAEKkA_20kcfC.webp 974w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあまあまあ、いいんじゃないでしょうか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スクワットへのモチベーションの上下の様子が伝わるグラフになったな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Googleスプレッドシートではテーマカラーが変えられる！ SpreadsheetThemeクラスをいじってみる</title><link>https://endorphinbath.com/posts/gas-spreadsheet-themecolor/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-spreadsheet-themecolor/</guid><description>あなたはGoogleスプレッドシートではテーマカラーを変えられるって知っていましたか？デフォルトで用意されているテーマは16種類あるようなので全部試してみました。</description><pubDate>Fri, 12 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スプシのデザインが変えられるぞおおお！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、変えられるよね。テーマカラーが変えられるんだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;変わり様は地味だけど、いつも使うから気分転換になりそう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、おれも変えよ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起こっているのか&lt;a href=&quot;#何が起こっているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;貴方は、Googleスプレッドシートではテーマカラーを変えられるって知っていましたか？&lt;/p&gt;&lt;p&gt;これが公式のテーマカラーリファレンス。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-theme&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Class SpreadsheetTheme | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;Learn how to use Apps Script Class SpreadsheetTheme. Access and modify existing themes.&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちょっと変えてみましょうか&lt;a href=&quot;#ちょっと変えてみましょうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これが、全くテーマカラーをいじっていない純粋無垢のGoogleスプレッドシートです。
&lt;img loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;946&quot; src=&quot;/_astro/01.2sm3CA71_Z12yhqV.webp&quot; srcset=&quot;/_astro/01.2sm3CA71_ZDGaw6.webp 640w, /_astro/01.2sm3CA71_Z1cXnD3.webp 750w, /_astro/01.2sm3CA71_Z2fgLNq.webp 828w, /_astro/01.2sm3CA71_ZX5uOm.webp 1080w, /_astro/01.2sm3CA71_5voFz.webp 1280w, /_astro/01.2sm3CA71_ZmbrRs.webp 1668w, /_astro/01.2sm3CA71_Z12yhqV.webp 1911w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのスプレッドシートに対して、Google Apps Scriptのエディタでこのコードを実行してみます&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setSsTeme&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;themes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPredefinedSpreadsheetThemes&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;themes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;themes&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;themes&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// 16種類あるんだってよ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setSpreadsheetTheme&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;themes&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;16&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると、こんな感じのデザインになりました！
&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;941&quot; src=&quot;/_astro/11.DlCailgZ_1TD6vh.webp&quot; srcset=&quot;/_astro/11.DlCailgZ_Z3RbyI.webp 640w, /_astro/11.DlCailgZ_FVkvK.webp 750w, /_astro/11.DlCailgZ_dEqVu.webp 828w, /_astro/11.DlCailgZ_ZyjuwE.webp 1080w, /_astro/11.DlCailgZ_vJiHA.webp 1280w, /_astro/11.DlCailgZ_2HCnO.webp 1668w, /_astro/11.DlCailgZ_1TD6vh.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;んんん・・・。
あんまり変化が無いというか、全く変化していないですね。
おそらく、最初に割り当てられているテーマカラーは、ほとんどの人が使っているであろう、純粋無垢なGoogleスプレッドシートなのだと思われます。
それでは、他のテーマカラーはどうなっているんだろう？&lt;/p&gt;&lt;p&gt;比べてみよう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;全てのテーマカラーを比較してみよう&lt;a href=&quot;#全てのテーマカラーを比較してみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ざっと並べてみるとこんな感じ。
うーん・・・、少し細かいですね・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;大きくして1つずつ見てみよう&lt;a href=&quot;#大きくして1つずつ見てみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ズームします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;2番目のテーマカラー&lt;a href=&quot;#2番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;940&quot; src=&quot;/_astro/12.CLua1cIQ_2vt1wM.webp&quot; srcset=&quot;/_astro/12.CLua1cIQ_1vmJQ6.webp 640w, /_astro/12.CLua1cIQ_Z2eYmhf.webp 750w, /_astro/12.CLua1cIQ_2mURWq.webp 828w, /_astro/12.CLua1cIQ_2rlia.webp 1080w, /_astro/12.CLua1cIQ_17v9xp.webp 1280w, /_astro/12.CLua1cIQ_EVmWW.webp 1668w, /_astro/12.CLua1cIQ_2vt1wM.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;最初に変えたものが1番目でした。
このテーマは、リンクの色が明るくなりましたね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3番目のテーマカラー&lt;a href=&quot;#3番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;944&quot; src=&quot;/_astro/13.-Twqv_n5_Z1SDthk.webp&quot; srcset=&quot;/_astro/13.-Twqv_n5_ZFnHsT.webp 640w, /_astro/13.-Twqv_n5_DrjcG.webp 750w, /_astro/13.-Twqv_n5_bapCq.webp 828w, /_astro/13.-Twqv_n5_Z1OzadG.webp 1080w, /_astro/13.-Twqv_n5_ZKXfHK.webp 1280w, /_astro/13.-Twqv_n5_1jtYBX.webp 1668w, /_astro/13.-Twqv_n5_Z1SDthk.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このテーマは、リンクの彩度が少し減ったのでしょうか。
リンクが掛かっていることが認識しにくい分、疲れにくそうなテーマだと思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4番目のテーマカラー&lt;a href=&quot;#4番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;940&quot; src=&quot;/_astro/14.BUt9O-X1_Z2q6Efy.webp&quot; srcset=&quot;/_astro/14.BUt9O-X1_Z2puWIk.webp 640w, /_astro/14.BUt9O-X1_Z15EV2J.webp 750w, /_astro/14.BUt9O-X1_Z1xVOC0.webp 828w, /_astro/14.BUt9O-X1_cnyFG.webp 1080w, /_astro/14.BUt9O-X1_Z1h2xIy.webp 1280w, /_astro/14.BUt9O-X1_Z1IBkj1.webp 1668w, /_astro/14.BUt9O-X1_Z2q6Efy.webp 1918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また明るくなりました。
なんか、フォントも少し癖が出ましたね。「3」の癖がスゲェエエ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5番目のテーマカラー&lt;a href=&quot;#5番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;944&quot; src=&quot;/_astro/15.C2A7LjlR_Z2dqfC8.webp&quot; srcset=&quot;/_astro/15.C2A7LjlR_1h33EU.webp 640w, /_astro/15.C2A7LjlR_Z2tj3sq.webp 750w, /_astro/15.C2A7LjlR_28BbLf.webp 828w, /_astro/15.C2A7LjlR_Z29lVyu.webp 1080w, /_astro/15.C2A7LjlR_Z15K23y.webp 1280w, /_astro/15.C2A7LjlR_YHdha.webp 1668w, /_astro/15.C2A7LjlR_Z2dqfC8.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リンクの色が少し紫になったのでしょうか。
フォントも、横に広くなった感じがします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6番目のテーマカラー&lt;a href=&quot;#6番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1924&quot; height=&quot;941&quot; src=&quot;/_astro/16.C4ClzYaB_Z1o4YFI.webp&quot; srcset=&quot;/_astro/16.C4ClzYaB_ez2Fd.webp 640w, /_astro/16.C4ClzYaB_1yp4lN.webp 750w, /_astro/16.C4ClzYaB_168aLx.webp 828w, /_astro/16.C4ClzYaB_1cJs3v.webp 1080w, /_astro/16.C4ClzYaB_ZgFElJ.webp 1280w, /_astro/16.C4ClzYaB_ZIfqVc.webp 1668w, /_astro/16.C4ClzYaB_Z1o4YFI.webp 1924w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直前のものよりも、明瞭になった気がします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7番目のテーマカラー&lt;a href=&quot;#7番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;939&quot; src=&quot;/_astro/17.CYbtB2EI_ZPumv3.webp&quot; srcset=&quot;/_astro/17.CYbtB2EI_fEVc6.webp 640w, /_astro/17.CYbtB2EI_1zuWRG.webp 750w, /_astro/17.CYbtB2EI_17e4iq.webp 828w, /_astro/17.CYbtB2EI_1JhgvD.webp 1080w, /_astro/17.CYbtB2EI_Z2fQ433.webp 1280w, /_astro/17.CYbtB2EI_2mLibq.webp 1668w, /_astro/17.CYbtB2EI_ZPumv3.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このテーマは、リンクが緑ですね。
落ち着いています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8番目のテーマカラー&lt;a href=&quot;#8番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;944&quot; src=&quot;/_astro/18.C-wcrcMn_1lwQKa.webp&quot; srcset=&quot;/_astro/18.C-wcrcMn_Z4Xy4j.webp 640w, /_astro/18.C-wcrcMn_1eQsBh.webp 750w, /_astro/18.C-wcrcMn_Lzz21.webp 828w, /_astro/18.C-wcrcMn_1pBaNN.webp 1080w, /_astro/18.C-wcrcMn_2td5jJ.webp 1280w, /_astro/18.C-wcrcMn_ZvvN9t.webp 1668w, /_astro/18.C-wcrcMn_1lwQKa.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;少し彩度が高い緑になりました。
「3」にも癖があります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9番目のテーマカラー&lt;a href=&quot;#9番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1919&quot; height=&quot;944&quot; src=&quot;/_astro/19.CyGNXK0c_Z1YesaP.webp&quot; srcset=&quot;/_astro/19.CyGNXK0c_26wVNQ.webp 640w, /_astro/19.CyGNXK0c_Z1DOaju.webp 750w, /_astro/19.CyGNXK0c_Z2763SK.webp 828w, /_astro/19.CyGNXK0c_Z1Ua97c.webp 1080w, /_astro/19.CyGNXK0c_ZQyeBg.webp 1280w, /_astro/19.CyGNXK0c_1dT0Is.webp 1668w, /_astro/19.CyGNXK0c_Z1YesaP.webp 1919w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これは、ピンクというか、紫というか、
リンクの色が赤みを帯び始めました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10番目のテーマカラー&lt;a href=&quot;#10番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;943&quot; src=&quot;/_astro/20.BoYGJARU_Zs2wJB.webp&quot; srcset=&quot;/_astro/20.BoYGJARU_Z12z2Dz.webp 640w, /_astro/20.BoYGJARU_hfY21.webp 750w, /_astro/20.BoYGJARU_ZK2p8m.webp 828w, /_astro/20.BoYGJARU_ZnT65t.webp 1080w, /_astro/20.BoYGJARU_Z1RkduI.webp 1280w, /_astro/20.BoYGJARU_d81P0.webp 1668w, /_astro/20.BoYGJARU_Zs2wJB.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;と思ったら、リンクの色がまた緑に。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11番目のテーマカラー&lt;a href=&quot;#11番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;938&quot; src=&quot;/_astro/21.BGO1ziAU_1mmxXD.webp&quot; srcset=&quot;/_astro/21.BGO1ziAU_u1Hyl.webp 640w, /_astro/21.BGO1ziAU_1NQJeV.webp 750w, /_astro/21.BGO1ziAU_Lyl4y.webp 828w, /_astro/21.BGO1ziAU_1qqXPS.webp 1080w, /_astro/21.BGO1ziAU_Z2Y8ym.webp 1280w, /_astro/21.BGO1ziAU_ZuxU8O.webp 1668w, /_astro/21.BGO1ziAU_1mmxXD.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらは、全体的に青みを帯びていますね。
リンクだけでなく、普通の文字色も青くなっていることがより容易に識別できます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12番目のテーマカラー&lt;a href=&quot;#12番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;942&quot; src=&quot;/_astro/22._65qbxsA_rVk2C.webp&quot; srcset=&quot;/_astro/22._65qbxsA_nhj6c.webp 640w, /_astro/22._65qbxsA_1H7kLM.webp 750w, /_astro/22._65qbxsA_1ePrcw.webp 828w, /_astro/22._65qbxsA_w4KGK.webp 1080w, /_astro/22._65qbxsA_1B8yW0.webp 1280w, /_astro/22._65qbxsA_186SCe.webp 1668w, /_astro/22._65qbxsA_rVk2C.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リンクの色が紫っぽく。
文字も少し野暮ったくなった？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13番目のテーマカラー&lt;a href=&quot;#13番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1917&quot; height=&quot;941&quot; src=&quot;/_astro/23.-q1w4TNZ_Z14q9sm.webp&quot; srcset=&quot;/_astro/23.-q1w4TNZ_Z1WO1Hj.webp 640w, /_astro/23.-q1w4TNZ_ZCY01I.webp 750w, /_astro/23.-q1w4TNZ_Z16fSAY.webp 828w, /_astro/23.-q1w4TNZ_Z10lLYU.webp 1080w, /_astro/23.-q1w4TNZ_4H1fk.webp 1280w, /_astro/23.-q1w4TNZ_2aagA3.webp 1668w, /_astro/23.-q1w4TNZ_Z14q9sm.webp 1917w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これは、リンクの色が黄色っぽい雰囲気があります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;14番目のテーマカラー&lt;a href=&quot;#14番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;941&quot; src=&quot;/_astro/24.Ct8aZLLJ_oGU70.webp&quot; srcset=&quot;/_astro/24.Ct8aZLLJ_Z15RzpR.webp 640w, /_astro/24.Ct8aZLLJ_dWrfI.webp 750w, /_astro/24.Ct8aZLLJ_ZNkVTE.webp 828w, /_astro/24.Ct8aZLLJ_sPlL8.webp 1080w, /_astro/24.Ct8aZLLJ_ZYfVRn.webp 1280w, /_astro/24.Ct8aZLLJ_Z1qOIrP.webp 1668w, /_astro/24.Ct8aZLLJ_oGU70.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらは水色。
11番目は全体的に青かったですが、こちらはリンクの方が青みが強くて、彩度も高いです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;15番目のテーマカラー&lt;a href=&quot;#15番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1915&quot; height=&quot;939&quot; src=&quot;/_astro/25.DrxiXTCA_Z1O0aRH.webp&quot; srcset=&quot;/_astro/25.DrxiXTCA_ZUhSBi.webp 640w, /_astro/25.DrxiXTCA_ox84i.webp 750w, /_astro/25.DrxiXTCA_Z3IKuX.webp 828w, /_astro/25.DrxiXTCA_KLs8Y.webp 1080w, /_astro/25.DrxiXTCA_1PPgoe.webp 1280w, /_astro/25.DrxiXTCA_1ogtNL.webp 1668w, /_astro/25.DrxiXTCA_Z1O0aRH.webp 1915w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リンクじゃない文字も、淡くなりました。
そして、英語と数字フォントが鋭利になりましたね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;16番目のテーマカラー&lt;a href=&quot;#16番目のテーマカラー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1916&quot; height=&quot;942&quot; src=&quot;/_astro/26.D3pRGIoW_1LyDKh.webp&quot; srcset=&quot;/_astro/26.D3pRGIoW_zSlYn.webp 640w, /_astro/26.D3pRGIoW_1TInEX.webp 750w, /_astro/26.D3pRGIoW_1rru5H.webp 828w, /_astro/26.D3pRGIoW_1PH5pp.webp 1080w, /_astro/26.D3pRGIoW_Z29qf9h.webp 1280w, /_astro/26.D3pRGIoW_2rJdkS.webp 1668w, /_astro/26.D3pRGIoW_1LyDKh.webp 1916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これが最後？
リンクの色が緑になりました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;これ以上ないって。&lt;a href=&quot;#これ以上ないって&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;はい、秘密の17番目は・・・
ありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1607&quot; height=&quot;706&quot; src=&quot;/_astro/31.KrE-qH0a_AAPtO.webp&quot; srcset=&quot;/_astro/31.KrE-qH0a_B4p5l.webp 640w, /_astro/31.KrE-qH0a_Znvnmg.webp 750w, /_astro/31.KrE-qH0a_Z1DpYjC.webp 828w, /_astro/31.KrE-qH0a_2x1ar4.webp 1080w, /_astro/31.KrE-qH0a_Z1rrKeK.webp 1280w, /_astro/31.KrE-qH0a_AAPtO.webp 1607w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、Googleスプレッドシートのテーマカラーは、GASのエディタを開かなくても、
ここでいつでも変更することが出来ます
&lt;img loading=&quot;lazy&quot; width=&quot;829&quot; height=&quot;148&quot; src=&quot;/_astro/32.CTMvnWdi_ILbaI.webp&quot; srcset=&quot;/_astro/32.CTMvnWdi_ZajCql.webp 640w, /_astro/32.CTMvnWdi_Zecswy.webp 750w, /_astro/32.CTMvnWdi_IH6Y2.webp 828w, /_astro/32.CTMvnWdi_ILbaI.webp 829w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;941&quot; src=&quot;/_astro/33.B51NmJnE_Z17BggW.webp&quot; srcset=&quot;/_astro/33.B51NmJnE_Z1RTOE0.webp 640w, /_astro/33.B51NmJnE_Zy4MXp.webp 750w, /_astro/33.B51NmJnE_Z11lGxF.webp 828w, /_astro/33.B51NmJnE_1tGkFJ.webp 1080w, /_astro/33.B51NmJnE_Z2vqYRW.webp 1280w, /_astro/33.B51NmJnE_25IsBd.webp 1668w, /_astro/33.B51NmJnE_Z17BggW.webp 1914w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕は、くつろぎ（9番目）にしよっかな！　字が細いから一目で沢山見れるし。
&lt;code&gt;spreadsheet.getPredefinedSpreadsheetThemes()&lt;/code&gt;で取得できるテーマの順番は、スプレッドシート上の順番と必ずしも同じわけではなさそうです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;私はこれにしよう&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ガラッと変わるわけではないですけど、靴下を変えるぐらいに思ってもらえれば。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Google Apps ScriptでAniList GraphQL APIv2を叩くと、&apos;No query or mutation provided...&apos;のエラー400が返ってくる</title><link>https://endorphinbath.com/posts/gas-anilist-graphql-error/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-anilist-graphql-error/</guid><description>GASのUrlFetchApp.fetchの仕様がJavaScriptのfetchと少し違うのかも。調べても調べても沼ってたので解決してよかった。</description><pubDate>Thu, 11 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あーーー沼だ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おっなんだ詰まってんのか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_006.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GraphQLで上手く行かん・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GASでfetchしてるのか、普通のJavaScriptとちょっと違うからなあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何がダメなのかさっさと教えてくれ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、何が起きてるんだ&lt;a href=&quot;#まず何が起きてるんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、AniList GraphQL APIv2を、Google Apps ScriptのUrlFetchApp.fetch()メソッドでリクエストします。&lt;/p&gt;&lt;a href=&quot;https://anilist.gitbook.io/anilist-apiv2-docs/overview/graphql/getting-started&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;anilist.gitbook.io&lt;/span&gt;&lt;/div&gt;&lt;div&gt;anilist.gitbook.io&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;anilist.gitbook.io&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まあ、このGeting Startedと同じ感じで、クエリとスクリプトをこんな風に叩いてみるのですが・・・&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Here we define our query as a multi-line string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Storing it in a separate .graphql/.gql file is also possible&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query ($id: Int) { # Define which variables will be used in the query (id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Media (id: $id, type: ANIME) { # Insert our variables into the query arguments (id) (type: ANIME is hard-coded in the query)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;title {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;romaji&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;english&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;native&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Define our query variables and values that will be used in the query request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;15125&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Define the config we&apos;ll need for our Api request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://graphql.anilist.co&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Content-Type&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;application/json&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Accept&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;application/json&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;query&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;variables&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;muteHttpExceptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Make the HTTP Api request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;エラーコード400で、うまく動きません。
&lt;code&gt;&apos;No query or mutation provided. Please view https://anilist.co/graphiql to see available queries and mutations.&apos;&lt;/code&gt;とか書いてあったので、指示されたサイトでクエリを打ったのですが、そのクエリは上手くいきました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13:25:45  情報  { errors:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[ { message: &apos;No query or mutation provided. Please view https://anilist.co/graphiql to see available queries and mutations.&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;status: 400,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;locations: [Object] } ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data: null }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一体、何が悪かったのか&lt;a href=&quot;#一体何が悪かったのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「クエリが無い」というエラーになった原因は、&lt;code&gt;payload&lt;/code&gt;ではなく、&lt;code&gt;body&lt;/code&gt;にしていたことです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Here we define our query as a multi-line string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Storing it in a separate .graphql/.gql file is also possible&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;query ($id: Int) { # Define which variables will be used in the query (id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Media (id: $id, type: ANIME) { # Insert our variables into the query arguments (id) (type: ANIME is hard-coded in the query)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;title {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;romaji&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;english&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;native&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Define our query variables and values that will be used in the query request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;15125&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Define the config we&apos;ll need for our Api request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://graphql.anilist.co&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Content-Type&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;application/json&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;Accept&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;application/json&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// body: JSON.stringify({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;({ &lt;/span&gt;&lt;span&gt;// ここ！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;query&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&apos;variables&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;variables&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;muteHttpExceptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Make the HTTP Api request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;()));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;())[&lt;/span&gt;&lt;span&gt;&quot;data&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;Media&quot;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;これで叩くと、ちゃんとデータが取得されて帰ってきます。ころしあえ～！&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13:27:51  情報  { method: &apos;post&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;headers:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ &apos;Content-Type&apos;: &apos;application/json&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Accept: &apos;application/json&apos; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;payload: &apos;{&quot;query&quot;:&quot;\\n  query ($id: Int) { # Define which variables will be used in the query (id)\\n    Media (id: $id, type: ANIME) { # Insert our variables into the query arguments (id) (type: ANIME is hard-coded in the query)\\n      id\\n      title {\\n        romaji\\n        english\\n        native\\n      }\\n    }\\n  }\\n  &quot;,&quot;variables&quot;:{&quot;id&quot;:15125}}&apos;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;muteHttpExceptions: true }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13:27:51  情報  { data: { Media: { id: 15125, title: [Object] } } }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;13:27:51  情報  { romaji: &apos;Teekyuu&apos;, english: &apos;Teekyuu&apos;, native: &apos;てーきゅう&apos; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;GASのUrlFetchApp.fetch()メソッドでリクエストするときは、bodyじゃなくてpayloadでなくてはならないんですね。
今まであんまり気にしてなかったから盲点だった・・・&lt;/p&gt;&lt;p&gt;意外と検索しても出てこないのが沼ポイントでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_011.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ～、取れました～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こういう沼が一番厄介な気がするわ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年12月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202312/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202312/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Frostpunkのシリーズが完結して、Timberbornのシリーズが更新されています。</description><pubDate>Thu, 11 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年12月に投稿した動画の一覧&lt;a href=&quot;#2023年12月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：11&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに不平不満が胎動する #09【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに不平不満が胎動する-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7qrKqd5bUIQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに支持構造を構築する #10【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに支持構造を構築する-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/UfebjwL79ZY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームな建設事故が再来する気しかしない #11【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームな建設事故が再来する気しかしない-11ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1XcYFHFoqR0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】フラストレートする労働者とエンジニア #12【ゆっくり実況】&lt;a href=&quot;#frostpunkフラストレートする労働者とエンジニア-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LgSovn_UCxE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに工場風景が白銀に染まる #13【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに工場風景が白銀に染まる-13ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zcLorbCcd1A/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームな極寒世界が開闢する #14（完）【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームな極寒世界が開闢する-14完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/OPTD_T7601g/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】儚くも永久のハナシ -BEAVERworld- #01【ゆっくり実況】&lt;a href=&quot;#timberborn儚くも永久のハナシ--beaverworld--01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VhrbEfz6DiM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】ステェェェップ！ 段差を見極めな！ #02【ゆっくり実況】&lt;a href=&quot;#timberbornステェェェップ-段差を見極めな-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/T6dQvNKYxv8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】ストォォォック！ ビーバーを増やしな！ #03【ゆっくり実況】&lt;a href=&quot;#timberbornストォォォック-ビーバーを増やしな-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gCSjV1fpRyc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Timberborn】タラァァァップ！ 上から見極めな！ #04【ゆっくり実況】&lt;a href=&quot;#timberbornタラァァァップ-上から見極めな-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lFTqxJIYHnI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】総集編 | ベルトコンベアに飲み込まれた島【ゆっくり実況】&lt;a href=&quot;#factory-town総集編--ベルトコンベアに飲み込まれた島ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/12/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ZLJyO5-g_VI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は11本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年11月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202311/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202311/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Factory Townのシリーズが完結して、Frostpunkのシリーズが更新されています。</description><pubDate>Thu, 21 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年11月に投稿した動画の一覧&lt;a href=&quot;#2023年11月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：12&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】絶対幸福暴騰拳に飲み込まれた草 #08【ゆっくり実況】&lt;a href=&quot;#factory-town絶対幸福暴騰拳に飲み込まれた草-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KdpMrFkI4qs/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】クソデカい壁面に飲み込まれた町 #09【ゆっくり実況】&lt;a href=&quot;#factory-townクソデカい壁面に飲み込まれた町-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/l9dYcW9L0mk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】巨大ピラミッドに飲み込まれた島 #10（完）【ゆっくり実況】&lt;a href=&quot;#factory-town巨大ピラミッドに飲み込まれた島-10完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uWlhO9d6pOc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】総集編 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empire総集編--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/HHB5uFJwz6I/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】極寒の氷の世界で極限生活 Pre-winter #01【ゆっくり実況】&lt;a href=&quot;#frostpunk極寒の氷の世界で極限生活-pre-winter-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/mZGwZ-9oWzE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに二交代制の導入を開始する #02【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに二交代制の導入を開始する-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LXShIypkavU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに民衆の意欲が高まる #03【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに民衆の意欲が高まる-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ig4V9LJ1bTw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに時間感覚の崩壊が始まる #04【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに時間感覚の崩壊が始まる-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Gc-Dk7fo_IA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに労働時間が短縮される #05【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに労働時間が短縮される-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/iR921EOw3dE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに建設現場の稼働が開始する #06【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに建設現場の稼働が開始する-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dCMjdfswFzk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに労働組合が結成される #07【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに労働組合が結成される-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/MvCGgJnD_TQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに建設事故に対応する #08【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに建設事故に対応する-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/11/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TgNVwJlTfIw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は12本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年10月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202310/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202310/</guid><description>kinkingame24bitのYouTube等の更新状況になります。AC6 Fires of Rubiconのシリーズが完結して、Factory Townのシリーズを更新しています。</description><pubDate>Wed, 15 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年10月に投稿した動画の一覧&lt;a href=&quot;#2023年10月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：16&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【AC6】超弾幕ENバルテウスをしていきましょうか #35【実況】&lt;a href=&quot;#ac6超弾幕enバルテウスをしていきましょうか-35実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/09G8mx_RPhk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ルビコンの解放者をしていきましょうか #36【実況】&lt;a href=&quot;#ac6ルビコンの解放者をしていきましょうか-36実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/I7S3UzX_rf0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】3周目をしていきましょうか #37【実況】&lt;a href=&quot;#ac63周目をしていきましょうか-37実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/pTe9vtJqaQg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】カタフラクトをしていきましょうか #38【実況】&lt;a href=&quot;#ac6カタフラクトをしていきましょうか-38実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ZSQ8hPPdkGs/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】鉄壁の守備をしていきましょうか #39【実況】&lt;a href=&quot;#ac6鉄壁の守備をしていきましょうか-39実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Fm47WlTCyTc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】コーラル武器をしていきましょうか #40【実況】&lt;a href=&quot;#ac6コーラル武器をしていきましょうか-40実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/UYHjNQ0wy4Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】スネイル第2隊長閣下をしていきましょうか #41【実況】&lt;a href=&quot;#ac6スネイル第2隊長閣下をしていきましょうか-41実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uIKFSatJgFY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】包囲網とレーザー網をしていきましょうか #42【実況】&lt;a href=&quot;#ac6包囲網とレーザー網をしていきましょうか-42実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GrJuZa-RMAg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】コーラルリリースをしていきましょうか #43【実況】&lt;a href=&quot;#ac6コーラルリリースをしていきましょうか-43実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CDe4pCIG-mA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】ベルトコンベアに飲み込まれた島 #01【ゆっくり実況】&lt;a href=&quot;#factory-townベルトコンベアに飲み込まれた島-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/X7B2ahnFpPQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】欲深い人の触手に飲み込まれた森 #02【ゆっくり実況】&lt;a href=&quot;#factory-town欲深い人の触手に飲み込まれた森-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/8p4Xwf85biM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】怠惰な肉塊の喉に飲み込まれた魚 #03【ゆっくり実況】&lt;a href=&quot;#factory-town怠惰な肉塊の喉に飲み込まれた魚-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/aBmJxQyU4f0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】堕落した獣の轍に飲み込まれた麦 #04【ゆっくり実況】&lt;a href=&quot;#factory-town堕落した獣の轍に飲み込まれた麦-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fIhRAew8E5Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】圧倒的な大自然に飲み込まれた鉄 #05【ゆっくり実況】&lt;a href=&quot;#factory-town圧倒的な大自然に飲み込まれた鉄-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/yNJLCQreD0c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】大量消費財の渦に飲み込まれた本 #06【ゆっくり実況】&lt;a href=&quot;#factory-town大量消費財の渦に飲み込まれた本-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ssCara4eMLc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Factory Town】数多の運搬手段に飲み込まれた海 #07【ゆっくり実況】&lt;a href=&quot;#factory-town数多の運搬手段に飲み込まれた海-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/10/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/QdPTYA0eO94/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は16本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年09月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202309/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202309/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Armored Core VI Fires of Rubiconのシリーズを更新しています。</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年9月に投稿した動画の一覧&lt;a href=&quot;#2023年9月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：30&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【AC6】壁越えをしていきましょうか #05【実況】&lt;a href=&quot;#ac6壁越えをしていきましょうか-05実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KHAPYca9IzQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ステルス機体をしていきましょうか #06【実況】&lt;a href=&quot;#ac6ステルス機体をしていきましょうか-06実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dYG7NRyPaxY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】超弾幕バルテウスをしていきましょうか #07【実況】&lt;a href=&quot;#ac6超弾幕バルテウスをしていきましょうか-07実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5sIISYdAfpA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】四脚でスマートクリーナーをしていきましょうか #08【実況】&lt;a href=&quot;#ac6四脚でスマートクリーナーをしていきましょうか-08実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Ambf3RRL0nI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】超光線シースパイダーをしていきましょうか #09【実況】&lt;a href=&quot;#ac6超光線シースパイダーをしていきましょうか-09実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PqvlkV_l454/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】キャラ推しをしていきましょうか #10【実況】&lt;a href=&quot;#ac6キャラ推しをしていきましょうか-10実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/s1Dt0IUf8NI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】小さい強い敵をしていきましょうか #11【実況】&lt;a href=&quot;#ac6小さい強い敵をしていきましょうか-11実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SzLI9vj9rbw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ENいつも足らないのでキレていきましょうか #12【実況】&lt;a href=&quot;#ac6enいつも足らないのでキレていきましょうか-12実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/4F4lsqjdbKM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】再びヘリコプターをしていきましょうか #13【実況】&lt;a href=&quot;#ac6再びヘリコプターをしていきましょうか-13実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/A01Rpg2NQxw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】試行錯誤をしていきましょうか #14【実況】&lt;a href=&quot;#ac6試行錯誤をしていきましょうか-14実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/YmIo6DVmxP8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】無沙汰の戦友をしていきましょうか #15【実況】&lt;a href=&quot;#ac6無沙汰の戦友をしていきましょうか-15実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Z1AV8rrkJX8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】対火炎放射をしていきましょうか #16【実況】&lt;a href=&quot;#ac6対火炎放射をしていきましょうか-16実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wgsyZ6Z-I4s/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】金の生る木を探していきましょうか #17【実況】&lt;a href=&quot;#ac6金の生る木を探していきましょうか-17実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PjaVgtRhShA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】超顔面アイスワームをしていきましょうか #18【実況】&lt;a href=&quot;#ac6超顔面アイスワームをしていきましょうか-18実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/eucZnOqC4r4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ネペンテスをしていきましょうか #19【実況】&lt;a href=&quot;#ac6ネペンテスをしていきましょうか-19実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FUThx-I71Bw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】作業MTカワイイをしていきましょうか #20【実況】&lt;a href=&quot;#ac6作業mtカワイイをしていきましょうか-20実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1z48DzYRtBA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】レーザー恐怖体験をしていきましょうか #21【実況】&lt;a href=&quot;#ac6レーザー恐怖体験をしていきましょうか-21実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/RsVW_SC8nMM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】バカ多過ぎる敵をしていきましょうか #22【実況】&lt;a href=&quot;#ac6バカ多過ぎる敵をしていきましょうか-22実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zrZn9JFEGMQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ミールワームをしていきましょうか #23【実況】&lt;a href=&quot;#ac6ミールワームをしていきましょうか-23実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/OnNrfJIOTs0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】超光速アイビスシリーズをしていきましょうか #24【実況】&lt;a href=&quot;#ac6超光速アイビスシリーズをしていきましょうか-24実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/-WWQAje_ZpY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】史上最弱の機体をしていきましょうか #25【実況】&lt;a href=&quot;#ac6史上最弱の機体をしていきましょうか-25実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/95HERqFBUVE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】超時空要塞をしていきましょうか #26【実況】&lt;a href=&quot;#ac6超時空要塞をしていきましょうか-26実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/paXdzGuyMac/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】V.Iをしていきましょうか #27【実況】&lt;a href=&quot;#ac6viをしていきましょうか-27実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uWpapsefJBY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】ネバーエンディングブースターをしていきましょうか #28【実況】&lt;a href=&quot;#ac6ネバーエンディングブースターをしていきましょうか-28実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6siynSQs_yc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】レイヴンの火をしていきましょうか #29【実況】&lt;a href=&quot;#ac6レイヴンの火をしていきましょうか-29実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/HDmcHUlpWeo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】2周目をしていきましょうか #30【実況】&lt;a href=&quot;#ac62周目をしていきましょうか-30実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/yLAOJ3xBs9w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】NPC共を観戦していきましょうか #31【実況】&lt;a href=&quot;#ac6npc共を観戦していきましょうか-31実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/-6g106uxLck/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】カタクラフトをしていきましょうか #32【実況】&lt;a href=&quot;#ac6カタクラフトをしていきましょうか-32実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/MLZdGqcNWi8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】サクッとしていきましょうか #33【実況】&lt;a href=&quot;#ac6サクッとしていきましょうか-33実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kG9CvaSPsYg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】シンダー・カーラをしていきましょうか #34【実況】&lt;a href=&quot;#ac6シンダーカーラをしていきましょうか-34実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/09/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/WXPAm086Sfc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は30本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年08月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202308/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202308/</guid><description>kinkingame24bitのYouTube等の更新状況になります。No Man&apos;s Skyのシリーズが完結して、Armored Core VIのシリーズを更新しています。</description><pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年8月に投稿した動画の一覧&lt;a href=&quot;#2023年8月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：12&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】アトランティスみたいな海底基地を作りたい頃もあった #17 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyアトランティスみたいな海底基地を作りたい頃もあった-17--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/moisU_y_ewY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;K/DRをトコトン上げていくHITMAN 3&lt;a href=&quot;#kdrをトコトン上げていくhitman-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7f1qjOzV0vY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】ルナティックパンドラみたいなものを作りたい頃もあった #18 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyルナティックパンドラみたいなものを作りたい頃もあった-18--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/iLronSmPT4M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】メインミッションが終わります #19 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyメインミッションが終わります-19--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/BW5maeEtFBA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】エクソクラフトで遊ぶ回 #20 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyエクソクラフトで遊ぶ回-20--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/qB1eY9QHoQY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】ダークセンチネルと宇宙船を架けたバトル #21 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyダークセンチネルと宇宙船を架けたバトル-21--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jUIFGEbnm_A/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】星の誕生 #22 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky星の誕生-22--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/WiPvWvfiUr4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】色々な宇宙船がここにおる #23（完） | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky色々な宇宙船がここにおる-23完--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/BBOe7YuWvG0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】チュートリアルしていきましょうか #01【実況】&lt;a href=&quot;#ac6チュートリアルしていきましょうか-01実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5nkaqwLl048/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】無知の知をしていきましょうか #02【実況】&lt;a href=&quot;#ac6無知の知をしていきましょうか-02実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2DIVjjW0Uo0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】少し強い敵をしていきましょうか #03【実況】&lt;a href=&quot;#ac6少し強い敵をしていきましょうか-03実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/areWbTBFAj8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【AC6】バカデカいストライダーをしていきましょうか #04【実況】&lt;a href=&quot;#ac6バカデカいストライダーをしていきましょうか-04実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/08/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CLcHSFxx_eg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は12本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年07月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202307/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202307/</guid><description>kinkingame24bitのYouTube等の更新状況になります。No Man&apos;s Skyのシリーズを更新しています。</description><pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年7月に投稿した動画の一覧&lt;a href=&quot;#2023年7月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：12&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】センチネルをマインビームで倒し切る #09 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyセンチネルをマインビームで倒し切る-09--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Ppd5eltmG2w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;買って良かったおすすめのもの 2022年と2023年少し&lt;a href=&quot;#買って良かったおすすめのもの-2022年と2023年少し&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/OhwuhLpqjNU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度目のジエンド #11 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度目のジエンド-11--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wsFSKFexrwQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】はじめてのスペースアノマリー #10 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyはじめてのスペースアノマリー-10--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/e2iU5TrGNns/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】コンテナも増えてきたしスポットを使おうか #11 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyコンテナも増えてきたしスポットを使おうか-11--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/QIH2SBFBP9w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度でアルテマウェポンを倒したい #12 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度でアルテマウェポンを倒したい-12--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/C_pG6xZqeYY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】中性子キャノンを使ってみる少年B #12 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky中性子キャノンを使ってみる少年b-12--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/M3vhQvMNhWU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】貨物船にエンジニア諸君を招くぞお #13 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky貨物船にエンジニア諸君を招くぞお-13--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/oXZHvPRWPxY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度でオメガウェポンを倒せるわけがない #13（完） | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度でオメガウェポンを倒せるわけがない-13完--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/qhTSSTB66hE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】自然発火するほど暑い星に立方体モジュールによる拠点を建てる #14 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky自然発火するほど暑い星に立方体モジュールによる拠点を建てる-14--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/n-d81I9e0Sg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】FPSが低い惑星でセンチネルを倒す #15 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyfpsが低い惑星でセンチネルを倒す-15--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/MGduS4r5yT0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】アトラスインターフェースってカドミウム色をしているねえ #16 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyアトラスインターフェースってカドミウム色をしているねえ-16--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/07/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/80m-OD1fA1Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は12本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Apps Script】DiscordのWebhookを使って行動を習慣化する</title><link>https://endorphinbath.com/posts/gas-discord-webhook-habit/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-discord-webhook-habit/</guid><description>DiscordのWebhookをGoogle Apps Scriptで叩いて、行動を習慣化するためのツールを作りました。指定した時間帯は通知をオフにします。</description><pubDate>Mon, 10 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、痛てて・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おう、おかえり。歯医者はどうだったよい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は治療しなかったねえ。なんか、この前治したところがまだ痛かったから行ったんだが、どうやら、この虫歯の根本的な原因は、噛み合わせが悪い状態で食事の時以外にも歯を閉じていることなんじゃないか？ みたいなことを医者に言われたわ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、普段から歯を開きっぱなしにするように意識しなきゃいけないってことだね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだな、新しい行動を習慣にするために意識付けなきゃならない。そうと分かれば・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;通知ツールを作るか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、DiscordのWebhookを使って、2時間おきにDiscordのチャンネルに通知するツールを作ります。
主な機能は、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;GASで時間主導型で動く関数を用意する&lt;/li&gt;
&lt;li&gt;その関数内で、指定した時間外の場合、通知しないようにする&lt;/li&gt;
&lt;li&gt;時間内であれば、Discordチャンネルに通知する&lt;/li&gt;
&lt;li&gt;通知する内容は、習慣化する行動と、意識できているかどうかを記録するシートのURL。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;例えば、こんなのが送られてきて、
&lt;img loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;1103&quot; src=&quot;/_astro/01.B6syegNP_66EK6.webp&quot; srcset=&quot;/_astro/01.B6syegNP_Z6tFLi.webp 640w, /_astro/01.B6syegNP_2zjnq.webp 750w, /_astro/01.B6syegNP_Z1FCO9T.webp 828w, /_astro/01.B6syegNP_ZRSJDW.webp 1080w, /_astro/01.B6syegNP_Z1QTOLE.webp 1280w, /_astro/01.B6syegNP_Z1M94Ko.webp 1668w, /_astro/01.B6syegNP_66EK6.webp 1911w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこにあるシートのURLをタップして、シートに記入する感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1572&quot; height=&quot;660&quot; src=&quot;/_astro/02.encn5Or9_1WFReN.webp&quot; srcset=&quot;/_astro/02.encn5Or9_Z14fFb2.webp 640w, /_astro/02.encn5Or9_2hhqyY.webp 750w, /_astro/02.encn5Or9_Z11E4dx.webp 828w, /_astro/02.encn5Or9_Z18GKHa.webp 1080w, /_astro/02.encn5Or9_2vLx2A.webp 1280w, /_astro/02.encn5Or9_1WFReN.webp 1572w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;GASで時間主導型で動く関数を用意する&lt;a href=&quot;#gasで時間主導型で動く関数を用意する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、適当に関数を用意して、それが◯時間おきとかに作動するようにしましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1412&quot; height=&quot;1182&quot; src=&quot;/_astro/03.Bln8_DA7_196pb5.webp&quot; srcset=&quot;/_astro/03.Bln8_DA7_Z1cEENN.webp 640w, /_astro/03.Bln8_DA7_Z18evPa.webp 750w, /_astro/03.Bln8_DA7_ZoPXuP.webp 828w, /_astro/03.Bln8_DA7_Z2rbRkq.webp 1080w, /_astro/03.Bln8_DA7_2a8FFs.webp 1280w, /_astro/03.Bln8_DA7_196pb5.webp 1412w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その関数内で、指定した時間外の場合、通知しないようにする&lt;a href=&quot;#その関数内で指定した時間外の場合通知しないようにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、寝ている間にこの意識付けの通知が送られてくるのは億劫なので、
通知が送られないようにする時間帯を設定します。以下の場合だと、AM3:00〜AM9:59の間は通知されてきませんね。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Getting notification to send webhook requests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[] || bool}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hour&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getHours&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;overtimeStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;overtimeEnd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hour&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;overtimeStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hour&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;overtimeEnd&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numColumns&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastRow&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;numColumns&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;newRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newValues&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;時間内であれば、Discordチャンネルに通知する&lt;a href=&quot;#時間内であればdiscordチャンネルに通知する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上記の場合であれば、AM3:00〜AM9:59ではない場合に、Discordに通知を飛ばしたいと思います。
使用するDiscordのチャンネルを作ったりして、チャンネル設定でWebhookを作成しましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;通知する内容は、習慣化する行動と、意識できているかどうかを記録するシートのURL。&lt;a href=&quot;#通知する内容は習慣化する行動と意識できているかどうかを記録するシートのurl&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;送る内容はこんな感じにします。
最初に習慣化する行動を書いて、その次に、記録用のシートのURLを埋め込みます。フッターにはGoogleスプシのロゴを入れてみたり。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; Getting notification to send webhook requests.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string{}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createHabitNotification&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bucketUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL_OF_STORAGE_FOR_WEBLIP&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folderOfImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IMAGE_FOLDER_FOR_SERVICES&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageFolderUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;bucketUrl&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;folderOfImage&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;歯を開いて！&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlOfSheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL_OF_SHEET&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;imageFolderUrl&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;IMAGE_FILE_FOR_SPREADSHEET&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;シートに記入！&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4569935&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlOfSheet&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;footer&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;GoogleSpreadsheet&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;icon_url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnEmbeds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;returnEmbeds&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;username&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;歯を開かせるあゆ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;embeds&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnEmbeds&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// , &quot;tts&quot;: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1911&quot; height=&quot;1103&quot; src=&quot;/_astro/01.B6syegNP_66EK6.webp&quot; srcset=&quot;/_astro/01.B6syegNP_Z6tFLi.webp 640w, /_astro/01.B6syegNP_2zjnq.webp 750w, /_astro/01.B6syegNP_Z1FCO9T.webp 828w, /_astro/01.B6syegNP_ZRSJDW.webp 1080w, /_astro/01.B6syegNP_Z1QTOLE.webp 1280w, /_astro/01.B6syegNP_Z1M94Ko.webp 1668w, /_astro/01.B6syegNP_66EK6.webp 1911w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上です！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわ、通知されてきた！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;DiscordのWebhookを使ったツールは、これで、ちゃんと行動が定着するかどうかを記録して習慣化していこう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他にも何か作れないかなあ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年06月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202306/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202306/</guid><description>kinkingame24bitのYouTube等の更新状況になります。ABRISSのシリーズが完結して、No Man&apos;s Skyのシリーズを更新しています。</description><pubDate>Wed, 05 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年6月に投稿した動画の一覧&lt;a href=&quot;#2023年6月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：17&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度もマスター派になりたくない #06 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度もマスター派になりたくない-06--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/NB0PltOrNR8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】A World of ARCH #01【ゆっくり実況】&lt;a href=&quot;#no-mans-skya-world-of-arch-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/EVjd2qtUa3s/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】そういや前回宇宙船に乗ってなかったな #02 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyそういや前回宇宙船に乗ってなかったな-02--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VI3l6sJmNmc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ABRISS】爆発させてみましょう🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#abriss爆発させてみましょう本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ehwqypynBOE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度やるともう1度やりたくなるカード #07 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度やるともう1度やりたくなるカード-07--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/rbUjYulKN7k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】燃えるほど暑い星に木造半地下拠点を建てる #03 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky燃えるほど暑い星に木造半地下拠点を建てる-03--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uySjK0pIbd8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】燃えるほど暑い星の次に熱湯が降る星なんて聞いてない #04 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-sky燃えるほど暑い星の次に熱湯が降る星なんて聞いてない-04--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Tp2OA0EXWaI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ABRISS】爆発させてみましょうその2🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#abriss爆発させてみましょうその2本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KSDtJwDNv7o/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度カードルールをリセットさせてもらいたい #08 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度カードルールをリセットさせてもらいたい-08--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/x0RJ01hELVY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】センチネルと歴史を架けた初めてのバトルin宇宙 #05 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyセンチネルと歴史を架けた初めてのバトルin宇宙-05--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1EZggQbCvZ4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】ダークセンチネルと歴史を架けたバトル #06 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyダークセンチネルと歴史を架けたバトル-06--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/IRNNALhmjV4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ABRISS】爆発させてみましょうその3🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#abriss爆発させてみましょうその3本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/w_WHnyZqUbs/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度で種々のミニゲームをクリアしたい #09 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度で種々のミニゲームをクリアしたい-09--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9nipzUPvs_g/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】う○こ色の貨物船が手に入ったぞお #07 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyうこ色の貨物船が手に入ったぞお-07--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/b9afqZdayg4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【No Man’s Sky】めっちゃ集めてめっちゃ売ってめっちゃ買えるぞ #08 | A World of ARCH【ゆっくり実況】&lt;a href=&quot;#no-mans-skyめっちゃ集めてめっちゃ売ってめっちゃ買えるぞ-08--a-world-of-archゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Nk1Tw8wnNqg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【ABRISS】爆発させてみましょうその4🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#abriss爆発させてみましょうその4本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jrpKRLR9d64/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度やったらやめられないエルノーイル #10 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度やったらやめられないエルノーイル-10--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/06/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/m_ax3hUp0zQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は17本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年05月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202305/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202305/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Cliff Empireのシリーズが完結しました。</description><pubDate>Tue, 06 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年5月に投稿した動画の一覧&lt;a href=&quot;#2023年5月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：20&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この崖は難攻不落すぎる #16（完） | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの崖は難攻不落すぎる-16完--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sWgAPMn6gwc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】総集編 | 移住民は港島を作る【ゆっくり実況】&lt;a href=&quot;#patron総集編--移住民は港島を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6Qo_Sg21Tjs/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】チェーンソーがないのにどうして切れるでごわす？🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryチェーンソーがないのにどうして切れるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XvcSH-E2Htw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing) #01【実況】&lt;a href=&quot;#ff81度しかドローしないfinal-fantasy-viii-remastered-no-drawing-01実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/y2_UCle4dLQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;包丁とタイマーが飛び交うキッチン【Cooking Simulator】&lt;a href=&quot;#包丁とタイマーが飛び交うキッチンcooking-simulator&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/_GxXhqw4exI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度しかX-ATM092と戦いたくない #02 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度しかx-atm092と戦いたくない-02--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xp9I0PVGcY0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を絶滅させるABRISS #01【実況】&lt;a href=&quot;#建物を絶滅させるabriss-01実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/rHhNVYkv8fw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を全滅させるABRISS #02【実況】&lt;a href=&quot;#建物を全滅させるabriss-02実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/0uukSn47DAk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度で列車の切り離しを成功させたい #03 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度で列車の切り離しを成功させたい-03--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/m7Tew7yatE8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度で良いからアダマンタインを落としてもらいたい #04 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度で良いからアダマンタインを落としてもらいたい-04--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KAw0JUGzwF8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を腐食させるABRISS #03【実況】&lt;a href=&quot;#建物を腐食させるabriss-03実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KkognE5JtT8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を浸食するABRISS #04【実況】&lt;a href=&quot;#建物を浸食するabriss-04実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2_l7AKu1m14/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory垂れ流し】石炭と鉄鉱石ほしい #03 | 徒然工業化【実況】&lt;a href=&quot;#satisfactory垂れ流し石炭と鉄鉱石ほしい-03--徒然工業化実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/4C9ZWt7v7ss/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory垂れ流し】工場がデカくて移動が辛いぞ #04 | 徒然工業化【実況】&lt;a href=&quot;#satisfactory垂れ流し工場がデカくて移動が辛いぞ-04--徒然工業化実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/BGzaD_mZds0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を燃焼するABRISS #05【実況】&lt;a href=&quot;#建物を燃焼するabriss-05実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/M2AomUpUtIM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;建物を廃墟にするABRISS #06【実況】&lt;a href=&quot;#建物を廃墟にするabriss-06実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/_kajK4vZ8Lc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory垂れ流し】石油を掘る準備 #05 | 徒然工業化【実況】&lt;a href=&quot;#satisfactory垂れ流し石油を掘る準備-05--徒然工業化実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/39gSTSt0dF4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度も魔女イデアを狙撃したくない #05 | 1度しかドローしないFINAL FANTASY VIII Remastered (No Drawing)【実況】&lt;a href=&quot;#ff81度も魔女イデアを狙撃したくない-05--1度しかドローしないfinal-fantasy-viii-remastered-no-drawing実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/f5bHMjB4S2s/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サンドボックスモードでギッタンギッタンにするABRISS #07【実況】&lt;a href=&quot;#サンドボックスモードでギッタンギッタンにするabriss-07実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kJEDOZb6eEU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】総集編 | 極寒の氷の世界で極限生活【ゆっくり実況】&lt;a href=&quot;#frostpunk総集編--極寒の氷の世界で極限生活ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/05/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/31_ISixz-QQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は20本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年04月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202304/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202304/</guid><description>kinkingame24bitのYouTube等の更新状況になります。FF8のシリーズが完結しました。</description><pubDate>Thu, 11 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年4月に投稿した動画の一覧&lt;a href=&quot;#2023年4月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：25&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【FF8】先生怒らないからドローした人は手を挙げて #04 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8先生怒らないからドローした人は手を挙げて-04--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bremuXDNKfY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】釣り狂いの入江でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron釣り狂いの入江でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/L9FrrfQ3IMA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】手に入るGFをさっさと全て集めたい #05 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8手に入るgfをさっさと全て集めたい-05--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wLM6Eo-dWKk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】人語を喋れるペンギンはリーダーに仕立てられたでごわす🐧本編は概要欄のURLから #ゆっくり実況 #shorts&lt;a href=&quot;#frostpunk人語を喋れるペンギンはリーダーに仕立てられたでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/BRqZxdX03ys/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】ジャンクション強化してアルテマウェポンやっつけっぞ、ハッ集中！ #06 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8ジャンクション強化してアルテマウェポンやっつけっぞハッ集中-06--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/i1Sy2WbI5m8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】ビーコンを建てたでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunkビーコンを建てたでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ulRdxgprB9U/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Minecraft】ボートで海を越えたい #02 | ズブズブの初心者がエンダードラゴンを倒すまでのヤツ【実況】&lt;a href=&quot;#minecraftボートで海を越えたい-02--ズブズブの初心者がエンダードラゴンを倒すまでのヤツ実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GhzqDBmRB0w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】どういうことだってばよ・・・🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunkどういうことだってばよ本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/cL5Z7iYXXkg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】ルナティックパンドラにさっさと突撃したい #07 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8ルナティックパンドラにさっさと突撃したい-07--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ZqRrUn5oicE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】雪食ったら暖かくなってオートマトンが来たでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunk雪食ったら暖かくなってオートマトンが来たでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Zg0tg5ywa48/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】アルティミシア城の悲しきしもべ達をさっさと解放したい #08 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8アルティミシア城の悲しきしもべ達をさっさと解放したい-08--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/iOqHjNYdkW4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】ウィンターホームの崩壊でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunkウィンターホームの崩壊でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kYP6UQKnO8U/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Minecraft】エンダーマンが怖い #03 | ズブズブの初心者がエンダードラゴンを倒すまでのヤツ【実況】&lt;a href=&quot;#minecraftエンダーマンが怖い-03--ズブズブの初心者がエンダードラゴンを倒すまでのヤツ実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/aF_2TUideGY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】カンストの不満を下げて追放を免れるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunkカンストの不満を下げて追放を免れるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/vYvIM_AEHWc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】オメガウェポンやっつけっぞ、ハッ集中！ #09 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8オメガウェポンやっつけっぞハッ集中-09--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lCiIhYrthr0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】凍えているやつがいるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunk凍えているやつがいるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/JsMuWeBqX64/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】ラスボスやっつけっかあ～ #10（完） | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8ラスボスやっつけっかあ-10完--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/8rijrGiT3KU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】南極の最低気温はマイナス80℃らしいでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunk南極の最低気温はマイナス80らしいでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/QlcAW6PHjFg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Minecraft】ダイヤモンドが欲しい #04 | ズブズブの初心者がエンダードラゴンを倒すまでのヤツ【実況】&lt;a href=&quot;#minecraftダイヤモンドが欲しい-04--ズブズブの初心者がエンダードラゴンを倒すまでのヤツ実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CkM3oImJSiE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】ジェネレーター爆発寸前で大寒波の始まりでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunkジェネレーター爆発寸前で大寒波の始まりでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Xs5mFddXFQo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この軌道ステーションには債務が多すぎる #13 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの軌道ステーションには債務が多すぎる-13--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jnrn0DaOeD0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】気合で大寒波を乗り越えるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#frostpunk気合で大寒波を乗り越えるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/g2FCI-kbzZY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この都市の敷地が広大すぎる #14 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの都市の敷地が広大すぎる-14--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/u_mV-ZMBCyc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】アイツずっと壁を見ながらコーヒーすすってるでごわす？🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryアイツずっと壁を見ながらコーヒーすすってるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ifuW-3I3buI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この議会が便利すぎる #15 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの議会が便利すぎる-15--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/04/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XhyD7tskX7w/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は25本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年03月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202303/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202303/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Cliff EmpireやFF8のシリーズなどが始まりました。</description><pubDate>Fri, 07 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年3月に投稿した動画の一覧&lt;a href=&quot;#2023年3月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：29&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】移住民は摩天楼を作る #01【ゆっくり実況】&lt;a href=&quot;#cliff-empire移住民は摩天楼を作る-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/tjzXN5F1VlA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】このゲームはマビノギじゃねえよ🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronこのゲームはマビノギじゃねえよ本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/hCr1KrXXths/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この交易ポータルがSFすぎる #02 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの交易ポータルがsfすぎる-02--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Pv41aOsidMA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】このタワーディフェンスが楽勝すぎる #03 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこのタワーディフェンスが楽勝すぎる-03--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7Xhuq9TLgX4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】ひたすらのどかに釣ってるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronひたすらのどかに釣ってるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bQDmfgvHSkU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】このタワーディフェンスが一方的すぎる #04 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこのタワーディフェンスが一方的すぎる-04--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/g2b6BlCVbUY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】ひたすら石を拾うwithくまでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronひたすら石を拾うwithくまでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LqmDmLk054k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この原子力発電所がインフレすぎる #05 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの原子力発電所がインフレすぎる-05--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CWsIXwSJ5Ck/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】下半身の耐寒能力に絶対的な自信ニキでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron下半身の耐寒能力に絶対的な自信ニキでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/usUrA0pej5Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この都市には家が無さすぎる #06 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの都市には家が無さすぎる-06--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/z9kiRb8DX80/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この都市の防衛設備が貧弱すぎる #07 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの都市の防衛設備が貧弱すぎる-07--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/NRDdX98gqPk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】寒空の下で家を建てるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron寒空の下で家を建てるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wsSJ3DnsDfE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この崖が大器晩成すぎる #08 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの崖が大器晩成すぎる-08--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wsSJ3DnsDfE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】途中まで作った街並みは巨人が出現しそうでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron途中まで作った街並みは巨人が出現しそうでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6_9PR6Pot6s/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】このSDGsがシビアすぎる #09 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこのsdgsがシビアすぎる-09--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/J9dV8ERZr14/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】竜巻の襲撃でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron竜巻の襲撃でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/l8cgLW3Tqrc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory垂れ流し】徒然工業化 #01&lt;a href=&quot;#satisfactory垂れ流し徒然工業化-01&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AolHs3ZnfE0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この崖が盤石すぎる #10 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの崖が盤石すぎる-10--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/BjRCVavRJ8Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】何を建てるかはヒミツでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patron何を建てるかはヒミツでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/O-gArwtmz80/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この市民共が鬼畜すぎる #11 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの市民共が鬼畜すぎる-11--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/NmCrGrFvzOw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】ヒツジを見て現実逃避するでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronヒツジを見て現実逃避するでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GPWCoB-K6Sc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Cliff Empire】この軌道ステーションには金が無さすぎる #12 | 移住民は摩天楼を作る【ゆっくり実況】&lt;a href=&quot;#cliff-empireこの軌道ステーションには金が無さすぎる-12--移住民は摩天楼を作るゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/aoKw8kQ6fCQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】このゲームはエイジオブバンパイア2じゃねえよ🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronこのゲームはエイジオブバンパイア2じゃねえよ本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/iPiIT8OHhKk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory垂れ流し】apexの傍らで #02 | 徒然工業化&lt;a href=&quot;#satisfactory垂れ流しapexの傍らで-02--徒然工業化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/F03UkfNLZZA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】1度しかドローしないFINAL FANTASY VIII Remastered攻略（編集版） #01【ゆっくり実況】&lt;a href=&quot;#ff81度しかドローしないfinal-fantasy-viii-remastered攻略編集版-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kCol6Myl_2g/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】タフネスの町でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#patronタフネスの町でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9ShFgR_P4gc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】クライム&amp;amp;ペナルティをさっさと作りたい #02 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8クライムペナルティをさっさと作りたい-02--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XLpv-E_BLDg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【FF8】ライオンハートをさっさと作りたい #03 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版）【ゆっくり実況】&lt;a href=&quot;#ff8ライオンハートをさっさと作りたい-03--1度しかドローしないfinal-fantasy-viii-remastered編集版ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Zi5nNY6bqcg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Minecraft】ズブズブの初心者がエンダードラゴンを倒すまでのヤツ #01【実況】&lt;a href=&quot;#minecraftズブズブの初心者がエンダードラゴンを倒すまでのヤツ-01実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/03/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/O2OIWcyxDiI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は29本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2023年02月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202302/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202302/</guid><description>2023年02月に読んだ本になります。けっこう読めた。</description><pubDate>Tue, 07 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2月の読書メーター&lt;a href=&quot;#2月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだページ数：896&lt;/li&gt;
&lt;li&gt;ナイス数：2&lt;/li&gt;
&lt;li&gt;読んだ本の数：4&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;演奏するプログラミング、ライブコーディングの思想と実践 ―Show Us Your Screens&lt;a href=&quot;#演奏するプログラミングライブコーディングの思想と実践-show-us-your-screens&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;演奏するプログラミング、ライブコーディングの思想と実践 ―Show Us Your Screens&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.DSUDvXk2_10mGEu.webp&quot; srcset=&quot;/_astro/01.DSUDvXk2_10mGEu.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月24日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E7%94%B0%E6%89%80+%E6%B7%B3&quot; target=&quot;_blank&quot;&gt;田所 淳&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ミュージッククリエイターハンドブック MIDI検定公式ガイド&lt;a href=&quot;#ミュージッククリエイターハンドブック-midi検定公式ガイド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ミュージッククリエイターハンドブック MIDI検定公式ガイド&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/02.ke6Pkp4X_21o8NU.webp&quot; srcset=&quot;/_astro/02.ke6Pkp4X_21o8NU.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月24日&lt;/li&gt;
&lt;li&gt;著者：&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ピアニストならだれでも知っておきたい「からだ」のこと の 感想&lt;a href=&quot;#ピアニストならだれでも知っておきたいからだのこと-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ピアニストならだれでも知っておきたい「からだ」のこと&quot; loading=&quot;lazy&quot; width=&quot;55&quot; height=&quot;75&quot; src=&quot;/_astro/03.BnWcS6yL_ZO8AQu.webp&quot; srcset=&quot;/_astro/03.BnWcS6yL_ZO8AQu.webp 55w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;姿勢は上と前に吊り上げることを意識する。それと、小指主導で手を動かす。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月24日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%88%E3%83%BC%E3%83%9E%E3%82%B9+%E3%83%9E%E3%83%BC%E3%82%AF%2C%E3%83%88%E3%83%A0+%E3%83%9E%E3%82%A4%E3%83%AB%E3%82%BA%2C%E3%83%AD%E3%83%90%E3%83%BC%E3%82%BF+%E3%82%B2%E3%82%A4%E3%83%AA%E3%83%BC&quot; target=&quot;_blank&quot;&gt;トーマス マーク,トム マイルズ,ロバータ ゲイリー&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;全米NO.1のセールス・ライターが教える 10倍売る人の文章術 の 感想&lt;a href=&quot;#全米no1のセールスライターが教える-10倍売る人の文章術-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;全米NO.1のセールス・ライターが教える 10倍売る人の文章術&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/04.BxJFe8wv_1RGLwa.webp&quot; srcset=&quot;/_astro/04.BxJFe8wv_1RGLwa.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;セールスライティングの辞書的な感じで使えそうな本です。ここに書いてあることを、実践して振り返って実践して振り返って、の繰り返しで文章術が上達していけそうな気がします。実際に筆者とその講義を受けた方々が書いたいくつかの具体例に関しても解説されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月24日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B8%E3%83%A7%E3%82%BB%E3%83%95%E3%83%BB%E3%82%B7%E3%83%A5%E3%82%AC%E3%83%BC%E3%83%9E%E3%83%B3&quot; target=&quot;_blank&quot;&gt;ジョセフ・シュガーマン&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は4冊か！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年02月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202302/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202302/</guid><description>kinkingame24bitのYouTube等の更新状況になります。Ghost of TsushimaとRAILGRADEのシリーズが完結しました。</description><pubDate>Mon, 06 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年2月に投稿した動画の一覧&lt;a href=&quot;#2023年2月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：31&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】石川のおっちゃんと巴が共闘？ #51 | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima石川のおっちゃんと巴が共闘-51--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/54qj-etrHGM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】石川のおっちゃんの巴退治、完結 #52 | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima石川のおっちゃんの巴退治完結-52--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FAeCZU-pkfU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】タイムラプス（Drone’s Nestその2）でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryタイムラプスdrones-nestその2でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jaXw1srCQv4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】蒙古の頭領コトゥン・ハーンを討伐（前編） #53 | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima蒙古の頭領コトゥンハーンを討伐前編-53--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/avAL-aI6Ip4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】タイムラプス（Drone’s Nestその3）でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryタイムラプスdrones-nestその3でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/R7ZAurPPfQU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】蒙古の頭領コトゥン・ハーンを討伐（後編） #54 | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima蒙古の頭領コトゥンハーンを討伐後編-54--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ton9tLBf7pY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】志村の叔父上と終幕 #55 | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima志村の叔父上と終幕-55--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2d0c-xXKJ7o/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】エンディング、そして・・・ #56（完） | 対馬に仇なす者共に鉄槌を【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaエンディングそして-56完--対馬に仇なす者共に鉄槌をゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/f2GTu7lq45A/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】丘の上のお城でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory丘の上のお城でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/z7om3F1SMdg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】総集編 | 未知の砂漠でゆっくり工業化：前半【ゆっくり実況】&lt;a href=&quot;#satisfactory総集編--未知の砂漠でゆっくり工業化前半ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/t9utlUTt6n4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】法網とまでは言わないが規則は一つ在る。絶対に逆走するな！ #12 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade法網とまでは言わないが規則は一つ在る絶対に逆走するな-12--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/l1-o-zzEpEE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】送配電網で作られるネオンライトは工業都市の象徴でごわす #13 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade送配電網で作られるネオンライトは工業都市の象徴でごわす-13--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5mSHAwW1KAc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ガラスの草原でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryガラスの草原でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/CmdaU0-AdSU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】監視網をこのタワマンから張り巡らすことはできないかしら #14 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade監視網をこのタワマンから張り巡らすことはできないかしら-14--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TERD3cp6V54/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】通信網によって制御される今日のご時世でごわす #15 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade通信網によって制御される今日のご時世でごわす-15--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2Z4Uhr2cW9A/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】原子力発電所でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory原子力発電所でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/H9bJPy2oOsI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】因陀羅網が如き促進剤の掛け合いでごわす #16 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade因陀羅網が如き促進剤の掛け合いでごわす-16--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LsajoWTwDOg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】軌道エレベーターでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory軌道エレベーターでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/azzXdp_JTww/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】安全網が欲しいレベルで高低差がスゴイ #17 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade安全網が欲しいレベルで高低差がスゴイ-17--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/b1ycdSRyqsY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】神経集網が如き規格部品工場までの路線群でごわす #18 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade神経集網が如き規格部品工場までの路線群でごわす-18--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xgFq3WsJujY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】絶望の断末魔でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory絶望の断末魔でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/8FtCVUUW-jg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】地獄網のように壮絶に難しいでごわす #19 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade地獄網のように壮絶に難しいでごわす-19--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nHjBkuk3oQM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】深宇宙探査網でも作る気なのかしら #20 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade深宇宙探査網でも作る気なのかしら-20--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/QXbMKLBQqJA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】粒子加速器で原子核パスタごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory粒子加速器で原子核パスタごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gwrRNJFlcyw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】総集編 | 未知の砂漠でゆっくり工業化：後半【ゆっくり実況】&lt;a href=&quot;#satisfactory総集編--未知の砂漠でゆっくり工業化後半ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/4-a1YzmskI4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】トカゲイヌのクリスマス仕様でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryトカゲイヌのクリスマス仕様でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1G4dhgWO3Kk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】交通網が大変な賑やかさを見せているでごわす #21 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade交通網が大変な賑やかさを見せているでごわす-21--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5ByqnHOBhCA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】食物網が如きサプライチェーンの循環でごわす #22 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade食物網が如きサプライチェーンの循環でごわす-22--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/eDPFhVs1U4E/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】管網があまりにも込み入っているでごわす #23 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade管網があまりにも込み入っているでごわす-23--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Yce-QJ_M2wM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】鉄道網で異星を工業化する #24（完） | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade鉄道網で異星を工業化する-24完--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/quOnhKJyYDU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】「あぁぁあああ」場面集でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryあぁぁあああ場面集でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/02/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/LqTSCuzgYrc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は31本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】Pycordでボットの機能を増やした（Discord Bot改良：第2回）</title><link>https://endorphinbath.com/posts/python-discord-bot-enhance-2/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-discord-bot-enhance-2/</guid><description>以前にRenderでビルドしていたDiscordのボットを刷新していきます。pycordを使って、スラッシュコマンドの実装、オートコンプリートの適用などを行いました。</description><pubDate>Fri, 17 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあ、早速作っていきますかあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あのボットだね、改良だ改良だっ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、行くぜえ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何をしようとしているのか&lt;a href=&quot;#何をしようとしているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は以前、「Discord.py」というライブラリとその派生のライブラリ「Pycord」を使って、Discord上で動くボットを作りました。
こんな感じのイメージで・・・（これは改良後のやつです）
&lt;img loading=&quot;lazy&quot; width=&quot;2996&quot; height=&quot;1238&quot; src=&quot;/_astro/01.XUkIyTT3_Zt1iGh.webp&quot; srcset=&quot;/_astro/01.XUkIyTT3_AQyLE.webp 640w, /_astro/01.XUkIyTT3_NT1eA.webp 750w, /_astro/01.XUkIyTT3_ZR3IGY.webp 828w, /_astro/01.XUkIyTT3_Z2fuDoe.webp 1080w, /_astro/01.XUkIyTT3_Znkja.webp 1280w, /_astro/01.XUkIyTT3_Z1pFoAm.webp 1668w, /_astro/01.XUkIyTT3_2u5qe2.webp 2048w, /_astro/01.XUkIyTT3_1SkdGo.webp 2560w, /_astro/01.XUkIyTT3_Zt1iGh.webp 2996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、そのボットのプログラムが入ったコンテナを、「Render」というビルドサービスに間借りして運用していたわけです。
Renderでビルドした時の記事はこれになります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/renderdotcom-how-to-deploy-discord-bot/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Render.com】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方（Dockerも利用）&lt;/div&gt;&lt;div&gt;RenderでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で一応実施できたので、ご参考ください。Dockerも使いました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、この時に作ったボットのシステム概略はこんな感じです。
このボットは、Discordから打ち込んだ内容を元に、PythonからGoogleスプレッドシートを参照及び操作して、Discordで返事を返すというものです。
&lt;img loading=&quot;lazy&quot; width=&quot;1445&quot; height=&quot;841&quot; src=&quot;/_astro/02.CMWKhsIf_1DQAK7.webp&quot; srcset=&quot;/_astro/02.CMWKhsIf_ZlH1j2.webp 640w, /_astro/02.CMWKhsIf_mDB28.webp 750w, /_astro/02.CMWKhsIf_1DL1YW.webp 828w, /_astro/02.CMWKhsIf_ZgGK6K.webp 1080w, /_astro/02.CMWKhsIf_Z1O6jOd.webp 1280w, /_astro/02.CMWKhsIf_1DQAK7.webp 1445w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、前回作ったそのボットには、問題点がいくつかありました。ザッと上げると・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Renderだとサービスのコスパが悪い？（Renderは定額制だがそこまで使っていなかった。1000円くらい。）&lt;/li&gt;
&lt;li&gt;PythonからGoogleスプシへの参照及び更新処理のロジックは、Google Apps Scriptでも使っている。そのため、ソースコードが二重管理になっている。&lt;/li&gt;
&lt;li&gt;PythonからGoogleスプシを参照するためには、ServiceAccountのjsonファイルを管理する必要がある。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;・・・みたいな感じで、金銭面と管理面の問題がありました。
そのため、今回はこのDiscordのボットの機能追加含めて、色々とサービス構成を刷新していきたいと思います。
今のところ、こんな構成で考えています。
&lt;img loading=&quot;lazy&quot; width=&quot;1517&quot; height=&quot;765&quot; src=&quot;/_astro/03.i8-nwnDJ_22xgzD.webp&quot; srcset=&quot;/_astro/03.i8-nwnDJ_19Ewcz.webp 640w, /_astro/03.i8-nwnDJ_1Tt3i3.webp 750w, /_astro/03.i8-nwnDJ_i99wy.webp 828w, /_astro/03.i8-nwnDJ_ZOvx4W.webp 1080w, /_astro/03.i8-nwnDJ_Z2j4JsL.webp 1280w, /_astro/03.i8-nwnDJ_22xgzD.webp 1517w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、色々と色が入っていてアレですが、変更点は以下になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pythonコンテナをビルドする場所を、Google Kubernetes Engineに移設する。&lt;/li&gt;
&lt;li&gt;Googleスプシへの参照及び更新処理は、Google Apps Script（以降、GAS）のみが行うこととする。Pythonは、GASアプリに対してリクエストすることによって、Discordクライアントへの返信内容を決める。&lt;/li&gt;
&lt;li&gt;そのため、ServiceAccountのjsonファイルを管理する必要がなくなる。&lt;/li&gt;
&lt;li&gt;Discordから指示する内容を、一部スラッシュコマンドで実装する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;とまあ、こんな感じでサーバ構成を変更していきます。水色の点線の中が今回想定している範囲になります。
水色の点線以外にも別に機能があるので（「Webhook通知」は第1回の天気情報の部分ですね）、出来上がったら果たしてどうなるんでしょうか。
さあ、行ってみましょう。（Google Kubernetes Engineに移設するのは今回やりません。他にも載せたい機能があるのでその後です。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一旦、一段落。&lt;a href=&quot;#一旦一段落&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;はい、作る過程は飛ばします・・・
色々と新しいことが出てきて、てんてこ舞いだったのであまり上手くまとめられる自信がありません・・・
とりあえず、いくつか取り上げてみると・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;GASアプリは、リクエストメソッドを「GET」と「POST」しか受け取れない。&lt;/li&gt;
&lt;li&gt;なので、リクエストヘッダーではなく、ボディにメソッドを入れて分類する。&lt;/li&gt;
&lt;li&gt;GASにリクエストを送る処理を行うと、Discord上でインタラクションエラーになることが多発する。（スラッシュコマンド時）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;まだ、Pycordに関して理解が及んでいないので、細かい部分の実装が出来ていません。
しかしながら、エラーになっているのは、Googleスプシの参照を行う部分のみなので、まあ一旦よしとしましょう・・・
それでは、少しボットサービスの説明です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;改良後のサービス概略&lt;a href=&quot;#改良後のサービス概略&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;概略です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;今回使うライブラリ&lt;a href=&quot;#今回使うライブラリ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回使う主なライブラリは、引き続きこれです。pycordです。&lt;/p&gt;&lt;a href=&quot;https://docs.pycord.dev/en/stable&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;docs.pycord.dev&lt;/span&gt;&lt;/div&gt;&lt;div&gt;docs.pycord.dev&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.pycord.dev&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;久しぶりにpycordのドキュメントを開くと、色々と機能やら説明やらが充実していて驚きました！
前回から1年も経っていないと思いますが・・・、知らない間に僕が成長したのでしょうか？（そんなバカな）
このボットは現在、Googleスプシをいじっていると言いました。
そのことについて、もう少し詳細を。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Spreadsheetの中身&lt;a href=&quot;#google-spreadsheetの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、今回使うボットの肝となるGoogleスプレッドシートの中身がこんな感じです。
このGoogleスプレッドシートでは、自分が気になったWebサイトのタイトルとURLを管理しています。E〜J列では、そのWebサイトのカテゴリ分けもしています。
&lt;img loading=&quot;lazy&quot; width=&quot;2890&quot; height=&quot;1428&quot; src=&quot;/_astro/04.ChC8hMhW_tcIGi.webp&quot; srcset=&quot;/_astro/04.ChC8hMhW_Zwwqpu.webp 640w, /_astro/04.ChC8hMhW_Z2brI7R.webp 750w, /_astro/04.ChC8hMhW_Z22Pcts.webp 828w, /_astro/04.ChC8hMhW_ZRwkwx.webp 1080w, /_astro/04.ChC8hMhW_1YCX74.webp 1280w, /_astro/04.ChC8hMhW_Spgh2.webp 1668w, /_astro/04.ChC8hMhW_Z21ysDJ.webp 2048w, /_astro/04.ChC8hMhW_ZCbX9p.webp 2560w, /_astro/04.ChC8hMhW_tcIGi.webp 2890w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このシートを使って、Discord上で一部のやり取りをボットと行っていきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Spreadsheetを使った機能その1：あるかどうか検索して登録する&lt;a href=&quot;#google-spreadsheetを使った機能その1あるかどうか検索して登録する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使う機能は2つです。
1つ目は、Discord→Python→GASという風に渡されたURLがシートの中にあるかどうかを検索して（赤線）、あったらその旨をDiscordで返信する。なかったらそのURLに関する情報を登録するかどうかを質問する（水色線）。
&lt;img loading=&quot;lazy&quot; width=&quot;2890&quot; height=&quot;1428&quot; src=&quot;/_astro/05.DmyyEDaH_1XVBkz.webp&quot; srcset=&quot;/_astro/05.DmyyEDaH_Z18AtKp.webp 640w, /_astro/05.DmyyEDaH_2hFml9.webp 750w, /_astro/05.DmyyEDaH_2qhRYy.webp 828w, /_astro/05.DmyyEDaH_Ccx6J.webp 1080w, /_astro/05.DmyyEDaH_Z1zOi3A.webp 1280w, /_astro/05.DmyyEDaH_2o98Uj.webp 1668w, /_astro/05.DmyyEDaH_ZvOA0s.webp 2048w, /_astro/05.DmyyEDaH_RwTtR.webp 2560w, /_astro/05.DmyyEDaH_1XVBkz.webp 2890w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Spreadsheetを使った機能その2：タグに紐づく記事を一覧表示する&lt;a href=&quot;#google-spreadsheetを使った機能その2タグに紐づく記事を一覧表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう1つは、Discord→Python→GASという風に渡されたカテゴリ（タグ）がシートの中にあるかどうかを検索して（赤線）、あったら該当する記事の情報をすべてDiscord上に掲載する（水色線）。なかったらその旨をDiscordで返信する。
&lt;img loading=&quot;lazy&quot; width=&quot;2890&quot; height=&quot;1428&quot; src=&quot;/_astro/06.kgzRVyiZ_Z1ldHv6.webp&quot; srcset=&quot;/_astro/06.kgzRVyiZ_ZA7H2h.webp 640w, /_astro/06.kgzRVyiZ_Z2f2YJE.webp 750w, /_astro/06.kgzRVyiZ_Z26qt6f.webp 828w, /_astro/06.kgzRVyiZ_2nem50.webp 1080w, /_astro/06.kgzRVyiZ_acvTF.webp 1280w, /_astro/06.kgzRVyiZ_ZV1aUm.webp 1668w, /_astro/06.kgzRVyiZ_1ecdWN.webp 2048w, /_astro/06.kgzRVyiZ_Z2rCplN.webp 2560w, /_astro/06.kgzRVyiZ_Z1ldHv6.webp 2890w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際の挙動&lt;a href=&quot;#実際の挙動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、新しくなったボットの実際の挙動を見ていきます。
まずは、既存の機能から。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1.　Googleスプシを使った機能その1：記事がある場合&lt;a href=&quot;#1googleスプシを使った機能その1記事がある場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/webclippings regist &amp;lt;url&amp;gt;&lt;/code&gt;を打った時、シート上に既に登録されているURLがある場合はその旨を教えてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/16.CdRbu5p8_Z1Gag7t.webp&quot; srcset=&quot;/_astro/16.CdRbu5p8_ZGouIo.webp 640w, /_astro/16.CdRbu5p8_Z1Gag7t.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.　Googleスプシを使った機能その1：記事がなくて、登録しない場合&lt;a href=&quot;#2googleスプシを使った機能その1記事がなくて登録しない場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/webclippings regist &amp;lt;url&amp;gt;&lt;/code&gt;で、シート上にURLがなかったらシートに新規登録するかどうかを質問してきます。「いいえ」を選べば登録しません。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/17.DTteZx_h_Zbz42D.webp&quot; srcset=&quot;/_astro/17.DTteZx_h_NbGlr.webp 640w, /_astro/17.DTteZx_h_Zbz42D.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.　Googleスプシを使った機能その1：記事がなくて、登録する場合&lt;a href=&quot;#3googleスプシを使った機能その1記事がなくて登録する場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/webclippings regist &amp;lt;url&amp;gt;&lt;/code&gt;でシート上にURLがない場合に「よろしく」を選ぶと、URLとそのタイトル、そして登録した時の日時を、シートに登録します。
この機能に関する挙動があまり安定しないんですよね・・・難しい・・・
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/18.DYHlF5oS_ZGUcXl.webp&quot; srcset=&quot;/_astro/18.DYHlF5oS_hPxpJ.webp 640w, /_astro/18.DYHlF5oS_ZGUcXl.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.　Googleスプシを使った機能その2：タグに紐づく記事を一覧表示する&lt;a href=&quot;#4googleスプシを使った機能その2タグに紐づく記事を一覧表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/webclippings search &amp;lt;tags&amp;gt;&lt;/code&gt;で、引数に入力したタグが紐付いている記事をシートの中から検索してDiscord上にタイトルとURLを表示してくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;430&quot; src=&quot;/_astro/19_1.Bj-10A-p_If4pV.webp&quot; srcset=&quot;/_astro/19_1.Bj-10A-p_ZhU9gA.webp 640w, /_astro/19_1.Bj-10A-p_If4pV.webp 720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;送信後の挙動
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;430&quot; src=&quot;/_astro/19_2.BZUqXwI9_1pWKGf.webp&quot; srcset=&quot;/_astro/19_2.BZUqXwI9_oMwYI.webp 640w, /_astro/19_2.BZUqXwI9_1pWKGf.webp 720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、新しい機能に行きます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.　あいさつする&lt;a href=&quot;#5あいさつする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/hello&lt;/code&gt;のスラッシュコマンドで、ボットが挨拶してきます。性別と年齢は見ていません。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/11.DcYFbnhl_1zaDiY.webp&quot; srcset=&quot;/_astro/11.DcYFbnhl_Z2vfJ6R.webp 640w, /_astro/11.DcYFbnhl_1zaDiY.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6.　特定の言葉に反応する：その1&lt;a href=&quot;#6特定の言葉に反応するその1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これはスラッシュコマンドではなく、単にメッセージを送信します。
&lt;code&gt;あゆあゆ&lt;/code&gt;と打つと、特定の反応が返ってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/14.mCXEDSB2_1c7IO2.webp&quot; srcset=&quot;/_astro/14.mCXEDSB2_2bSud7.webp 640w, /_astro/14.mCXEDSB2_1c7IO2.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7.　特定の言葉に反応する：その2&lt;a href=&quot;#7特定の言葉に反応するその2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これもスラッシュコマンドではなく、単にメッセージを送信します。
&lt;code&gt;たいやき&lt;/code&gt;とか&lt;code&gt;たい焼き&lt;/code&gt;と打つと、特定の反応が返ってきます。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/15.C_ro0b3t_lRkv6.webp&quot; srcset=&quot;/_astro/15.C_ro0b3t_1lD5Tb.webp 640w, /_astro/15.C_ro0b3t_lRkv6.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8.　今日食べたいものを選択する&lt;a href=&quot;#8今日食べたいものを選択する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/food &amp;lt;food_type&amp;gt; &amp;lt;food&amp;gt;&lt;/code&gt;で、今日食べたいものを選択して送信します。
今回はラーメンを選んでみようと思います。&lt;code&gt;noodle&lt;/code&gt;を選んだときは、&lt;code&gt;ramen&lt;/code&gt;、&lt;code&gt;pasta&lt;/code&gt;、&lt;code&gt;udon&lt;/code&gt;でオートコンプリートされるようにしています。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/23.D9i3UXTV_ZbsTVB.webp&quot; srcset=&quot;/_astro/23.D9i3UXTV_NhPrt.webp 640w, /_astro/23.D9i3UXTV_ZbsTVB.webp 720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれ・・・？&lt;/p&gt;&lt;p&gt;ラーメンにしたのに、たい焼きと言い出す・・・？&lt;/p&gt;&lt;p&gt;次はピザで送ってみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/24.DZL_B7Kt_2hpyiW.webp&quot; srcset=&quot;/_astro/24.DZL_B7Kt_Z1N0O6T.webp 640w, /_astro/24.DZL_B7Kt_2hpyiW.webp 720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれ・・・？&lt;/p&gt;&lt;p&gt;ピッツァにしたのに、たい焼きと言い出す・・・？&lt;/p&gt;&lt;p&gt;はい、この機能はどの食べを選んでも「たい焼き」を選んだことになります。&lt;/p&gt;&lt;p&gt;「そうだね！じゃあ、今日はたい焼きにしようか！」&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9.　現在の日時を表示する&lt;a href=&quot;#9現在の日時を表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/now&lt;/code&gt;と、スラッシュコマンドを打ち込むと現在の日時が返信されます。
個人的に、諸々の作業時間をメモしたかったので実装しました。
&lt;img loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;300&quot; src=&quot;/_astro/25.Dvqf8vzX_1uvV7x.webp&quot; srcset=&quot;/_astro/25.Dvqf8vzX_2uhGvC.webp 640w, /_astro/25.Dvqf8vzX_1uvV7x.webp 720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10.　Notionに新規ページを投稿する&lt;a href=&quot;#10notionに新規ページを投稿する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/notion&lt;/code&gt;と、スラッシュコマンドを打ち込むと、メモ取りアプリ「Notion」に新規ページを投稿してくれます。
この機能はまだ完璧じゃないです、また今度で！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Google Apps Script側の機能&lt;a href=&quot;#google-apps-script側の機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GAS側で行っている処理は、この記事を書いた頃から殆ど変わっていません。
今回のボットからGASアプリへの入り口には、URLが入りますが、下記の記事もURLから書く内容を捏ねていきます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-webclip-to-gss/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】Google Driveに共有したWebサイトのURLをGoogleスプシに転記する。&lt;/div&gt;&lt;div&gt;Googleドライブに共有したWebサイトのURLが載ったテキストファイルを読み込んで、Googleスプシに転記するツールを作りました。後で読みたいと思った記事を一元管理できて便利に使えています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20211231_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;下記のGAS内の関数でPythonからのリクエストを受け取って、上記の記事の処理を行うわけです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;funciton&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;doGet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// GETメソッドを受け取った時の処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doPost&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// POSTメソッドを受け取った時の処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめと、次回やること&lt;a href=&quot;#まとめと次回やること&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まとめです。
今回の作業で、Discordクライアントとやり取りをする部分は出来ました。
それで、主に刷新しようと思っていた事柄が4つの内、3つが解決しました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pythonコンテナをビルドする場所を、Google Kubernetes Engineに移設する。&lt;/li&gt;
&lt;li&gt;✅Googleスプシへの参照及び更新処理は、Google Apps Script（以降、GAS）のみが行うこととする。Pythonは、GASアプリに対してリクエストすることによって、Discordクライアントへの返信内容を決める。&lt;/li&gt;
&lt;li&gt;✅そのため、ServiceAccountのjsonファイルを管理する必要がなくなる。&lt;/li&gt;
&lt;li&gt;✅Discordから指示する内容を、一部スラッシュコマンドで実装する。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;さて、次回から取り組むことをもう少し細かく見るとこうかな。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Notionに新規投稿する機能を作る&lt;/li&gt;
&lt;li&gt;その機能をGitHub Actionsからも呼び出したいので、投稿機能をパッケージ化する（まずは、notion-pyというパッケージを試してみます。）&lt;/li&gt;
&lt;li&gt;これで、①Discordクライアントとやり取りするボットPod、②Notion投稿用のPod、の2種類のPodをKubernetesクラスター上にデプロイする。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;今までやったことがないことで時間が掛かりそうですが、やってやります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず、Discordでは使えそうだね！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これからが本番ですねえ〜&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Pycord】モーダルのdiscord.InputTextStyleでどのように入力できるかを見てみた</title><link>https://endorphinbath.com/posts/pycord-inputtextstyle-watching/</link><guid isPermaLink="true">https://endorphinbath.com/posts/pycord-inputtextstyle-watching/</guid><description>PythonのDiscord拡張ライブラリ、「Pycord」のInputTextStyleでどのようなUIで表示されてどのように入力できるのかを見てみました。</description><pubDate>Thu, 16 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお〜、Discordではモーダルまで使えるのかあ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあ、今回はPycordでモーダルを作る時に使えるテキスト入力のタイプを見ていくよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うい〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Discordではモーダル画面が表示できる&lt;a href=&quot;#discordではモーダル画面が表示できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;巷で有名なチャットサービス、「Discord」では「モーダル画面」を使って、複数行に渡る文章を入力することが出来ます。
そのモーダル画面で利用できる入力タイプは、以下の5種類です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Short Input&lt;/li&gt;
&lt;li&gt;Long Input&lt;/li&gt;
&lt;li&gt;Singleline Input&lt;/li&gt;
&lt;li&gt;Multiline Input&lt;/li&gt;
&lt;li&gt;Paragraph&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;それでは、見ていきましょう。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;並べてみた&lt;a href=&quot;#並べてみた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;5つの入力タイプを指定して、同じモーダル画面上に並べてみました。
&lt;a href=&quot;https://guide.pycord.dev/interactions/ui-components/modal-dialogs&quot; target=&quot;_blank&quot;&gt;このPycordの公式ガイド&lt;/a&gt;にあるEmbedするサンプルコードを参考に並べてみました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Modal&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;**&lt;/span&gt;&lt;span&gt;kwargs&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(*args, **kwargs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(discord.ui.&lt;/span&gt;&lt;span&gt;InputText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Short Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.InputTextStyle.short&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(discord.ui.&lt;/span&gt;&lt;span&gt;InputText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Long Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.InputTextStyle.short&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(discord.ui.&lt;/span&gt;&lt;span&gt;InputText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Singleline Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.InputTextStyle.short&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(discord.ui.&lt;/span&gt;&lt;span&gt;InputText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Multiline Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.InputTextStyle.short&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(discord.ui.&lt;/span&gt;&lt;span&gt;InputText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Paragraph Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.InputTextStyle.short&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;embed &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; discord.&lt;/span&gt;&lt;span&gt;Embed&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Modal Results&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;embed.&lt;/span&gt;&lt;span&gt;add_field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Short Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.children[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].value)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;embed.&lt;/span&gt;&lt;span&gt;add_field&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Long Input&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.children[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;].value)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;send_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[embed])&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@bot&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;notion&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;aaa&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;notion&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.ApplicationContext&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;modal &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyModal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Modal via Slash Command&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; ctx.&lt;/span&gt;&lt;span&gt;send_modal&lt;/span&gt;&lt;span&gt;(modal)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;なんか、大きく2種類に分かれていそうですね。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;1502&quot; src=&quot;/_astro/01.Bo92Uau7_Z27ezV1.webp&quot; srcset=&quot;/_astro/01.Bo92Uau7_RN5uK.webp 640w, /_astro/01.Bo92Uau7_ZQ1dkQ.webp 750w, /_astro/01.Bo92Uau7_1IUOe4.webp 828w, /_astro/01.Bo92Uau7_2mbmUF.webp 1080w, /_astro/01.Bo92Uau7_220CPi.webp 1280w, /_astro/01.Bo92Uau7_2bA6nu.webp 1668w, /_astro/01.Bo92Uau7_Z27ezV1.webp 1886w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;short, singleline はほぼ同じ。&lt;a href=&quot;#short-singleline-はほぼ同じ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1行のみ入力できるようです。ちなみに、4000字の入力制限があります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;long, multiline, paragraph はほぼ同じ。&lt;a href=&quot;#long-multiline-paragraph-はほぼ同じ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;複数行入力できます。この入力スタイルでも、4000文字の入力制限が設けられているようです。&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;discord.InputTextStyle&lt;/code&gt; の詳細は、このページから確認できます。&lt;/p&gt;&lt;a href=&quot;https://pycord.dev/api/enums.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pycord.dev/_static/pycord.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Pycord&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Enumerations&lt;/div&gt;&lt;div&gt;The API provides some enumerations for certain types of strings to avoid the API from being strongly typed in case the strings change in the future. All enumerations are subclasses of an internal c...&lt;/div&gt;&lt;div&gt;pycord.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://pycord.dev/static/img/logo.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;モーダル画面から送信してみる&lt;a href=&quot;#モーダル画面から送信してみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、モーダル画面から入力して、
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1774&quot; height=&quot;1498&quot; src=&quot;/_astro/02.B1pBdv_r_Zz75TN.webp&quot; srcset=&quot;/_astro/02.B1pBdv_r_1c4Vf0.webp 640w, /_astro/02.B1pBdv_r_Z1gE1F7.webp 750w, /_astro/02.B1pBdv_r_ZvVEz3.webp 828w, /_astro/02.B1pBdv_r_MXRzO.webp 1080w, /_astro/02.B1pBdv_r_Z2f22KA.webp 1280w, /_astro/02.B1pBdv_r_6BAUN.webp 1668w, /_astro/02.B1pBdv_r_Zz75TN.webp 1774w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;送信すると、こんな風にDiscord上で出力されます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1998&quot; height=&quot;954&quot; src=&quot;/_astro/03.BDhUZuwZ_2cH5H6.webp&quot; srcset=&quot;/_astro/03.BDhUZuwZ_Z1BK5Mk.webp 640w, /_astro/03.BDhUZuwZ_Q7V4u.webp 750w, /_astro/03.BDhUZuwZ_Z1xOF46.webp 828w, /_astro/03.BDhUZuwZ_2681oU.webp 1080w, /_astro/03.BDhUZuwZ_Z1Uc2VV.webp 1280w, /_astro/03.BDhUZuwZ_TaQsi.webp 1668w, /_astro/03.BDhUZuwZ_2cH5H6.webp 1998w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4000字入力するとエラーになる&lt;a href=&quot;#4000字入力するとエラーになる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;singlelineに4000文字入力して送信しようとするとエラーになりました。エラーメッセージがこんなことになっていたので、全角だともっと少なくなりますね。
他のテキストスタイルでも同じことになりそうです。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1806&quot; height=&quot;1498&quot; src=&quot;/_astro/04.BsO9pg8A_ZFXGrP.webp&quot; srcset=&quot;/_astro/04.BsO9pg8A_Z1JRiyn.webp 640w, /_astro/04.BsO9pg8A_QHWj1.webp 750w, /_astro/04.BsO9pg8A_ZUAHv6.webp 828w, /_astro/04.BsO9pg8A_QoUXo.webp 1080w, /_astro/04.BsO9pg8A_1pHixH.webp 1280w, /_astro/04.BsO9pg8A_qsLpw.webp 1668w, /_astro/04.BsO9pg8A_ZFXGrP.webp 1806w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;エラー文&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;In data.embeds.0.fields.0.value: Must be 1024 or fewer in length.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Modalクラスのソースコード&lt;a href=&quot;#modalクラスのソースコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それから、テキスト以外に入力できないのかどうかを調べてみると、&lt;code&gt;Modal&lt;/code&gt;クラスのソースコードがありました。
&lt;a href=&quot;https://docs.pycord.dev/en/stable/_modules/discord/ui/modal.html&quot; target=&quot;_blank&quot;&gt;そのソースコード&lt;/a&gt;によると、&lt;code&gt;add_item&lt;/code&gt;するときは&lt;code&gt;InputText&lt;/code&gt;しか受け付けないようですね・・・。
まあ、スラッシュコマンドを打ち込む時に選択肢を表示できるタイプにして入力すれば良いかな。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ははあ、まあ大体どんな風に動くのかは分かったよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;現状ではテキストだけだけど、長い文章を打てるようになるのは有り難いよな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Pycord】ApplicationCommandで入力できるUI形式を画像イメージ付きで紹介する</title><link>https://endorphinbath.com/posts/pycord-application-command-images/</link><guid isPermaLink="true">https://endorphinbath.com/posts/pycord-application-command-images/</guid><description>PythonのDiscord拡張ライブラリ、「Pycord」のApplicationCommandで引数を入力できるUIを一覧にしました。それぞれどのように動くかを一部だけ調べたりもしています。</description><pubDate>Wed, 15 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふうう・・・、リファレンスを見ながら動作を確認するのってしんどいよね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;確かに、UI絡みのものだったらすぐに一覧を見れたら助かるよな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Pycordで入力できるUIをリストにしてほしいです！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うっす。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;PycordのApplicationCommand&lt;a href=&quot;#pycordのapplicationcommand&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;はい、ゲームを嗜む者であれば殆どの人が御用達である「Discord」。
そこでは、引数を取ってボットとやり取りできる機能があります。
それが「スラッシュコマンド」というものになります。&lt;/p&gt;&lt;p&gt;そして、PythonでDiscordのボットを動かすためのライブラリ「Pycord」にて、
そのスラッシュコマンドの引数を入力するための形式がいくつかあります。&lt;/p&gt;&lt;p&gt;Pycordのリファレンスのページはここですが・・・、&lt;/p&gt;&lt;a href=&quot;https://pycord.dev/api/application_commands.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://pycord.dev/_static/pycord.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Pycord&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Application Commands&lt;/div&gt;&lt;div&gt;Command Permission Decorators: Commands: Shortcut Decorators: Objects: Attributes full_parent_name, qualified_id, qualified_name. Methods@ after_invoke,@ before_invoke,@ error, def get_cooldown_ret...&lt;/div&gt;&lt;div&gt;pycord.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://pycord.dev/static/img/logo.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;実際にどう動くのかは、文章だけじゃなかなか想像しにくいですよね。
それに、それを一つ一つどう動くのかを確認するのも骨が折れます。&lt;/p&gt;&lt;p&gt;そこで！ 私めは、骨を折って、そのApplicationCommandで引数を入力できるUIを一覧にしてまとめました！
まあ、実のところ、分からない箇所もあったのですが、一助になれば良いかなと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;引数入力のUI一覧&lt;a href=&quot;#引数入力のui一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程貼ったリファレンス内にあるdiscord.Option.input_typeは、以下の値を取ります。&lt;/p&gt;&lt;p&gt;取り得るデータ型&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Type[abc.GuildChannel]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[Thread]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[Member]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[User]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[Attachment]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[Role]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[abc.Mentionable]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SlashCommandOptionType&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[ext.commands.Converter]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type[enums.Enum]&lt;/code&gt;, &lt;code&gt;Type[Enum]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これから、こんな感じの関数を実行して確認していきます。
「タグ」という語句には何の意味もありません。僕のためのツールを作っている時に調べたコードなのでこうなっています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;intents &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; discord.Intents.&lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;intents.message_content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;bot &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; discord.&lt;/span&gt;&lt;span&gt;Bot&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;intents&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;intents)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;webclippings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bot.&lt;/span&gt;&lt;span&gt;create_group&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;webclippings&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Manage web-clippings&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;guild_only&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@webclippings&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;search&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;入力したタグからシートに在る記事を探します&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;guild_ids&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.ApplicationContext&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↓ この行のstrだけを変えて調べていきます。 ↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# ↑ これだけ ↑&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;condition&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;検索条件&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;choices&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;and&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;or&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_3&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ3&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_4&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ4&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_5&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ5&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag_6&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;タグ6&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;config_obj[&lt;/span&gt;&lt;span&gt;&quot;statement_for_search_by_tag_1&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ctx.&lt;/span&gt;&lt;span&gt;defer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(tag_required)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(tag_required))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bot.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(config.&lt;/span&gt;&lt;span&gt;BOT_TOKEN&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;Type[abc.GuildChannel]&lt;a href=&quot;#typeabcguildchannel&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、引数にチャンネルを指定できる入力型です。
自分が参加している既存のチャンネル名から選択できます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1974&quot; height=&quot;1024&quot; src=&quot;/_astro/11.DOQnKp7K_Zo2jmB.webp&quot; srcset=&quot;/_astro/11.DOQnKp7K_1im7ig.webp 640w, /_astro/11.DOQnKp7K_2cMFgN.webp 750w, /_astro/11.DOQnKp7K_ZeEHsa.webp 828w, /_astro/11.DOQnKp7K_1xr4Pk.webp 1080w, /_astro/11.DOQnKp7K_ZQTl9m.webp 1280w, /_astro/11.DOQnKp7K_26s9GJ.webp 1668w, /_astro/11.DOQnKp7K_Zo2jmB.webp 1974w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;print&lt;/code&gt; された結果はこんな感じでした。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;webclip2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.channel.TextChannel&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[Thread]&lt;a href=&quot;#typethread&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、スレッドを選択できるデータ型です。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1990&quot; height=&quot;306&quot; src=&quot;/_astro/12.BVtW3mhz_rq1X2.webp&quot; srcset=&quot;/_astro/12.BVtW3mhz_Z15vNIY.webp 640w, /_astro/12.BVtW3mhz_Z1WFOx1.webp 750w, /_astro/12.BVtW3mhz_nIo35.webp 828w, /_astro/12.BVtW3mhz_Z24krIo.webp 1080w, /_astro/12.BVtW3mhz_Z4mdl1.webp 1280w, /_astro/12.BVtW3mhz_Z1U92ah.webp 1668w, /_astro/12.BVtW3mhz_rq1X2.webp 1990w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;特にスレッドを配置していないので、今回は選択できません。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;278&quot; src=&quot;/_astro/13.Bo0IdGJw_15F1I5.webp&quot; srcset=&quot;/_astro/13.Bo0IdGJw_26tKk4.webp 640w, /_astro/13.Bo0IdGJw_2nmJHg.webp 750w, /_astro/13.Bo0IdGJw_dBk4x.webp 828w, /_astro/13.Bo0IdGJw_Z27sad5.webp 1080w, /_astro/13.Bo0IdGJw_Z5SW6O.webp 1280w, /_astro/13.Bo0IdGJw_AJuTO.webp 1668w, /_astro/13.Bo0IdGJw_15F1I5.webp 2000w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[Member]&lt;a href=&quot;#typemember&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、トークに参加しているメンバーの中から、引数に選択できます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;2060&quot; height=&quot;546&quot; src=&quot;/_astro/14.RvHdoy27_Z2po3g9.webp&quot; srcset=&quot;/_astro/14.RvHdoy27_1FpyHM.webp 640w, /_astro/14.RvHdoy27_Z2oKQuN.webp 750w, /_astro/14.RvHdoy27_14eswd.webp 828w, /_astro/14.RvHdoy27_17IALi.webp 1080w, /_astro/14.RvHdoy27_ZbKonU.webp 1280w, /_astro/14.RvHdoy27_kFLqx.webp 1668w, /_astro/14.RvHdoy27_4iqg0.webp 2048w, /_astro/14.RvHdoy27_Z2po3g9.webp 2060w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;kinkinbeer135ml#5065&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.member.Member&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[User]&lt;a href=&quot;#typeuser&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これに関しても、挙動は &lt;code&gt;Type[Member]&lt;/code&gt; と同じに見えます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1986&quot; height=&quot;526&quot; src=&quot;/_astro/15.CWQ68ypm_1Bpt5z.webp&quot; srcset=&quot;/_astro/15.CWQ68ypm_Z1nAhag.webp 640w, /_astro/15.CWQ68ypm_ZnzyyU.webp 750w, /_astro/15.CWQ68ypm_Z1YLnlP.webp 828w, /_astro/15.CWQ68ypm_Z2n79Wp.webp 1080w, /_astro/15.CWQ68ypm_1nzXGj.webp 1280w, /_astro/15.CWQ68ypm_1U29vL.webp 1668w, /_astro/15.CWQ68ypm_1Bpt5z.webp 1986w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。&lt;code&gt;Type[Member]&lt;/code&gt; と同じデータ型ですね。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Webclip あゆ#3192&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.member.Member&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[Attachment]&lt;a href=&quot;#typeattachment&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、ファイルを添付できるデータ型です。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;2002&quot; height=&quot;732&quot; src=&quot;/_astro/16.Dao-eRe-_TECQ7.webp&quot; srcset=&quot;/_astro/16.Dao-eRe-_Z1BwAbo.webp 640w, /_astro/16.Dao-eRe-_ZwCA3w.webp 750w, /_astro/16.Dao-eRe-_Xe7EQ.webp 828w, /_astro/16.Dao-eRe-_xdkQm.webp 1080w, /_astro/16.Dao-eRe-_ZPnbzD.webp 1280w, /_astro/16.Dao-eRe-_Z19czHe.webp 1668w, /_astro/16.Dao-eRe-_TECQ7.webp 2002w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。CDNに上がった画像のURLが取得できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://cdn.discordapp.com/ephemeral-attachments/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXX/discord_Member.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.message.Attachment&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[Role]&lt;a href=&quot;#typerole&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ロールを引数に持ってこれます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;2032&quot; height=&quot;532&quot; src=&quot;/_astro/17.t5SlDzpi_1wN4vv.webp&quot; srcset=&quot;/_astro/17.t5SlDzpi_ZtHU3D.webp 640w, /_astro/17.t5SlDzpi_ZMMVEI.webp 750w, /_astro/17.t5SlDzpi_26aRLb.webp 828w, /_astro/17.t5SlDzpi_3Fwxu.webp 1080w, /_astro/17.t5SlDzpi_1hlDh2.webp 1280w, /_astro/17.t5SlDzpi_1PfHPN.webp 1668w, /_astro/17.t5SlDzpi_1wN4vv.webp 2032w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@everyone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.role.Role&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[abc.Mentionable]&lt;a href=&quot;#typeabcmentionable&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;メンバーとチャンネルを含めて、メンションできるものを引数に設定できます。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1942&quot; height=&quot;694&quot; src=&quot;/_astro/18.eyZTHyN1_eldxn.webp&quot; srcset=&quot;/_astro/18.eyZTHyN1_Z29hBAF.webp 640w, /_astro/18.eyZTHyN1_Zum6RG.webp 750w, /_astro/18.eyZTHyN1_ZVb6HD.webp 828w, /_astro/18.eyZTHyN1_ZPiLzk.webp 1080w, /_astro/18.eyZTHyN1_Z2dLe2K.webp 1280w, /_astro/18.eyZTHyN1_JcXPL.webp 1668w, /_astro/18.eyZTHyN1_eldxn.webp 1942w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bot-searching-webclip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;class &apos;discord.role.Role&apos;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SlashCommandOptionType&lt;a href=&quot;#slashcommandoptiontype&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは特に調べませんでした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[ext.commands.Converter]&lt;a href=&quot;#typeextcommandsconverter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;特に選択肢などは出てこず。
適当に文字列を打ち込んでメッセージを送信すると、エラーになりました。
&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;image&quot; loading=&quot;lazy&quot; width=&quot;1984&quot; height=&quot;306&quot; src=&quot;/_astro/21.Dzh_l7EQ_dp9mx.webp&quot; srcset=&quot;/_astro/21.Dzh_l7EQ_26cEi5.webp 640w, /_astro/21.Dzh_l7EQ_1e2Du3.webp 750w, /_astro/21.Dzh_l7EQ_Z1uJgIM.webp 828w, /_astro/21.Dzh_l7EQ_gtxKS.webp 1080w, /_astro/21.Dzh_l7EQ_ZgzeKU.webp 1280w, /_astro/21.Dzh_l7EQ_pEXk0.webp 1668w, /_astro/21.Dzh_l7EQ_dp9mx.webp 1984w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;printされた結果はこんな感じ。よく分からなかったので飛ばします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Application Command raised an exception: TypeError: Protocols cannot be instantiated&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Type[enums.Enum], Type[Enum]&lt;a href=&quot;#typeenumsenum-typeenum&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらは列挙型ですね。
今回、列挙型を特に宣言せずにスクリプトを動かしたので、案の定エラーになりました。
printされた結果はこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IndexError: list index out of range&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ははあ、まあ大体どんな風に動くのかは分かったよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;色々な形で引数を持ってこれるから、色々な処理が展開できそうですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion】プロジェクトやマイルストーンの進捗度を表現する</title><link>https://endorphinbath.com/posts/notion-describe-progress-degree/</link><guid isPermaLink="true">https://endorphinbath.com/posts/notion-describe-progress-degree/</guid><description>Notionで自分のタスクをプロジェクトとしてまとめて、その進捗度を可視化する手段を紹介します。</description><pubDate>Tue, 14 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、プロジェクトの進捗度をNotionのデータベース上で表現してみよう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うおっ、なんだいきなり。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それでは、行きます。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;やりたいこと&lt;a href=&quot;#やりたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回やりたいことは、僕は元々GitHub上で日頃のタスクを管理しようと、GitHubにIssueとProjectを使おうと思っていました。
しかしながら、時が経って、Notionの方が自分を取り巻くタスクを適切に管理できると思い、GitHubでのタスク管理手法をNotionで実現できないかを試行錯誤中です。
そこで今回は、日頃のタスクをプロジェクト単位でまとめて、その進捗度を確認します。
現在、GitHubのIssue上では、Issueのマイルストーン機能を使って、こんな風にプロジェクトチックにタスクを管理しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2984&quot; height=&quot;1002&quot; src=&quot;/_astro/01.DOVcnd7a_KrDuI.webp&quot; srcset=&quot;/_astro/01.DOVcnd7a_19Mk6W.webp 640w, /_astro/01.DOVcnd7a_Zq9vid.webp 750w, /_astro/01.DOVcnd7a_rKTlq.webp 828w, /_astro/01.DOVcnd7a_ZvdmHg.webp 1080w, /_astro/01.DOVcnd7a_qLE3o.webp 1280w, /_astro/01.DOVcnd7a_ZnCRPb.webp 1668w, /_astro/01.DOVcnd7a_Z1gaMMN.webp 2048w, /_astro/01.DOVcnd7a_Z2m0gyD.webp 2560w, /_astro/01.DOVcnd7a_KrDuI.webp 2984w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Notionでもこれと同じように、こんな風に表現したいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1356&quot; src=&quot;/_astro/02.BwD-oPEX_1zvw7l.webp&quot; srcset=&quot;/_astro/02.BwD-oPEX_Z1UjuCz.webp 640w, /_astro/02.BwD-oPEX_Z1JwqLo.webp 750w, /_astro/02.BwD-oPEX_ZUrnro.webp 828w, /_astro/02.BwD-oPEX_Z23lyzY.webp 1080w, /_astro/02.BwD-oPEX_2jfBco.webp 1280w, /_astro/02.BwD-oPEX_ZJ4qBs.webp 1668w, /_astro/02.BwD-oPEX_Z2lUSdO.webp 2048w, /_astro/02.BwD-oPEX_1zvw7l.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実現する方法&lt;a href=&quot;#実現する方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、その管理するために行ったことを紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. データベースを作って、タスク用に関数が入った列を作る&lt;a href=&quot;#1-データベースを作ってタスク用に関数が入った列を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、データベースを2つ作成します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;タスク用（1つのプロジェクトだけに紐づく）&lt;/li&gt;
&lt;li&gt;プロジェクト用（複数のタスクが紐づく）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;タスクとプロジェクトのリレーション関係はこんなイメージです。
&lt;img loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; src=&quot;/_astro/03.CZA97Thz_9Dy6M.webp&quot; srcset=&quot;/_astro/03.CZA97Thz_Z1j8LlA.webp 640w, /_astro/03.CZA97Thz_Z1bsixb.webp 750w, /_astro/03.CZA97Thz_9Dy6M.webp 800w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まずは、タスク用のデータベースを細工します。
タスク用に作ったデータベースがこんな感じにあります。
&lt;img loading=&quot;lazy&quot; width=&quot;2508&quot; height=&quot;1206&quot; src=&quot;/_astro/04.ItNEXRIU_1jvfnW.webp&quot; srcset=&quot;/_astro/04.ItNEXRIU_1mHW4.webp 640w, /_astro/04.ItNEXRIU_Z1CptLJ.webp 750w, /_astro/04.ItNEXRIU_ZLBmKh.webp 828w, /_astro/04.ItNEXRIU_22oojW.webp 1080w, /_astro/04.ItNEXRIU_2ovSGY.webp 1280w, /_astro/04.ItNEXRIU_1uBLGj.webp 1668w, /_astro/04.ItNEXRIU_29Gc3n.webp 2048w, /_astro/04.ItNEXRIU_1jvfnW.webp 2508w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;Done&lt;/code&gt;（＝完了）ステータスになっているタスクを数えるために関数を、&lt;code&gt;IsDone&lt;/code&gt;の列に設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;2480&quot; height=&quot;1376&quot; src=&quot;/_astro/05.CaCL9az5_ZuY6i2.webp&quot; srcset=&quot;/_astro/05.CaCL9az5_2fkxnn.webp 640w, /_astro/05.CaCL9az5_2pYwfY.webp 750w, /_astro/05.CaCL9az5_GTsGe.webp 828w, /_astro/05.CaCL9az5_1MyJPG.webp 1080w, /_astro/05.CaCL9az5_1eJQCg.webp 1280w, /_astro/05.CaCL9az5_u92fC.webp 1668w, /_astro/05.CaCL9az5_Z24cOcK.webp 2048w, /_astro/05.CaCL9az5_ZuY6i2.webp 2480w&quot; /&gt;&lt;/p&gt;&lt;p&gt;設定する関数はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;2530&quot; height=&quot;1408&quot; src=&quot;/_astro/06.DDsFXcNC_imTvS.webp&quot; srcset=&quot;/_astro/06.DDsFXcNC_1EtVWE.webp 640w, /_astro/06.DDsFXcNC_1P8UPg.webp 750w, /_astro/06.DDsFXcNC_5AXwc.webp 828w, /_astro/06.DDsFXcNC_ZVaHFW.webp 1080w, /_astro/06.DDsFXcNC_MaAhh.webp 1280w, /_astro/06.DDsFXcNC_Z2wzyCI.webp 1668w, /_astro/06.DDsFXcNC_ZJU6iO.webp 2048w, /_astro/06.DDsFXcNC_imTvS.webp 2530w&quot; /&gt;&lt;/p&gt;&lt;p&gt;関数を設定するとこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2518&quot; height=&quot;1378&quot; src=&quot;/_astro/07.BAB6HDEA_Eejou.webp&quot; srcset=&quot;/_astro/07.BAB6HDEA_xp9UL.webp 640w, /_astro/07.BAB6HDEA_Z1NWS6N.webp 750w, /_astro/07.BAB6HDEA_1x9c8n.webp 828w, /_astro/07.BAB6HDEA_2ta8On.webp 1080w, /_astro/07.BAB6HDEA_9tgm2.webp 1280w, /_astro/07.BAB6HDEA_Zw11IO.webp 1668w, /_astro/07.BAB6HDEA_Zr71n3.webp 2048w, /_astro/07.BAB6HDEA_Eejou.webp 2518w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. タスクをプロジェクトに紐付ける&lt;a href=&quot;#2-タスクをプロジェクトに紐付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、タスクをプロジェクトに紐付けます。
下の画像で言うところの「My_Projects」の列にリレーションを設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;2514&quot; height=&quot;1414&quot; src=&quot;/_astro/08.DZRDXnPS_pIrKM.webp&quot; srcset=&quot;/_astro/08.DZRDXnPS_ZM6Kx8.webp 640w, /_astro/08.DZRDXnPS_1UzffE.webp 750w, /_astro/08.DZRDXnPS_Z2kEUcQ.webp 828w, /_astro/08.DZRDXnPS_2ugqX7.webp 1080w, /_astro/08.DZRDXnPS_ThAmk.webp 1280w, /_astro/08.DZRDXnPS_Z2tz5Os.webp 1668w, /_astro/08.DZRDXnPS_ZL19Ll.webp 2048w, /_astro/08.DZRDXnPS_pIrKM.webp 2514w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、&lt;code&gt;Show on&lt;/code&gt; 「リレーション先DB（この場合、My_Projects）」を&lt;code&gt;on&lt;/code&gt;にするのを忘れないように。
&lt;img loading=&quot;lazy&quot; width=&quot;2510&quot; height=&quot;1402&quot; src=&quot;/_astro/09.BP24sauF_2lWOyM.webp&quot; srcset=&quot;/_astro/09.BP24sauF_2seGaJ.webp 640w, /_astro/09.BP24sauF_5Iy9A.webp 750w, /_astro/09.BP24sauF_SlHJh.webp 828w, /_astro/09.BP24sauF_U7l8u.webp 1080w, /_astro/09.BP24sauF_4jjym.webp 1280w, /_astro/09.BP24sauF_15ztqD.webp 1668w, /_astro/09.BP24sauF_12gqeP.webp 2048w, /_astro/09.BP24sauF_2lWOyM.webp 2510w&quot; /&gt;&lt;/p&gt;&lt;p&gt;リレーションを設定したら、割り当てたいプロジェクトを選びます。
&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1304&quot; src=&quot;/_astro/10.BkoAG9ng_NV1XS.webp&quot; srcset=&quot;/_astro/10.BkoAG9ng_ZPUeMg.webp 640w, /_astro/10.BkoAG9ng_3vjbh.webp 750w, /_astro/10.BkoAG9ng_Z2muaNn.webp 828w, /_astro/10.BkoAG9ng_1FnxGR.webp 1080w, /_astro/10.BkoAG9ng_Z1p2a2G.webp 1280w, /_astro/10.BkoAG9ng_ZVHssa.webp 1668w, /_astro/10.BkoAG9ng_W4OjQ.webp 2048w, /_astro/10.BkoAG9ng_NV1XS.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、プロジェクト用のデータベース「My_Projects」にも、割り当たったタスクが複数個表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1418&quot; src=&quot;/_astro/11.CYukpc1j_Z1tmDWi.webp&quot; srcset=&quot;/_astro/11.CYukpc1j_Z1tejpv.webp 640w, /_astro/11.CYukpc1j_Z1k2ehd.webp 750w, /_astro/11.CYukpc1j_224PWX.webp 828w, /_astro/11.CYukpc1j_Z1NYOb4.webp 1080w, /_astro/11.CYukpc1j_2poi3J.webp 1280w, /_astro/11.CYukpc1j_Qv7nE.webp 1668w, /_astro/11.CYukpc1j_Z1KWglv.webp 2048w, /_astro/11.CYukpc1j_Z1tmDWi.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. プロジェクト用データベースで完了しているタスクを数える&lt;a href=&quot;#3-プロジェクト用データベースで完了しているタスクを数える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、プロジェクト用データベースで、プロジェクトを集計します。
まずは、Rollupの列を新規で、以下の画像のように設定します。
すると、タスクが&lt;code&gt;IsDone=1&lt;/code&gt;（完了だったら1）になっているタスクの個数を取得できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2530&quot; height=&quot;1474&quot; src=&quot;/_astro/12.B5fwvuTZ_2wxuMs.webp&quot; srcset=&quot;/_astro/12.B5fwvuTZ_Z1H3ql8.webp 640w, /_astro/12.B5fwvuTZ_10uut5.webp 750w, /_astro/12.B5fwvuTZ_1MYz5c.webp 828w, /_astro/12.B5fwvuTZ_Z1vDuX1.webp 1080w, /_astro/12.B5fwvuTZ_1PlIGy.webp 1280w, /_astro/12.B5fwvuTZ_1Q0Wr2.webp 1668w, /_astro/12.B5fwvuTZ_M5X7q.webp 2048w, /_astro/12.B5fwvuTZ_2wxuMs.webp 2530w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. プロジェクト用データベースで完了の有無に関わらずにタスクを数える&lt;a href=&quot;#4-プロジェクト用データベースで完了の有無に関わらずにタスクを数える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、今度もRollupを使いますが、条件が違います。
次は、タスクの名前ごとにカウントしてタスクの個数を取得します。
これで、任意の1つのプロジェクトに割り当たったタスクの個数をすべて取得できました。
&lt;img loading=&quot;lazy&quot; width=&quot;2522&quot; height=&quot;1404&quot; src=&quot;/_astro/13.BM3-iI3q_Z1gqUR4.webp&quot; srcset=&quot;/_astro/13.BM3-iI3q_1VcOPh.webp 640w, /_astro/13.BM3-iI3q_ZqiiaR.webp 750w, /_astro/13.BM3-iI3q_mjQoO.webp 828w, /_astro/13.BM3-iI3q_2sUvJq.webp 1080w, /_astro/13.BM3-iI3q_1C7uai.webp 1280w, /_astro/13.BM3-iI3q_Z1GCEJH.webp 1668w, /_astro/13.BM3-iI3q_Z2q10Gn.webp 2048w, /_astro/13.BM3-iI3q_Z1gqUR4.webp 2522w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 完成！　進捗度を割り出す&lt;a href=&quot;#5-完成進捗度を割り出す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最後に、3. と4. で取得したタスクの個数でタスクの消化具合を割り出します。
（3. の値）/（4. の値）で算出できますね。
&lt;img loading=&quot;lazy&quot; width=&quot;2514&quot; height=&quot;1308&quot; src=&quot;/_astro/14.DxkTFdOT_dt5Lc.webp&quot; srcset=&quot;/_astro/14.DxkTFdOT_w5XTe.webp 640w, /_astro/14.DxkTFdOT_Z17WnLI.webp 750w, /_astro/14.DxkTFdOT_Z10UPQc.webp 828w, /_astro/14.DxkTFdOT_n5caC.webp 1080w, /_astro/14.DxkTFdOT_Z22gdO4.webp 1280w, /_astro/14.DxkTFdOT_Z1D33vk.webp 1668w, /_astro/14.DxkTFdOT_21BdvB.webp 2048w, /_astro/14.DxkTFdOT_dt5Lc.webp 2514w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Progress」列の設定で、「Show as」を変えれば進捗度が可視化出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;2522&quot; height=&quot;1388&quot; src=&quot;/_astro/15.B9WqT2K0_1GmEmO.webp&quot; srcset=&quot;/_astro/15.B9WqT2K0_1FlPHX.webp 640w, /_astro/15.B9WqT2K0_1Q0OAz.webp 750w, /_astro/15.B9WqT2K0_7UL1O.webp 828w, /_astro/15.B9WqT2K0_ZE3WWq.webp 1080w, /_astro/15.B9WqT2K0_ZsH29c.webp 1280w, /_astro/15.B9WqT2K0_1lPt1w.webp 1668w, /_astro/15.B9WqT2K0_Z18oQa4.webp 2048w, /_astro/15.B9WqT2K0_1GmEmO.webp 2522w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;後処理&lt;a href=&quot;#後処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、今回の仕組みを作る上で作った列を非表示にします。
&lt;code&gt;Hide in View&lt;/code&gt;をして、ビュー上から見えないようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;2508&quot; height=&quot;1344&quot; src=&quot;/_astro/16.CSlpjYX__2kf6wz.webp&quot; srcset=&quot;/_astro/16.CSlpjYX__Z1FS8kT.webp 640w, /_astro/16.CSlpjYX__Z1v64tI.webp 750w, /_astro/16.CSlpjYX__ZG119I.webp 828w, /_astro/16.CSlpjYX__bPByU.webp 1080w, /_astro/16.CSlpjYX__23oY5I.webp 1280w, /_astro/16.CSlpjYX__ZYU3I8.webp 1668w, /_astro/16.CSlpjYX__Z2CaM8.webp 2048w, /_astro/16.CSlpjYX__2kf6wz.webp 2508w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、進捗度だけが確認できるようになりました。おつかれさまでした。
&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1356&quot; src=&quot;/_astro/02.BwD-oPEX_1zvw7l.webp&quot; srcset=&quot;/_astro/02.BwD-oPEX_Z1UjuCz.webp 640w, /_astro/02.BwD-oPEX_Z1JwqLo.webp 750w, /_astro/02.BwD-oPEX_ZUrnro.webp 828w, /_astro/02.BwD-oPEX_Z23lyzY.webp 1080w, /_astro/02.BwD-oPEX_2jfBco.webp 1280w, /_astro/02.BwD-oPEX_ZJ4qBs.webp 1668w, /_astro/02.BwD-oPEX_Z2lUSdO.webp 2048w, /_astro/02.BwD-oPEX_1zvw7l.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;関数をこねれば、もう少し列を少なく出来るかと思ったのですが、関数上ではアイテムをCountすることが出来ないみたいなので、現時点では最少の列の数量だと思っています。
カスタム関数とか組めるのかな？　そこは不明なので、今はこれでよしとします。
roundを使えば、小数点で行が太くなる問題とかを解決できそうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお〜、見やすいねえ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、少しGitHub Issueからの移行が進みました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Notionはかなり色々と出来そうだねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Notion】マルチセレクトの項目を任意のデータベースから参照したいときはリレーションにする</title><link>https://endorphinbath.com/posts/notion-multiselect-to-database-relation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/notion-multiselect-to-database-relation/</guid><description>Notionのデータベースの属性を設定する際に、データベースにある項目から選択できるようにしたいと思いました。その際には、掲題の通りマルチセレクトの入力タイプを選んでしまうと実現しません。</description><pubDate>Mon, 13 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くそっ！ どうやって設定するのだ！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おうおう、どうしたいのだ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Notionのデータベースで設定したレコードの名前を、別のデータベースの属性値にしたいのだよ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はその方法を紹介しましょう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;やりたいこと&lt;a href=&quot;#やりたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Notionでは、タグをTagsの属性から編集および別のデータベースに設定することが出来ませんが、Tags自体の編集が少し面倒くさいです。そのため、データベースでタグを管理するようにして作業負荷を減らします。
そこで、データベースにあるレコードの名前を別のデータベースの属性値として入力したいとします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その方法&lt;a href=&quot;#その方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、データベースのとある列の入力タイプをマルチセレクト型にしたいと思います。
しかし、こうすると、どのデータベースから参照するとかは設定できません。Tagsのような運用となってしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2532&quot; height=&quot;904&quot; src=&quot;/_astro/01.D-aQmji6_Z2paqJx.webp&quot; srcset=&quot;/_astro/01.D-aQmji6_2gvoli.webp 640w, /_astro/01.D-aQmji6_Z1ILJkL.webp 750w, /_astro/01.D-aQmji6_Z2aAJaI.webp 828w, /_astro/01.D-aQmji6_1vfOGB.webp 1080w, /_astro/01.D-aQmji6_7Mneb.webp 1280w, /_astro/01.D-aQmji6_Z1YpxGe.webp 1668w, /_astro/01.D-aQmji6_ZxDbWU.webp 2048w, /_astro/01.D-aQmji6_Z2paqJx.webp 2532w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこで、Typeに設定するのはMulti-select型ではありません。
&lt;img loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;1196&quot; src=&quot;/_astro/02.wvrTOBiT_Z1JunOP.webp&quot; srcset=&quot;/_astro/02.wvrTOBiT_YqvQN.webp 640w, /_astro/02.wvrTOBiT_ZCSM7G.webp 750w, /_astro/02.wvrTOBiT_bzv82.webp 828w, /_astro/02.wvrTOBiT_Z9C4dU.webp 1080w, /_astro/02.wvrTOBiT_gAWpT.webp 1280w, /_astro/02.wvrTOBiT_ZM4enT.webp 1668w, /_astro/02.wvrTOBiT_XgECj.webp 2048w, /_astro/02.wvrTOBiT_Z1JunOP.webp 2536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;マルチセレクト型からデータベースのリレーションを取りたい時は、このリレーション型を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2504&quot; height=&quot;1526&quot; src=&quot;/_astro/03.BzrGFOOX_2blxAy.webp&quot; srcset=&quot;/_astro/03.BzrGFOOX_198Ysm.webp 640w, /_astro/03.BzrGFOOX_1joIpf.webp 750w, /_astro/03.BzrGFOOX_1oz7EJ.webp 828w, /_astro/03.BzrGFOOX_1YBu8k.webp 1080w, /_astro/03.BzrGFOOX_ZAXhAg.webp 1280w, /_astro/03.BzrGFOOX_Z17saEK.webp 1668w, /_astro/03.BzrGFOOX_Z26pIPl.webp 2048w, /_astro/03.BzrGFOOX_2blxAy.webp 2504w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、任意のデータベースを選択します
&lt;img loading=&quot;lazy&quot; width=&quot;2532&quot; height=&quot;1150&quot; src=&quot;/_astro/04.BT019eAq_1rpCL8.webp&quot; srcset=&quot;/_astro/04.BT019eAq_8iqoD.webp 640w, /_astro/04.BT019eAq_l4HTq.webp 750w, /_astro/04.BT019eAq_1c0TTs.webp 828w, /_astro/04.BT019eAq_1xIMUo.webp 1080w, /_astro/04.BT019eAq_Z2dPqEu.webp 1280w, /_astro/04.BT019eAq_1850JR.webp 1668w, /_astro/04.BT019eAq_zGGjR.webp 2048w, /_astro/04.BT019eAq_1rpCL8.webp 2532w&quot; /&gt;&lt;/p&gt;&lt;p&gt;最後にリレーションを追加するのを忘れないようにしましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;2518&quot; height=&quot;1270&quot; src=&quot;/_astro/05.C7RCY4uk_53127.webp&quot; srcset=&quot;/_astro/05.C7RCY4uk_Z2t1On1.webp 640w, /_astro/05.C7RCY4uk_Z1ysbpT.webp 750w, /_astro/05.C7RCY4uk_15Ison.webp 828w, /_astro/05.C7RCY4uk_ZcMP0a.webp 1080w, /_astro/05.C7RCY4uk_16AOi.webp 1280w, /_astro/05.C7RCY4uk_Z1Sorjb.webp 1668w, /_astro/05.C7RCY4uk_8AT1p.webp 2048w, /_astro/05.C7RCY4uk_53127.webp 2518w&quot; /&gt;&lt;/p&gt;&lt;p&gt;はい追加できました。
そして、リレーションが追加できていると、そのrelationのアイテムの中からマルチセレクト型の項目を選択することができます。
&lt;img loading=&quot;lazy&quot; width=&quot;2516&quot; height=&quot;1080&quot; src=&quot;/_astro/06.DxqyEm6x_113koa.webp&quot; srcset=&quot;/_astro/06.DxqyEm6x_nWQMh.webp 640w, /_astro/06.DxqyEm6x_Z1V9MDx.webp 750w, /_astro/06.DxqyEm6x_Z155vEV.webp 828w, /_astro/06.DxqyEm6x_pAnGV.webp 1080w, /_astro/06.DxqyEm6x_Z2tzXiI.webp 1280w, /_astro/06.DxqyEm6x_1cR7tz.webp 1668w, /_astro/06.DxqyEm6x_Z17VcqT.webp 2048w, /_astro/06.DxqyEm6x_113koa.webp 2516w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ：選ぶ選択肢を一択にする&lt;a href=&quot;#おまけ選ぶ選択肢を一択にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;また、選択するアイテムを1つだけに限定したい場合は、Property設定から&lt;code&gt;Limit&lt;/code&gt;を&lt;code&gt;1 page&lt;/code&gt;にすると実現できます。
例えば、タスクのステータスを&lt;code&gt;Todo&lt;/code&gt;、&lt;code&gt;In progress&lt;/code&gt;、&lt;code&gt;Done&lt;/code&gt;から一意に設定したい場合などに活用できそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;2484&quot; height=&quot;1278&quot; src=&quot;/_astro/07.BiEVvyiB_Zc1ruY.webp&quot; srcset=&quot;/_astro/07.BiEVvyiB_EhgUT.webp 640w, /_astro/07.BiEVvyiB_ZYL5K3.webp 750w, /_astro/07.BiEVvyiB_1Epy4e.webp 828w, /_astro/07.BiEVvyiB_ZtgfvG.webp 1080w, /_astro/07.BiEVvyiB_ZjskX1.webp 1280w, /_astro/07.BiEVvyiB_Z2mbrE4.webp 1668w, /_astro/07.BiEVvyiB_1mzlDE.webp 2048w, /_astro/07.BiEVvyiB_Zc1ruY.webp 2484w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;良かった・・・選択できた・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;データベースを活用して、あなたのNotionを色々と拡張していきましょう！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Apps Script】DiscordのWebhookを使って毎朝天気を通知する（Discord Bot改良：第1回）</title><link>https://endorphinbath.com/posts/gas-discord-webhook-weather/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-discord-webhook-weather/</guid><description>DiscordのWebhookをGoogle Apps Scriptで叩いて、天気を通知するツールを作りました。</description><pubDate>Sun, 12 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜！ 濡れた濡れた・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、お帰りさん、ズブ濡れだねえ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今日、夕方から雨が降るなんて聞いてないよお・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はその日に雨が降るかどうかをDiscordで通知してくれるツールを作ってみよう&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おおっ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、DiscordのWebhookを使って、OpenWeatherMapというサイトから気象情報を取得します。&lt;/p&gt;&lt;a href=&quot;https://docs.discord.com/developers/resources/webhook&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.discord.com/mintlify-assets/_mintlify/favicons/discord/7K4RgSZ9MXrlU2Yd/_generated/favicon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Documentation - Discord&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Webhook Resource - Documentation - Discord&lt;/div&gt;&lt;div&gt;Reference for Discord webhook objects and management endpoints.&lt;/div&gt;&lt;div&gt;docs.discord.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://discord.mintlify.app/mintlify-assets/_next/image?url=%2F_mintlify%2Fapi%2Fog%3Fdivision%3DHTTP%2BAPI%2BResources%26appearance%3Ddark%26title%3DWebhook%2BResource%26description%3DReference%2Bfor%2BDiscord%2Bwebhook%2Bobjects%2Band%2Bmanagement%2Bendpoints.%26logoLight%3Dhttps%253A%252F%252Fmintcdn.com%252Fdiscord%252FCoUXJJtPEdmG4KWD%252Flogo%252Fdocs-light.svg%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DCoUXJJtPEdmG4KWD%2526q%253D85%2526s%253D285b335b09d978db85c5965b2836deeb%26logoDark%3Dhttps%253A%252F%252Fmintcdn.com%252Fdiscord%252FCoUXJJtPEdmG4KWD%252Flogo%252Fdocs-dark.svg%253Ffit%253Dmax%2526auto%253Dformat%2526n%253DCoUXJJtPEdmG4KWD%2526q%253D85%2526s%253D4f680c860d33609aadb33111a6567646%26primaryColor%3D%25235865f2%26lightColor%3D%2523798df9%26darkColor%3D%25235865f2%26backgroundLight%3D%2523ffffff%26backgroundDark%3D%2523202024&amp;amp;w=1200&amp;amp;q=100&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://openweathermap.org/payload/api/media/file/clouds_bg.jpg&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://openweathermap.org/icon.svg?icon.12sbjawem7k1w.svg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;openweathermap.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;OpenWeather APIs for Weather, Energy, and Environment&lt;/div&gt;&lt;div&gt;OpenWeather provides global APIs for weather, environmental, and energy data, including current conditions, forecasts, historical weather, air pollution, solar radiation, road risk, and solar energy insights. Built for developers and businesses, our platform offers reliable data access, broad product coverage, and flexible self-service tools to support apps, analytics, operations, and decision-making.&lt;/div&gt;&lt;div&gt;openweathermap.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://openweathermap.org//payload/api/media/file/clouds_bg.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ツールを作る言語は、Google Apps Scriptを使用します。
APIをタダで作れるため、個人利用の範囲内であれば、とてもコスパが良いです。
ツールの概要はこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1670&quot; height=&quot;887&quot; src=&quot;/_astro/01.BgLUkomW_ZOhDEO.webp&quot; srcset=&quot;/_astro/01.BgLUkomW_oBdDB.webp 640w, /_astro/01.BgLUkomW_ZyDK2g.webp 750w, /_astro/01.BgLUkomW_Z7VJWA.webp 828w, /_astro/01.BgLUkomW_Z1ntELc.webp 1080w, /_astro/01.BgLUkomW_ZlISVi.webp 1280w, /_astro/01.BgLUkomW_1GkRO6.webp 1668w, /_astro/01.BgLUkomW_ZOhDEO.webp 1670w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;機能&lt;a href=&quot;#機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Discordに通知するまでの機能の紹介です。
実際に時間トリガーでWebhookが作動するとこのように通知されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1910&quot; height=&quot;1428&quot; src=&quot;/_astro/02.BWxoFc0H_1KHIgM.webp&quot; srcset=&quot;/_astro/02.BWxoFc0H_Z17ykYt.webp 640w, /_astro/02.BWxoFc0H_1uyeMd.webp 750w, /_astro/02.BWxoFc0H_1z4e9P.webp 828w, /_astro/02.BWxoFc0H_1JuEKa.webp 1080w, /_astro/02.BWxoFc0H_1RmvcX.webp 1280w, /_astro/02.BWxoFc0H_Z27AE4Y.webp 1668w, /_astro/02.BWxoFc0H_1KHIgM.webp 1910w&quot; /&gt;&lt;/p&gt;&lt;p&gt;気温と雨の時間帯を通知するために、以下の情報を取得する必要がありますね。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;その日の天気（その日の8つの時間帯における天気を集計して最多の天気を取得する）&lt;/li&gt;
&lt;li&gt;最高気温&lt;/li&gt;
&lt;li&gt;最低気温&lt;/li&gt;
&lt;li&gt;任意の時間における天気&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;気象情報を取得する&lt;a href=&quot;#気象情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、Google Apps Scriptから、OpenWeatherMapの&lt;a href=&quot;https://openweathermap.org/api&quot; target=&quot;_blank&quot;&gt;Weather API&lt;/a&gt;にGETでリクエストを送ります。
大体3、4日分くらいを3時間おきでブツ切りされた気象情報がレスポンスで返ってきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[ { dt: 1676224800,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;main:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ temp: 282.88,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;feels_like: 281.08,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_min: 282.88,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_max: 283.2,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pressure: 1014,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sea_level: 1014,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;grnd_level: 1009,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;humidity: 68,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_kf: -0.32 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;weather: [ [Object] ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;clouds: { all: 75 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wind: { speed: 3.47, deg: 2, gust: 5.47 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;visibility: 10000,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pop: 0.42,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rain: { &apos;3h&apos;: 0.43 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys: { pod: &apos;n&apos; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dt_txt: &apos;2023-02-12 18:00:00&apos; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ dt: 1676235600,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;main:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{ temp: 282.84,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;feels_like: 281.32,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_min: 282.75,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_max: 282.84,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pressure: 1014,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sea_level: 1014,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;grnd_level: 1008,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;humidity: 66,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;temp_kf: 0.09 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;weather: [ [Object] ],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;clouds: { all: 83 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wind: { speed: 2.95, deg: 7, gust: 4.8 },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;visibility: 10000,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pop: 0.3,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys: { pod: &apos;n&apos; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dt_txt: &apos;2023-02-12 21:00:00&apos; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;まずは、その日の天気を決めます。
天気の決め方は、その日の8つの時間帯（0:00、3:00、6:00、9:00、12:00、15:00、18:00、21:00）における天気を集計して、その中で最も多かった天気をその日の天気とします。
天気の種類は、以下のリファレンスに載っています。天気のステータスコードが5xxだと雨になります。
5xxや8xxなどの状態をグループごとに集計して天気を決めました。&lt;/p&gt;&lt;a href=&quot;https://openweathermap.org/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://openweathermap.org/icon.svg?icon.12sbjawem7k1w.svg&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;openweathermap.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Weather Conditions&lt;/div&gt;&lt;div&gt;Access OpenWeather&apos;s comprehensive weather icon list for various weather conditions, including thunderstorm, drizzle, rain, snow, atmosphere, clear skies, and clouds. Get precise visual representation for weather forecasting and analysis through easy-to-use API calls.&lt;/div&gt;&lt;div&gt;openweathermap.org&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://openweathermap.org/&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;おそらく、&lt;code&gt;main&lt;/code&gt;属性のオブジェクトにある&lt;code&gt;temp_min&lt;/code&gt;と&lt;code&gt;temp_max&lt;/code&gt;で、その時間帯の気温を取ってこれます。その気温を1日ごとに集計して、その日の最高気温と最低気温を割り出しました。&lt;/p&gt;&lt;p&gt;最後に、雨の状態になっている時間帯をオブジェクトにメモっておきました。
これで、僕が欲しかった情報は手に入りました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;WebhookでDiscordに通知する&lt;a href=&quot;#webhookでdiscordに通知する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;天気の情報を整理してオブジェクト形式に出来たら、それをJSON形式でDiscordのWebhookに送ります。
以下のように送ることで、Discordでメッセージを送信できるかと思います。
&lt;code&gt;muteHttpExceptions&lt;/code&gt;はどちらでも良いような気がします。
ログの見え方が変わるらしいですが、ぶっちゃけ、trueでもfalseでもログの見え方は大して変わると思っていません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getReqHeaders&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;contentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestHeaders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestHeaders&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhookUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WEBHOOKのURL&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getReqHeaders&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;muteHttpExceptions &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;webhookUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;通知内容を凝りたい&lt;a href=&quot;#通知内容を凝りたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;通知するところまでは出来たので、通知するときのデザインを確認します。
先程貼った通知の内容にするためには、こんな感じのコードになります。単なる一部抜粋になります。
&lt;code&gt;info&lt;/code&gt;に整理したオブジェクトがあって、それをmapでどーのこーのしています。
最高気温Maxと最低気温Minを並べて表示したかったので、&lt;code&gt;&quot;embeds&quot;&lt;/code&gt;属性の&lt;code&gt;&quot;fields&quot;&lt;/code&gt;属性を使って並べました。
&lt;img loading=&quot;lazy&quot; width=&quot;1910&quot; height=&quot;1428&quot; src=&quot;/_astro/02.BWxoFc0H_1KHIgM.webp&quot; srcset=&quot;/_astro/02.BWxoFc0H_Z17ykYt.webp 640w, /_astro/02.BWxoFc0H_1uyeMd.webp 750w, /_astro/02.BWxoFc0H_1z4e9P.webp 828w, /_astro/02.BWxoFc0H_1JuEKa.webp 1080w, /_astro/02.BWxoFc0H_1RmvcX.webp 1280w, /_astro/02.BWxoFc0H_Z27AE4Y.webp 1668w, /_astro/02.BWxoFc0H_1KHIgM.webp 1910w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embedsArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;weather&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;今日は雨が降らないみたいだよ！&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;今日は雨が降るみたいだよ！&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;weather&quot;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;time&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;hour&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;minute&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;second&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; - &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyRO&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;weather&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyTF&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageFileUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getImageFileUrl&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyWF&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;weather&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;imageFolderUrl&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;author&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getDateDesignation&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://openweathermap.org/themes/openweathermap/assets/vendor/owm/img/icons/favicon.ico&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyTF&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;color&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;15494471&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;author&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;author&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://openweathermap.org/city/?q=Tokyo&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;icon_url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;footer&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;OpenWeatherMap&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;icon_url&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;fields&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Max&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;value&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyTF&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;temp_max&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;inline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Min&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;value&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;keyTF&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;temp_min&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;inline&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;thumbnail&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;url&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageFileUrl&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;embeds&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;画像にリンクを埋め込むやつを本文中で使えるかどうかを試してみましたが、それは出来ないようです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlSite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://openweathermap.org/city/?q=Tokyo&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://openweathermap.org/themes/openweathermap/assets/img/logo_white_cropped.png&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ontent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;[![OpenWeatherMap](&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;urlImage&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)](&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;urlSite&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;username&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;お天気あゆ&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;content&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;embeds&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnEmbeds&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// , &quot;tts&quot;: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;少し詰まったところ&lt;a href=&quot;#少し詰まったところ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、少し詰まったところです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ICO形式のファイルは表示できない&lt;a href=&quot;#ico形式のファイルは表示できない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;また、Discord上では&lt;code&gt;.ico&lt;/code&gt;拡張子のファイルは表示できないみたいでした。
2つ上に貼ったコード内の&lt;code&gt;iconUrl&lt;/code&gt;が該当箇所です。
後ほど、自分で&lt;code&gt;.png&lt;/code&gt;形式に変えて別の場所から公開したものをリンクに付けると、ちゃんとファビコンがDiscord上で表示されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1894&quot; height=&quot;1406&quot; src=&quot;/_astro/03.CW5XiMsa_Z252o0a.webp&quot; srcset=&quot;/_astro/03.CW5XiMsa_24tjcg.webp 640w, /_astro/03.CW5XiMsa_Zm8l5F.webp 750w, /_astro/03.CW5XiMsa_2e4Qqo.webp 828w, /_astro/03.CW5XiMsa_ZL1gmR.webp 1080w, /_astro/03.CW5XiMsa_Zz2SDh.webp 1280w, /_astro/03.CW5XiMsa_Z1fFTmd.webp 1668w, /_astro/03.CW5XiMsa_Z252o0a.webp 1894w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Number型のままでは、リクエスト時にエラーになる&lt;a href=&quot;#number型のままではリクエスト時にエラーになる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、Discord Webhookとか関係ないかと思いますが、最高気温と最低気温をNumber型のまま、オブジェクトをJSONにしたら、Discordへのリクエストを正常にできませんでした。
そのため、NumberをStringにして、JSON.stringifyしています。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、しゃべらせることができる&lt;a href=&quot;#ちなみにしゃべらせることができる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、1つ上に貼ったコード内の”tts”: trueですが、これをリクエストにちゃんと載せると、Discordで表示されたテキストのとおりに喋り始めます。
画像の場合だと、「今日は雨が降るみたいだよ。ぜろじぜろぜろふんぜろぜろびょう・・・」といった具合になります。
使いどころですね・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわ、通知されてきた！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;DiscordのWebhookを使ったツールは、通知するだけなら比較的簡単に作れます。ぜひ試してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他にも何か作れないかなあ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Apps Script】自分がGASで使うIDとかトークンを1つのシートで管理するライブラリを作ろうとしたけど、断念した話</title><link>https://endorphinbath.com/posts/gas-dropped-managing-token-with-sheet/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-dropped-managing-token-with-sheet/</guid><description>Google Apps Scriptで使うフォルダIDやスプレッドシートIDなどを一括管理するライブラリをスプレッドシート上で作ろうと思ったのですが、とある理由により頓挫しました。貴方もお気を付け下さい。</description><pubDate>Thu, 09 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、Google スプレッドシートを使って、IDとかトークンを管理できないかなあ。それを別のスクリプトから呼び出すんだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;えっとねええ、それ、あんまり効果出ないかも・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うそーん？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はそのことについて触れてみよう&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;やりたかったこと&lt;a href=&quot;#やりたかったこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は、Google Apps Scriptで作成するツールに、一つのID管理ライブラリを通じてフォルダやスプレッドシートやその他URLやらを参照させるようにしています。
詳細は、この記事で紹介しています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-management-of-id-frequently-used/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん&lt;/div&gt;&lt;div&gt;Google Apps Scriptで記述したフォルダやファイルのIDを一括管理するためのアイデアを掲載します。これで、どのフォルダとファイルがスクリプトで使用されているかどうかを管理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220305_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;しかし、そのやり方だと、IDのキーと値をいちいちスクリプトのコンソール画面を開いて、入力しなければなりません。
その作業が面倒くさかったので、スプレッドシート上で編集できるようにしたのが楽かなと思ったのです。
ツールのイメージはこんな感じです。
「キー」と「値」の列に入力していって、それをスクリプトであーだこーだして、最終的にオブジェクトとして別のライブラリに渡すのです。
&lt;img loading=&quot;lazy&quot; width=&quot;1642&quot; height=&quot;1352&quot; src=&quot;/_astro/01.C-XOS5fD_FNeR6.webp&quot; srcset=&quot;/_astro/01.C-XOS5fD_Z1NR3yF.webp 640w, /_astro/01.C-XOS5fD_MIciI.webp 750w, /_astro/01.C-XOS5fD_Z10Uhh8.webp 828w, /_astro/01.C-XOS5fD_1sMpDo.webp 1080w, /_astro/01.C-XOS5fD_ZsW12R.webp 1280w, /_astro/01.C-XOS5fD_FNeR6.webp 1642w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;しかし、断念・・・&lt;a href=&quot;#しかし断念&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、程なくして、このプロジェクトは停止することになったのです・・・・
理由は、スプレッドシートを開いた瞬間にスクリプトを実行してくれる、SImple Triggerというイベントハンドラというものが、Google Apps Scriptには実装されています。
そのSimple Triggerを使えば、スプレッドシートを開いた時に自作のメニューを追加してくれます。（下の画像の「フォルダ作成処理」というのが自作のメニューです。）
&lt;img loading=&quot;lazy&quot; width=&quot;988&quot; height=&quot;276&quot; src=&quot;/_astro/02.BPFZ_GAD_Z1tnq1e.webp&quot; srcset=&quot;/_astro/02.BPFZ_GAD_Z1MG4os.webp 640w, /_astro/02.BPFZ_GAD_Z17qfYg.webp 750w, /_astro/02.BPFZ_GAD_Z1aaAuH.webp 828w, /_astro/02.BPFZ_GAD_Z1tnq1e.webp 988w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしながら、このSimple Triggerでスクリプトを実行すると、どうやら一部の機能が権限的な理由で利用できなくなってしまうようなのです。
&lt;img loading=&quot;lazy&quot; width=&quot;2784&quot; height=&quot;770&quot; src=&quot;/_astro/02.qfP4q8EK_Z1L02rG.webp&quot; srcset=&quot;/_astro/02.qfP4q8EK_ZAIC3c.webp 640w, /_astro/02.qfP4q8EK_rPyiV.webp 750w, /_astro/02.qfP4q8EK_g5F0h.webp 828w, /_astro/02.qfP4q8EK_ZX2wek.webp 1080w, /_astro/02.qfP4q8EK_e2ALk.webp 1280w, /_astro/02.qfP4q8EK_KdBDD.webp 1668w, /_astro/02.qfP4q8EK_tz6vW.webp 2048w, /_astro/02.qfP4q8EK_Z1aE2U3.webp 2560w, /_astro/02.qfP4q8EK_Z1L02rG.webp 2784w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に、今回のスプレッドシートを使ってオブジェクトを渡すためには、&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;の関数を使用しなければなりません。（&lt;code&gt;getActiveSpreadsheet()&lt;/code&gt;的なものを呼び出すと、このID管理ライブラリのシートを参照してしまいます。）
結局、スプレッドシートをonOpen時に読み込んでメニューを表示させる方法としては、スプレッドシート上にボタンを配置して、それを最初にクリックする手段しか思いつきませんでした・・・
&lt;img loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;484&quot; src=&quot;/_astro/04.C0rSHnld_10rMVG.webp&quot; srcset=&quot;/_astro/04.C0rSHnld_1st2iu.webp 640w, /_astro/04.C0rSHnld_Z2kYCvN.webp 750w, /_astro/04.C0rSHnld_27U3Q1.webp 828w, /_astro/04.C0rSHnld_10rMVG.webp 838w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に、このonOpenをなんとか出来ないものかを四苦八苦した記事が以下のものです。
しかし、どうにもなりませんでした・・・。なんせ、スクリプトが実行されないので・・・。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-onopen-auth-error/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.endorphinbath.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;これが、僕がID管理をスプレッドシート上で行うことを断念するまでの物語でした。
貴方は、同じ轍を踏まないようにお気を付け下さい。
出来たようでしたら、それはそれで方法を教えてもらいたいものです！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;悲しい・・・スプレッドシートだったら編集が楽なのに・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんな権限のトラップがあるとは思わなかったよ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他になんか楽にIDをメモっておけるツールとかないかなあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;同じGoogleだったら、GCPのSecret Managerとか？ 少しお値段が掛かるけど・・・&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://cloud.google.com/security/products/secret-manager&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/cgc/supercloud_favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Secret Manager&lt;/div&gt;&lt;div&gt;Google Cloud の Secret Manager を使用すると、API キー、パスワード、証明書、その他のセンシティブ データを安全に保存できます。&lt;/div&gt;&lt;div&gt;cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Apps Script】onOpen時に「Spreadsheet.openByIdを呼び出す権限がありません」となり、メニューが追加されない</title><link>https://endorphinbath.com/posts/gas-onopen-auth-error/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-onopen-auth-error/</guid><description>onOpenなどのSImple Triggerを使ったスクリプト実行時に、「Spreadsheet.openByIdを呼び出す権限がありません」みたいな権限エラーが発生した時に試したことを紹介します。</description><pubDate>Wed, 08 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はっ？ なんで、いつも通りスプレッドシートを開いてonOpenでメニューが追加されないの！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ〜、それは権限のエラーが出てるかもしれない・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;権限？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はそのことについて触れてみよう&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;事象&lt;a href=&quot;#事象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、直面したエラーはこんな感じのものです。
&lt;code&gt;HtmlService()&lt;/code&gt;を使って、スプレッドシートを開いた時にメニューが表示されるかと思いきや、全く表示されてこない・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1482&quot; height=&quot;450&quot; src=&quot;/_astro/01.a1KUtGVt_1nEeGj.webp&quot; srcset=&quot;/_astro/01.a1KUtGVt_Z1JHRGv.webp 640w, /_astro/01.a1KUtGVt_25Wr76.webp 750w, /_astro/01.a1KUtGVt_ZxVbzd.webp 828w, /_astro/01.a1KUtGVt_Z1FzmtF.webp 1080w, /_astro/01.a1KUtGVt_Z2jQYUr.webp 1280w, /_astro/01.a1KUtGVt_1nEeGj.webp 1482w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スクリプト編集画面で、こんな感じにGoogle Workspaceのサービスを叩いてみてもダメ・・・。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authGoogleWorkspace&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;drive&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRootFolder&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/?hl=ja&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因&lt;a href=&quot;#原因&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本当に意味がわからない！！
そう悩んでいた時にこの記事を発見。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/NickelCreate/items/55b888b66695527c85b0&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[GAS] 実行する権限がありません。についての対策まとめ - Qiita&lt;/div&gt;&lt;div&gt;Google Apps Scriptでシンプルトリガーを使用したときに実行できない関数がありますが、 それについて調べたことまとめです。 自分が使いたかったのは他のスプレッドシートを開く SpreadsheetApp.openById() 原因 onEditやonOpen...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1pbWFnZS1zdG9yZSUyRjAlMkYyMDM4NDQlMkZiNmQ1M2VmNWIxMmI4YzBkMDE4ODk5ZmI5M2ZhMmQ1OTE0YmRkZmE2JTJGeF9sYXJnZS5wbmclM0YxNTg3NzkzNjc0P2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz1kZDJkYzg4YWJmNjQ3OTg2ZDNiMDY5OGExMjQyMWVmMQ%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3De61da15c58bb9a1d79b7725e00f49c69?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9JTVCR0FTJTVEJTIwJUU1JUFFJTlGJUU4JUExJThDJUUzJTgxJTk5JUUzJTgyJThCJUU2JUE4JUE5JUU5JTk5JTkwJUUzJTgxJThDJUUzJTgxJTgyJUUzJTgyJThBJUUzJTgxJUJFJUUzJTgxJTlCJUUzJTgyJTkzJUUzJTgwJTgyJUUzJTgxJUFCJUUzJTgxJUE0JUUzJTgxJTg0JUUzJTgxJUE2JUUzJTgxJUFFJUU1JUFGJUJFJUU3JUFEJTk2JUUzJTgxJUJFJUUzJTgxJUE4JUUzJTgyJTgxJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9ZTcxOWZlMzQ1YTBhMDgwOWRmYTk5MzU3OGU3MTJjYmI&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBOaWNrZWxDcmVhdGUmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz1jODVkYTdmOTJjNWI3NjE2NGQ2NTFhOTE4MDdhM2U2Yw&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=232d28dc0aba8a7f87ab70dfbd662807&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;どうやら、&lt;code&gt;onOpen&lt;/code&gt;や&lt;code&gt;onEdit&lt;/code&gt;などの自動実行トリガーは権限が最低らしい。士農工商で言ったら、えた・ひにんだ。
なので、少し強い権限が必要な機能を利用するためには、&lt;code&gt;onOpen&lt;/code&gt;ではないトリガーからスクリプトを実行しなければならないっぽい。
&lt;img loading=&quot;lazy&quot; width=&quot;2784&quot; height=&quot;770&quot; src=&quot;/_astro/02.qfP4q8EK_Z1L02rG.webp&quot; srcset=&quot;/_astro/02.qfP4q8EK_ZAIC3c.webp 640w, /_astro/02.qfP4q8EK_rPyiV.webp 750w, /_astro/02.qfP4q8EK_g5F0h.webp 828w, /_astro/02.qfP4q8EK_ZX2wek.webp 1080w, /_astro/02.qfP4q8EK_e2ALk.webp 1280w, /_astro/02.qfP4q8EK_KdBDD.webp 1668w, /_astro/02.qfP4q8EK_tz6vW.webp 2048w, /_astro/02.qfP4q8EK_Z1aE2U3.webp 2560w, /_astro/02.qfP4q8EK_Z1L02rG.webp 2784w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、僕が初めてこの事象と遭遇したのは、&lt;code&gt;onOpen&lt;/code&gt;で使用するアプリ上で&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;を使ったからなのですが、&lt;code&gt;onOpen&lt;/code&gt;で実際に実行される処理内で&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;が実行されているかどうかは関係なさそう。
僕の場合は、&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;がonOpenと関係ない関数に入っているだけでちゃんと動きませんでした。
なので、&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;を使うアプリでは、&lt;code&gt;onOpen&lt;/code&gt;はトリガーを作成する処理だけを入れようと思ったわけです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;調査&lt;a href=&quot;#調査&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は、&lt;code&gt;onOpen&lt;/code&gt;関数に以下のような処理を入れました。
&lt;code&gt;onOpen&lt;/code&gt;でエラーになるので、そしたら&lt;code&gt;onEdit&lt;/code&gt;イベントハンドラを追加。その&lt;code&gt;onEdit&lt;/code&gt;イベントでイベントハンドラを削除。（まあ、&lt;code&gt;onEdit&lt;/code&gt;もSimple Triggerなので権限弱そうだけど・・・）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onOpen&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getResponseText&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;menuName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;フォルダ作成処理&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objActions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;作業ページ一覧表示処理&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;functionName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;displayListOfPagesToWork&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Display Thumbnails.&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;functionName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;displayThumbnails&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// これがメニューを追加する関数。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;onOpenToAddSpreadsheetMenu&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;menuName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;objActions&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;alert&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;onOpen failed. &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Browser.msgBox(&quot;onOpen failed. &quot; + e);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;createTrigger&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createTrigger&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newTrigger&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;doOnOpen&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forSpreadsheet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onEdit&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;alert&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Initialization failed. &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doOnOpen&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;onOpen&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getProjectTriggers&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getEventType&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;EventType&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ON_EDIT&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteTrigger&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、結果的には失敗。
トリガーは追加されていませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;2674&quot; height=&quot;1098&quot; src=&quot;/_astro/03.BHreKapR_287pPS.webp&quot; srcset=&quot;/_astro/03.BHreKapR_ZvySgy.webp 640w, /_astro/03.BHreKapR_Zh4x4j.webp 750w, /_astro/03.BHreKapR_xEU8y.webp 828w, /_astro/03.BHreKapR_Z1mrm1v.webp 1080w, /_astro/03.BHreKapR_REW3y.webp 1280w, /_astro/03.BHreKapR_22wdjI.webp 1668w, /_astro/03.BHreKapR_Z1CVSVo.webp 2048w, /_astro/03.BHreKapR_Z2aAzcf.webp 2560w, /_astro/03.BHreKapR_287pPS.webp 2674w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、まずスクリプトが実行されているかどうかを検証。
スクリプトが走るなら、スプレッドシートを開いた時にダイアログが表示されるはず。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onOpen&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// この2行を追加。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;statement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ui&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getResponseText&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;menuName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;フォルダ作成処理&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objActions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;作業ページ一覧表示処理&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;functionName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;displayListOfPagesToWork&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Display Thumbnails.&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;functionName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;displayThumbnails&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;onOpenToAddSpreadsheetMenu&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;menuName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;objActions&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;alert&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;onOpen failed. &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;createTrigger&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;実行してみると、ダイアログは表示されませんでした・・・
僕が遭遇している&lt;code&gt;SpreadsheetApp.openById()&lt;/code&gt;の権限エラーは、自作の別ライブラリにある処理で引っかかっているようなので、そこの静的解析中にエラーになっているのかもしれない。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一応、解決&lt;a href=&quot;#一応解決&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なので、スクリプト自体が実行されていないとなると、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;アプリのコンソール画面内でトリガー設定をするか&lt;/li&gt;
&lt;li&gt;スプレッドシートの中にスクリプトを実行するボタンを作るか&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;この2つしか方法はなさそうだったので、後者のボタンを設置する方法にしました。
やむを得ませんでした・・・無念・・・（まあ、こんな不具合に何時間も使ってられません。）
&lt;img loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;484&quot; src=&quot;/_astro/04.C0rSHnld_10rMVG.webp&quot; srcset=&quot;/_astro/04.C0rSHnld_1st2iu.webp 640w, /_astro/04.C0rSHnld_Z2kYCvN.webp 750w, /_astro/04.C0rSHnld_27U3Q1.webp 828w, /_astro/04.C0rSHnld_10rMVG.webp 838w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;onOpen&lt;/code&gt;関数を&lt;code&gt;initialize&lt;/code&gt;関数に名前を変更して、ボタンに割り当てました。
&lt;code&gt;initialize()&lt;/code&gt;を実行することで、自作のメニューは追加されるようになりました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;良かった・・・なんとかメニューが追加された・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;機能ごとに必要な権限が違うとは思わなかったね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;知ったこっちゃない！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【イラスト】今日の練習成果（手の確認とクロッキー）_第3回</title><link>https://endorphinbath.com/posts/illust-training-003/</link><guid isPermaLink="true">https://endorphinbath.com/posts/illust-training-003/</guid><description>今日のイラストの練習成果です。身体全体と手をクロッキーしました。手はもっと練習が必要ですが、その前に練習に飽きている自分がいる・・・</description><pubDate>Sat, 04 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本日も、イラストを練習していきます。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;成果&lt;a href=&quot;#成果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、クロッキーです。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WnUgIHrxKqA&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;のポーズを練習しました。8頭身が想像以上にスタイルが良すぎて驚きました。&lt;/p&gt;&lt;p&gt;イラストにするとかなり極端な見た目になりますね。イラストの場合は多くても7頭身が丁度良いのかも。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1226&quot; src=&quot;/_astro/01.DxU15zQV_Z2oQr43.webp&quot; srcset=&quot;/_astro/01.DxU15zQV_ZcrFE3.webp 640w, /_astro/01.DxU15zQV_Z5L94E.webp 750w, /_astro/01.DxU15zQV_Z1Q6Afa.webp 828w, /_astro/01.DxU15zQV_Aw9xr.webp 1080w, /_astro/01.DxU15zQV_1SL0Vb.webp 1280w, /_astro/01.DxU15zQV_1ty7jo.webp 1668w, /_astro/01.DxU15zQV_Z2oQr43.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、手の練習をしました。参考にしたのは&lt;a href=&quot;https://www.youtube.com/watch?v=-jqP9CnxY1k&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;と&lt;a href=&quot;https://www.youtube.com/watch?v=dpJbttYmSK8&amp;amp;t=39s&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;です。hide channelはとても良いです。&lt;/p&gt;&lt;p&gt;骨格から手を描いていきます。自分の絵の感覚と綺麗な手のイメージを近づけていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1179&quot; src=&quot;/_astro/02.lCy1wHKK_Z1QUJeN.webp&quot; srcset=&quot;/_astro/02.lCy1wHKK_Z1yCyuK.webp 640w, /_astro/02.lCy1wHKK_15l9VX.webp 750w, /_astro/02.lCy1wHKK_ZEQceX.webp 828w, /_astro/02.lCy1wHKK_Z2pJo2U.webp 1080w, /_astro/02.lCy1wHKK_Z1da5bw.webp 1280w, /_astro/02.lCy1wHKK_ZxEvoI.webp 1668w, /_astro/02.lCy1wHKK_Z1QUJeN.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;手の練習を引き続きやっています。単純にパーにした掌を描いて、少し形が綺麗になってきました。&lt;/p&gt;&lt;p&gt;なので次に、少し手の形を変形させて描きました。指を曲げたときの描き方はもっとなれていく必要がありそうです。&lt;/p&gt;&lt;p&gt;手の練習ばかりで、体全体の絵の感覚を少し取り戻す必要があると思ったので、少し体全体のクロッキーもしました。「エビングハウスの忘却曲線」的な考え方です。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1220&quot; src=&quot;/_astro/03.CHu6rvzn_Z1Oml5n.webp&quot; srcset=&quot;/_astro/03.CHu6rvzn_9SFhc.webp 640w, /_astro/03.CHu6rvzn_gzcQA.webp 750w, /_astro/03.CHu6rvzn_11VXPw.webp 828w, /_astro/03.CHu6rvzn_16TIfk.webp 1080w, /_astro/03.CHu6rvzn_zb47m.webp 1280w, /_astro/03.CHu6rvzn_ZIXIkd.webp 1668w, /_astro/03.CHu6rvzn_Z1Oml5n.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;手の練習となると少し練習が地味で退屈してきました・・・。なので、体全体の絵を描いてみたいのですが、もう少し体のパーツの構造を覚える必要がありそうです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そのため、次は足にフォーカスしたクロッキーをしてみようと思います。少しパーツを変えて、練習にメリハリを付けて、自分が飽きないようにしていきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub Actions】実行時にパラメータ項目を設定する</title><link>https://endorphinbath.com/posts/githubactions-setting-parameter/</link><guid isPermaLink="true">https://endorphinbath.com/posts/githubactions-setting-parameter/</guid><description>GitHub Actions実行時に設定できる項目の種類をザッとまとめました。GitHub Actionsの概要から触れていますので、普段あまり触ったことがない方もお立ち寄り下さい。</description><pubDate>Fri, 03 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、GitHub Actionsのアクション実行時の画面で、色々と設定値をいじる方法を見てみよう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、その設定値によってActionsの挙動を変えてみるってことだあね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そゆこと。じゃあ、行きましょう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;かんたんにGitHub Actionsとは。&lt;a href=&quot;#かんたんにgithub-actionsとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「GitHub Actions」とは、バージョン管理ツールの定番である「Git」を、
さらに管理するサービスである「GitHub」上で利用できる機能です。&lt;/p&gt;&lt;p&gt;GitHub Actionsを利用することで、今までローカル環境で実行しなければならなかった定期的なスクリプトなどを、ブラウザ上でコマンドラインを叩かずに実行できるようになります。
GitHubのリポジトリのページ内にある「Actions」タブから遷移して、自分で拵えたワークフローを好きな時に実行できます。ちょうど、下の画像みたいな感じで。
&lt;img loading=&quot;lazy&quot; width=&quot;2336&quot; height=&quot;892&quot; src=&quot;/_astro/01.D5ctvw_F_Zz6Kvw.webp&quot; srcset=&quot;/_astro/01.D5ctvw_F_1HDlDi.webp 640w, /_astro/01.D5ctvw_F_1DulzV.webp 750w, /_astro/01.D5ctvw_F_Z2uQz5J.webp 828w, /_astro/01.D5ctvw_F_Z1bgUIf.webp 1080w, /_astro/01.D5ctvw_F_F50aP.webp 1280w, /_astro/01.D5ctvw_F_lQm7w.webp 1668w, /_astro/01.D5ctvw_F_2sH0AH.webp 2048w, /_astro/01.D5ctvw_F_Zz6Kvw.webp 2336w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、このGitHub Actionsは、手動実行しなくてもプルリクエストを作成した時や、crontabで日時を指定して実行することも出来ますが、今回の主題とは異なりますので割愛します。&lt;/p&gt;&lt;p&gt;今回は、手動実行する時に設定できる項目について、記載していきます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定できる項目&lt;a href=&quot;#設定できる項目&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先程お見せした画像の中に、&lt;code&gt;Log level&lt;/code&gt;と書いてある項目がありましたが、あれは私が自分で設定した項目です。その&lt;code&gt;Log level&lt;/code&gt;は、&lt;code&gt;choice&lt;/code&gt;型として設定したものです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;設定を編集できる場所&lt;a href=&quot;#設定を編集できる場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それでは、&lt;code&gt;choice&lt;/code&gt;型以外のものも見ていきましょう。
その項目は、GitHub Actionsを作る時に記述するworkflowファイルで設定できます。
まずは、リポジトリ直下の&lt;code&gt;.github/workflow&lt;/code&gt;のディレクトリに移動します。
&lt;img loading=&quot;lazy&quot; width=&quot;2656&quot; height=&quot;984&quot; src=&quot;/_astro/02.DYkGw3E0_Z1b0uLY.webp&quot; srcset=&quot;/_astro/02.DYkGw3E0_Z19ViuY.webp 640w, /_astro/02.DYkGw3E0_ZE3MXe.webp 750w, /_astro/02.DYkGw3E0_PMTK9.webp 828w, /_astro/02.DYkGw3E0_Z1pzAF6.webp 1080w, /_astro/02.DYkGw3E0_Z267BHC.webp 1280w, /_astro/02.DYkGw3E0_9oOPH.webp 1668w, /_astro/02.DYkGw3E0_ZfbyRp.webp 2048w, /_astro/02.DYkGw3E0_Z24tUx1.webp 2560w, /_astro/02.DYkGw3E0_Z1b0uLY.webp 2656w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、このディレクトリで.yml形式のファイルを作成していきます。
その.ymlファイルの中で、&lt;code&gt;on.workflow_dispatch.inputs&lt;/code&gt;フィールド上で、Actions実行に設定する要素を編集できます。
主に使うものはこんなところでしょうか。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;編集するデータ型&lt;/th&gt;&lt;th&gt;どんな感じに編集できるか&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;文字列を入力できる&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;choice&lt;/td&gt;&lt;td&gt;選択肢を選べる&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;boolean&lt;/td&gt;&lt;td&gt;チェックボックス&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;environment&lt;/td&gt;&lt;td&gt;デプロイキーから選択する&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;string型 - 文字列を入力できる&lt;a href=&quot;#string型---文字列を入力できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;stringは、任意の文字を入力することが出来ます。
入力中、特に制限を掛けられるわけではないみたいなので、ワークフロー実行時に例外処理を組み込んでいくことになるかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1578&quot; height=&quot;814&quot; src=&quot;/_astro/03.LqRKwVMv_ZpstES.webp&quot; srcset=&quot;/_astro/03.LqRKwVMv_ZrXDbU.webp 640w, /_astro/03.LqRKwVMv_ZQd7hF.webp 750w, /_astro/03.LqRKwVMv_Z2sx13a.webp 828w, /_astro/03.LqRKwVMv_2qktCb.webp 1080w, /_astro/03.LqRKwVMv_Ubivt.webp 1280w, /_astro/03.LqRKwVMv_ZpstES.webp 1578w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;choice型 - 選択肢を選べる&lt;a href=&quot;#choice型---選択肢を選べる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;choiceは、HTMLのselectタグのように選択肢を設定して、編集することが出来ます。
例えば、こんな風にワークフローファイルで設定すると・・・、&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get Snippet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;logLevel&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Log level&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;choice&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;info&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;warning&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;debug&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;year&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Year&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;choice&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;01&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;01&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;02&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;03&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;04&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;05&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;06&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;07&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;08&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;09&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;10&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;11&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;&apos;12&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;month&lt;/code&gt;のフィールドはこんな風になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2284&quot; height=&quot;930&quot; src=&quot;/_astro/04.D5coTZRL_9M5GC.webp&quot; srcset=&quot;/_astro/04.D5coTZRL_NjsMH.webp 640w, /_astro/04.D5coTZRL_26OFHy.webp 750w, /_astro/04.D5coTZRL_ZC5jtQ.webp 828w, /_astro/04.D5coTZRL_1aGgkS.webp 1080w, /_astro/04.D5coTZRL_2igC92.webp 1280w, /_astro/04.D5coTZRL_8p3G9.webp 1668w, /_astro/04.D5coTZRL_1v4S8F.webp 2048w, /_astro/04.D5coTZRL_9M5GC.webp 2284w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;boolean型 - チェックボックス&lt;a href=&quot;#boolean型---チェックボックス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このデータ型は、チェックボックスとしてチェックあり/なしを設定できる項目です。
&lt;img loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;430&quot; src=&quot;/_astro/05.DvQtiViB_Zc3GRr.webp&quot; srcset=&quot;/_astro/05.DvQtiViB_5D1KK.webp 640w, /_astro/05.DvQtiViB_LQBuP.webp 750w, /_astro/05.DvQtiViB_Zc3GRr.webp 804w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;environment型 - 環境の一覧から選択する&lt;a href=&quot;#environment型---環境の一覧から選択する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この型はまた一味違います。
まず、リポジトリのSettingsタブから遷移できる、&lt;code&gt;Environments&lt;/code&gt;の画面でSecretやらを設定できるようです。（この機能は、Organizationプランでないと利用できないっぽい？）
そこで設定した環境（StagingやらProductionやらあるかと思います）が選択肢として選択できるようになるようです。以下の記事を見て知りました。&lt;/p&gt;&lt;a href=&quot;https://zenn.dev/kitoketa/articles/f98a082e233c29&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://static.zenn.studio/images/logo-transparent.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Zenn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHub Actionsで手動でワークフローを実行する際のenvironmentパラメータを使ってみる&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zenn.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://res.cloudinary.com/zenn/image/upload/s--cV6A0O9U--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:GitHub%2520Actions%25E3%2581%25A7%25E6%2589%258B%25E5%258B%2595%25E3%2581%25A7%25E3%2583%25AF%25E3%2583%25BC%25E3%2582%25AF%25E3%2583%2595%25E3%2583%25AD%25E3%2583%25BC%25E3%2582%2592%25E5%25AE%259F%25E8%25A1%258C%25E3%2581%2599%25E3%2582%258B%25E9%259A%259B%25E3%2581%25AEenvironment%25E3%2583%2591%25E3%2583%25A9%25E3%2583%25A1%25E3%2583%25BC%25E3%2582%25BF%25E3%2582%2592%25E4%25BD%25BF%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25BF%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:kitoketa%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dnWGdvLUFHM0lqdTVXejBLS2J0Z2F5VlQ5ekxOd2FFTk12WS1EeFE9czk2LWM=%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その他&lt;a href=&quot;#その他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;色々と入力型を決めて編集できますが、それらの項目を必須か任意にするかどうかも編集できます。
先程お見せした画像にて、赤い※が付いているかいないかで見分けられます。
&lt;img loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;430&quot; src=&quot;/_astro/05.DvQtiViB_Zc3GRr.webp&quot; srcset=&quot;/_astro/05.DvQtiViB_5D1KK.webp 640w, /_astro/05.DvQtiViB_LQBuP.webp 750w, /_astro/05.DvQtiViB_Zc3GRr.webp 804w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この他にも、&lt;code&gt;number&lt;/code&gt;型があるようですが、
2023/2/8現在、文字列と比べて特に入力制限があるわけではないようです・・・。なので、Actions実行前に&lt;code&gt;string&lt;/code&gt;型で入力して、Actions内で数値にキャストできるかどうかで例外分岐するのが吉でしょうか。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、GitHub Actions実行時に設定できる項目の種類について、紹介しました。&lt;/p&gt;&lt;p&gt;詳しいことは、このGitHub公式のリファレンスで詳細を確認することが出来ますので、気になる方はご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://docs-internal.github.com/en/actions/reference/workflows-and-actions/workflow-syntax&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs-internal.github.com/assets/cb-345/images/site/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Workflow syntax for GitHub Actions - GitHub Docs&lt;/div&gt;&lt;div&gt;A workflow is a configurable automated process made up of one or more jobs. You must create a YAML file to define your workflow configuration.&lt;/div&gt;&lt;div&gt;docs-internal.github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.github.com/assets/cb-345/images/social-cards/actions.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ますます便利になっていくGitHubなのでした。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;最近コーディングしてなかったから、久しぶりに触ったら驚きだったよ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ドンドン、簡易化していこう！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2023年01月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202301/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202301/</guid><description>kinkingame24bitのYouTube等の更新状況になります。SatisfactoryとFrostpunkのシリーズが完結して、RAILGRADEのシリーズが開始です。ショート動画も投稿し始めました。</description><pubDate>Thu, 02 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2023年1月に投稿した動画の一覧&lt;a href=&quot;#2023年1月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：47&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに新型ウォールドリルが動き出す | 極寒の氷の世界で極限生活 #14【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに新型ウォールドリルが動き出す--極寒の氷の世界で極限生活-14ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XUOQf_mh3HA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】大気圏突入中に般若心経を唱えるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory大気圏突入中に般若心経を唱えるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/aFepYMuk6PA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに石炭採掘機を用意する | 極寒の氷の世界で極限生活 #15【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに石炭採掘機を用意する--極寒の氷の世界で極限生活-15ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/K6eDn_c62Sg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】ソフトクリームに一陽来復を願い奉る | 極寒の氷の世界で極限生活 #16【ゆっくり実況】&lt;a href=&quot;#frostpunkソフトクリームに一陽来復を願い奉る--極寒の氷の世界で極限生活-16ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/U8gQlYIxn4k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】鉄鉱石を削るでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory鉄鉱石を削るでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AG5NSDEaXNk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ポータブルマイナーくんを置くでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryポータブルマイナーくんを置くでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/w0UyWmMEq9I/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに極寒世界で生活する | 極寒の氷の世界で極限生活 #17（完）【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに極寒世界で生活する--極寒の氷の世界で極限生活-17完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/YGmSDiJdTms/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】異星を鉄道でゆっくり工業化 #01【ゆっくり実況】&lt;a href=&quot;#railgrade異星を鉄道でゆっくり工業化-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/sY9c2OR67eg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】スピッターと初の邂逅でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryスピッターと初の邂逅でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/qIz3TZ4zAqw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】借金網で苦難する #02 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade借金網で苦難する-02--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/L2KMoNBUf-0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】トカゲイヌが沢山いるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryトカゲイヌが沢山いるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/s6mX2H4LiI8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電車に乗るでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory電車に乗るでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wHJwdOLCNmI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】供給網には資金が不可欠である #03 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade供給網には資金が不可欠である-03--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/HX29WDVPqQ8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】連絡網は迅速に読み上げるものである #04 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade連絡網は迅速に読み上げるものである-04--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zFqTBdm-Cxg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ペンギンの建造物でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryペンギンの建造物でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1p0RHzfozSY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】天網が覆うような都市になりますように #05 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade天網が覆うような都市になりますように-05--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Pi6ql3DlaQo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ジャンケンでRock, Scissors or Paperするでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryジャンケンでrock-scissors-or-paperするでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Z1For6AVY_c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】陸クジラで命がけで跳ねるでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory陸クジラで命がけで跳ねるでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/rIWELs8Bteo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】ドグシン百戸長を討ち滅ぼすぞよ | 対馬に仇なす者共に鉄槌を #40【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaドグシン百戸長を討ち滅ぼすぞよ--対馬に仇なす者共に鉄槌を-40ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Fkudh-ZcX0Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】仲間と感動の再開をしたいぞよ | 対馬に仇なす者共に鉄槌を #41【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima仲間と感動の再開をしたいぞよ--対馬に仇なす者共に鉄槌を-41ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kCb5XMIjqeg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ゼノ・バッシャー作るでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryゼノバッシャー作るでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Ui-VTcr4gd4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】総集編：狐の巣の稲荷の祠めぐり | 対馬に仇なす者共に鉄槌を #42【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima総集編狐の巣の稲荷の祠めぐり--対馬に仇なす者共に鉄槌を-42ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Ia0oGwJ3_8c/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ゼノ・バッシャー使いたいでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryゼノバッシャー使いたいでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/DaZRyuPjin8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】ゆなの譚でアルタンを討つぞよ | 対馬に仇なす者共に鉄槌を #43【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaゆなの譚でアルタンを討つぞよ--対馬に仇なす者共に鉄槌を-43ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/luyRYCxYJkA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】逃げるなぁ卑怯者ぉ。鬼滅の刃でごわすか。🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory逃げるなぁ卑怯者ぉ鬼滅の刃でごわすか本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/w-dVdnPZNr0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ジャンプしすぎてしんだでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryジャンプしすぎてしんだでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FXL4Zv1zoss/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】蒙古のハーンの鎧を手に入れるぞよ | 対馬に仇なす者共に鉄槌を #44【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima蒙古のハーンの鎧を手に入れるぞよ--対馬に仇なす者共に鉄槌を-44ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/WGHeuBBWviQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】こんな岩場に住むやつはイシツブテくらいでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryこんな岩場に住むやつはイシツブテくらいでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2FXcMayGHcU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】残り二つの伝承を攻略すっぞ（焔の剣、破裂矢） | 対馬に仇なす者共に鉄槌を #45【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima残り二つの伝承を攻略すっぞ焔の剣破裂矢--対馬に仇なす者共に鉄槌を-45ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6I24BwBFZbY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】Crisis Coreのセフィロスみたいなことすんなでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactorycrisis-coreのセフィロスみたいなことすんなでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xYXOyBdL5Bk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】ハーン打倒への下調べをするぞよ | 対馬に仇なす者共に鉄槌を #47【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaハーン打倒への下調べをするぞよ--対馬に仇なす者共に鉄槌を-47ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/MdOyvKXeckE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】Update 6で使えるノーべリスク試すでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryupdate-6で使えるノーべリスク試すでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/K39UrM6WZvw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】叔父上への手紙を置きに行くぞよ | 対馬に仇なす者共に鉄槌を #48【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima叔父上への手紙を置きに行くぞよ--対馬に仇なす者共に鉄槌を-48ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VRbmRwszLpw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】百合との思い出作りをするぞよ | 対馬に仇なす者共に鉄槌を #49【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima百合との思い出作りをするぞよ--対馬に仇なす者共に鉄槌を-49ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/gWJG2-fWWpc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】クラスター爆弾でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryクラスター爆弾でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nifDPa4CAEA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】安達政子ものがたり、完結 | 対馬に仇なす者共に鉄槌を #50【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima安達政子ものがたり完結--対馬に仇なす者共に鉄槌を-50ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2-CohZn2eYI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】タイムラプス（Mike Tyson）でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryタイムラプスmike-tysonでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/hNhPO283_bY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】基幹網への需要は倍々ゲームである #06 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade基幹網への需要は倍々ゲームである-06--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nri5Q8xyBVM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】タイムラプス（IT Tower）でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryタイムラプスit-towerでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/cALGirzBu3E/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】コンベアからコツコツ物資を摘むでごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactoryコンベアからコツコツ物資を摘むでごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SDev1m5PIaA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】防鳥網を用意して下さい。鳥が多すぎる。 #07 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade防鳥網を用意して下さい鳥が多すぎる-07--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/coc12R3EOcM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】大謀網で資金を蓄える作戦でごわす #08 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade大謀網で資金を蓄える作戦でごわす-08--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TCbKgW0ffe4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】砂漠の探索中に茶番でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory砂漠の探索中に茶番でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PuVaa2BWO2M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】神経網のような迷路線を解きほぐす #09 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade神経網のような迷路線を解きほぐす-09--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/VLOyfYS_VFo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】組織網の中で繰り広げられる諍いは御免でごわす #10 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade組織網の中で繰り広げられる諍いは御免でごわす-10--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/3lX8w49xas8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】陸クジラ先輩の迷場面集でごわす🐧本編は概要欄のURLから #ゆっくり実況 #Shorts&lt;a href=&quot;#satisfactory陸クジラ先輩の迷場面集でごわす本編は概要欄のurlから-ゆっくり実況-shorts&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TesSzoAyMOA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【RAILGRADE】公衆網とは無縁な別荘地に行きたいでごわす #11 | 異星を鉄道でゆっくり工業化【ゆっくり実況】&lt;a href=&quot;#railgrade公衆網とは無縁な別荘地に行きたいでごわす-11--異星を鉄道でゆっくり工業化ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2023/01/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PUjbccxoVlc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は47本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2023年01月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202301/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202301/</guid><description>2023年01月に読んだ本になります。YouTubeで読書する時間が取れませんでした。</description><pubDate>Wed, 01 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;1月の読書メーター&lt;a href=&quot;#1月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：0&lt;/li&gt;
&lt;li&gt;読んだページ数：0&lt;/li&gt;
&lt;li&gt;ナイス数：1&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は0冊か・・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【イラスト】今日の練習成果（耳と胸おっぱいと髪の確認とクロッキー）_第2回</title><link>https://endorphinbath.com/posts/illust-training-002/</link><guid isPermaLink="true">https://endorphinbath.com/posts/illust-training-002/</guid><description>今日のイラストの練習成果です。耳とおっぱいと髪の確認とポーズをクロッキーしました。胸郭と骨盤の厚さはプロポーションに関わってくるので、そのサイズは練習を積んで感覚を養わなければですね。</description><pubDate>Mon, 30 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本日も、イラストを練習していきます。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;成果&lt;a href=&quot;#成果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、クロッキーをウォーミングアップとして取り組みます。&lt;/p&gt;&lt;p&gt;そして、耳の練習をしました。参考にしたのは&lt;a href=&quot;https://esinote.com/guide/body/ear&quot; target=&quot;_blank&quot;&gt;このサイト&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;加えて、おっぱいの練習をしました。参考にしたのは&lt;a href=&quot;https://www.youtube.com/watch?v=pzWsF0DLo5k&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;です。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1233&quot; src=&quot;/_astro/01.oQNjW_EY_1Hrxzp.webp&quot; srcset=&quot;/_astro/01.oQNjW_EY_16pCMp.webp 640w, /_astro/01.oQNjW_EY_Z1k3VvW.webp 750w, /_astro/01.oQNjW_EY_Z1gRKU4.webp 828w, /_astro/01.oQNjW_EY_2gSRc7.webp 1080w, /_astro/01.oQNjW_EY_ZOY7td.webp 1280w, /_astro/01.oQNjW_EY_vEX8U.webp 1668w, /_astro/01.oQNjW_EY_1Hrxzp.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、おしりの練習をしました。参考にしたのは&lt;a href=&quot;https://www.youtube.com/watch?v=9mLv2nasnfM&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;それに加えて、後ろ姿の骨格の確認と、髪も取り組みました。あとは、振り向きざまのクロッキー。ポーズの参考は&lt;a href=&quot;https://www.youtube.com/watch?v=qmFjOtk-r5U&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;の中のものです。&lt;/p&gt;&lt;p&gt;参考にしたのは&lt;a href=&quot;https://www.youtube.com/watch?v=I_56X2rpHCs&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;です。僕は、面で描き始めたほうが描きやすかったです。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1217&quot; src=&quot;/_astro/02.DpiqOV7Q_ZCPS4b.webp&quot; srcset=&quot;/_astro/02.DpiqOV7Q_ZyjkfU.webp 640w, /_astro/02.DpiqOV7Q_ZrCMFw.webp 750w, /_astro/02.DpiqOV7Q_iIXip.webp 828w, /_astro/02.DpiqOV7Q_1yfmeR.webp 1080w, /_astro/02.DpiqOV7Q_Z1tw69F.webp 1280w, /_astro/02.DpiqOV7Q_2hvfcG.webp 1668w, /_astro/02.DpiqOV7Q_ZCPS4b.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;2枚目からのクロッキーと同じポーズを繰り返します。&lt;/p&gt;&lt;p&gt;途中、アクションラインから逸れて胸郭を描いてしまったので、リレーのバトンを待つポーズに変更。&lt;/p&gt;&lt;p&gt;そんなに骨盤を大きくしたつもりはありませんでしたが、安定感のある下半身に。もっと骨盤を狭くしないと華奢にならんのかあ。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1217&quot; src=&quot;/_astro/03.BgaDZfE3_Z1UvL1W.webp&quot; srcset=&quot;/_astro/03.BgaDZfE3_Z2oUr61.webp 640w, /_astro/03.BgaDZfE3_Z2ieTvC.webp 750w, /_astro/03.BgaDZfE3_Z1wR8wG.webp 828w, /_astro/03.BgaDZfE3_gzth6.webp 1080w, /_astro/03.BgaDZfE3_2j09Gu.webp 1280w, /_astro/03.BgaDZfE3_YPmeU.webp 1668w, /_astro/03.BgaDZfE3_Z1UvL1W.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はラフスケッチに取り組む予定でしたが、けっこう身に付いていないことが多かったので、ポーズのクロッキーをもう少し続けたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そのクロッキーで出来たポーズに対して、少しラフスケッチめいたものを描き加えて、ラフスケッチも練習したいと思います。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【イラスト】今日の練習成果（頭身の確認とクロッキー）_第1回</title><link>https://endorphinbath.com/posts/illust-training-001/</link><guid isPermaLink="true">https://endorphinbath.com/posts/illust-training-001/</guid><description>今日のイラストの練習成果です。頭身の確認とポーズをクロッキーしました。</description><pubDate>Sat, 28 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ現在、自分で作っているゆっくりゲーム実況動画で、こんな風に自分で描いた絵に喋らせているわけですが・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もっと、強い絵を描けるようになりたい！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;というわけで、これから少しイラストの練習をしていきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;たまに取り組んだ練習成果を、このブログにアップしていきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;では、記念すべき第1回に行きましょー&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;成果&lt;a href=&quot;#成果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、頭身の確認です。&lt;/p&gt;&lt;p&gt;参考にしたのは&lt;a href=&quot;https://www.youtube.com/watch?v=p9vDQ4SExNs&amp;amp;list=PLTY4AtphBe8NS7WFIMIhHIBJVk3xQvi-q&amp;amp;index=3&quot; target=&quot;_blank&quot;&gt;この動画&lt;/a&gt;です。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1157&quot; src=&quot;/_astro/01.DEbflweJ_16C70h.webp&quot; srcset=&quot;/_astro/01.DEbflweJ_QYVmX.webp 640w, /_astro/01.DEbflweJ_Z1y5o0F.webp 750w, /_astro/01.DEbflweJ_1KTnBk.webp 828w, /_astro/01.DEbflweJ_27lQBI.webp 1080w, /_astro/01.DEbflweJ_RYStk.webp 1280w, /_astro/01.DEbflweJ_2pSkPm.webp 1668w, /_astro/01.DEbflweJ_16C70h.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;頭身の確認の続きです。&lt;/p&gt;&lt;p&gt;色んな頭身でプロポーションのバランスを観察しています。足の簡易化も試したりして。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1166&quot; src=&quot;/_astro/02.BtBztJmx_Z1f6zsR.webp&quot; srcset=&quot;/_astro/02.BtBztJmx_ZyT77X.webp 640w, /_astro/02.BtBztJmx_ZrWpAq.webp 750w, /_astro/02.BtBztJmx_Z2d9LMm.webp 828w, /_astro/02.BtBztJmx_2oS1WI.webp 1080w, /_astro/02.BtBztJmx_1PAlzc.webp 1280w, /_astro/02.BtBztJmx_49Dmd.webp 1668w, /_astro/02.BtBztJmx_Z1f6zsR.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、ポーズをクロッキーする。&lt;/p&gt;&lt;p&gt;参考にした動画は、&lt;a href=&quot;https://www.youtube.com/watch?v=WnUgIHrxKqA&quot; target=&quot;_blank&quot;&gt;これ&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;女性をクロッキーしていますが、腕が太くなりがち。
太もももムッチリになりがち。これは骨盤がそもそも太いのが原因かもです。&lt;/p&gt;&lt;p&gt;描きたい人物のシルエットは骨盤でコントロールですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1700&quot; height=&quot;1201&quot; src=&quot;/_astro/03.k4SzlLLw_20hQqg.webp&quot; srcset=&quot;/_astro/03.k4SzlLLw_nQDqQ.webp 640w, /_astro/03.k4SzlLLw_Z22tPSV.webp 750w, /_astro/03.k4SzlLLw_Z1fEbaG.webp 828w, /_astro/03.k4SzlLLw_Z157BSY.webp 1080w, /_astro/03.k4SzlLLw_11ozMc.webp 1280w, /_astro/03.k4SzlLLw_Z1YvECv.webp 1668w, /_astro/03.k4SzlLLw_20hQqg.webp 1700w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;クロッキーばかりやるのは飽きるので、次は、ラフスケッチに進んでみよう。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2022年12月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202212/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202212/</guid><description>kinkingame24bitのYouTube等の更新状況になります。「【Satsifactory】未知の砂漠でゆっくり工業化」と「【Frostpunk】極寒の氷の世界で極限生活」のシリーズが更新されました。</description><pubDate>Sat, 07 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2022年12月に投稿した動画の一覧&lt;a href=&quot;#2022年12月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：31&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】原子力発電所と核爆弾製造に着手するでごわす | 未知の砂漠でゆっくり工業化 #31【ゆっくり実況】&lt;a href=&quot;#satisfactory原子力発電所と核爆弾製造に着手するでごわす--未知の砂漠でゆっくり工業化-31ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AWqqfTTkyD4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Hidden Folks】モノクロのウォーリーをさがせを開拓するでごわす | 徒然ゲーム開拓使 #01【ゆっくり実況】&lt;a href=&quot;#hidden-folksモノクロのウォーリーをさがせを開拓するでごわす--徒然ゲーム開拓使-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/txYtPg6VYuo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Papers, Please】入国審査官を体験するでごわす | 徒然ゲーム開拓使 #02【ゆっくり実況】&lt;a href=&quot;#papers-please入国審査官を体験するでごわす--徒然ゲーム開拓使-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/uf4nSw3H088/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】移住民は港島を作る #01【ゆっくり実況】&lt;a href=&quot;#patron移住民は港島を作る-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/79n8U7Bk_rA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】釣りをするために移住してきたのかもしれない | 移住民は港島を作る #02【ゆっくり実況】&lt;a href=&quot;#patron釣りをするために移住してきたのかもしれない--移住民は港島を作る-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/cPBJHbC9U24/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】断食をするために移住してきたのかもしれない | 移住民は港島を作る #03【ゆっくり実況】&lt;a href=&quot;#patron断食をするために移住してきたのかもしれない--移住民は港島を作る-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zNM4ZF7z6hQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】囚人だから移住してきたのかもしれない | 移住民は港島を作る #04【ゆっくり実況】&lt;a href=&quot;#patron囚人だから移住してきたのかもしれない--移住民は港島を作る-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zEC38RF09tg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】ヌーディストになるために移住してきたのかもしれない | 移住民は港島を作る #05【ゆっくり実況】&lt;a href=&quot;#patronヌーディストになるために移住してきたのかもしれない--移住民は港島を作る-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2-GPhskMGO0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】絶島のヘーパイストスと呼ばれるために移住してきたのかもしれない | 移住民は港島を作る #06【ゆっくり実況】&lt;a href=&quot;#patron絶島のヘーパイストスと呼ばれるために移住してきたのかもしれない--移住民は港島を作る-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/8vS34znCyT4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】衣服を着るために移住してきたのかもしれない | 移住民は港島を作る #07【ゆっくり実況】&lt;a href=&quot;#patron衣服を着るために移住してきたのかもしれない--移住民は港島を作る-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nEAV3nz7PbM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】竜巻を見るために移住してきたのかもしれない | 移住民は港島を作る #08【ゆっくり実況】&lt;a href=&quot;#patron竜巻を見るために移住してきたのかもしれない--移住民は港島を作る-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dr0sjJh7K2Y/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】鎖国をするために移住してきたのかもしれない | 移住民は港島を作る #09【ゆっくり実況】&lt;a href=&quot;#patron鎖国をするために移住してきたのかもしれない--移住民は港島を作る-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jkjo7J32TlI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】2年後にシャボンディ諸島で再開するために移住してきたのかもしれない | 移住民は港島を作る #10【ゆっくり実況】&lt;a href=&quot;#patron2年後にシャボンディ諸島で再開するために移住してきたのかもしれない--移住民は港島を作る-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5Ep9QlwGKh8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】通貨発行権を手に入れるために移住してきたのかもしれない | 移住民は港島を作る #11【ゆっくり実況】&lt;a href=&quot;#patron通貨発行権を手に入れるために移住してきたのかもしれない--移住民は港島を作る-11ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7TmjZRa7Vso/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】パトロンになるために移住してきたのかもしれない | 移住民は港島を作る #12【ゆっくり実況】&lt;a href=&quot;#patronパトロンになるために移住してきたのかもしれない--移住民は港島を作る-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KxN21wVlF9k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Patron】移住するために移住してきたのかもしれない | 移住民は港島を作る #13（完）【ゆっくり実況】&lt;a href=&quot;#patron移住するために移住してきたのかもしれない--移住民は港島を作る-13完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/7bz5K-CqslE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】極寒の氷の世界で極限生活 #01【ゆっくり実況】&lt;a href=&quot;#frostpunk極寒の氷の世界で極限生活-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/zRf3IMxNzAc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに捜索隊の派遣を開始する | 極寒の氷の世界で極限生活 #02【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに捜索隊の派遣を開始する--極寒の氷の世界で極限生活-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Fqzf9_LW6Rc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに子供達を技師見習いにする | 極寒の氷の世界で極限生活 #03【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに子供達を技師見習いにする--極寒の氷の世界で極限生活-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/IxJfSaC2spQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに諸作業を機械化する | 極寒の氷の世界で極限生活 #04【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに諸作業を機械化する--極寒の氷の世界で極限生活-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/EB_KDVnD5SE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに狩猟小屋を強化する | 極寒の氷の世界で極限生活 #05【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに狩猟小屋を強化する--極寒の氷の世界で極限生活-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/FLAVkPPrHqg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに石炭採鉱を開始する | 極寒の氷の世界で極限生活 #06【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに石炭採鉱を開始する--極寒の氷の世界で極限生活-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wwJAYIPtxzM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに礼拝堂で信仰を築く | 極寒の氷の世界で極限生活 #07【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに礼拝堂で信仰を築く--極寒の氷の世界で極限生活-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nysCKIgLvOM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに蒸気製鉄が始動する | 極寒の氷の世界で極限生活 #08【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに蒸気製鉄が始動する--極寒の氷の世界で極限生活-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Sy-RV8JFPqY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】未知の砂漠にもクリスマスがやってきたでごわす | 未知の砂漠でゆっくり工業化 #32【ゆっくり実況】&lt;a href=&quot;#satisfactory未知の砂漠にもクリスマスがやってきたでごわす--未知の砂漠でゆっくり工業化-32ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Ik8nYhfZEA8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】FICSMASも軌道エレベータ納品も完結でごわす | 未知の砂漠でゆっくり工業化 #33（完）【ゆっくり実況】&lt;a href=&quot;#satisfactoryficsmasも軌道エレベータ納品も完結でごわす--未知の砂漠でゆっくり工業化-33完ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dDcCkLIrNlI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに診療所と救護所が逼迫する | 極寒の氷の世界で極限生活 #09【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに診療所と救護所が逼迫する--極寒の氷の世界で極限生活-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/oDuTjKjUASw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに周辺住民の不満が膨張する | 極寒の氷の世界で極限生活 #10【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに周辺住民の不満が膨張する--極寒の氷の世界で極限生活-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/j0wq2yx1-Og/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに宿泊小屋は建てたくない | 極寒の氷の世界で極限生活 #11【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに宿泊小屋は建てたくない--極寒の氷の世界で極限生活-11ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SIDqPkHrEU0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに周辺住民とロンドン主義者が一致団結する | 極寒の氷の世界で極限生活 #12【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに周辺住民とロンドン主義者が一致団結する--極寒の氷の世界で極限生活-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/qaCWcPCUBVM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Frostpunk】エクストリームに前哨基地による蒸気核調達が始動する | 極寒の氷の世界で極限生活 #13【ゆっくり実況】&lt;a href=&quot;#frostpunkエクストリームに前哨基地による蒸気核調達が始動する--極寒の氷の世界で極限生活-13ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/12/31&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/H0xG-dyA0NU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は31本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年12月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202212/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202212/</guid><description>2022年12月に読んだ本になります。ドイツ文学の門を叩こうとしています。</description><pubDate>Fri, 06 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;12月の読書メーター&lt;a href=&quot;#12月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：5&lt;/li&gt;
&lt;li&gt;読んだページ数：1286&lt;/li&gt;
&lt;li&gt;ナイス数：2&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;神業の風景画 ホキ美術館コレクション の 感想&lt;a href=&quot;#神業の風景画-ホキ美術館コレクション-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;神業の風景画 ホキ美術館コレクション&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.DO5S1gBs_Z1JS9vM.webp&quot; srcset=&quot;/_astro/01.DO5S1gBs_Z1JS9vM.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;これを手で描いたのは凄い。最近のゲームよりもリアル。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：12月20日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E8%8A%B8%E8%A1%93%E6%96%B0%E8%81%9E%E7%A4%BE&quot; target=&quot;_blank&quot;&gt;芸術新聞社&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;世界でもっとも美しい装飾写本 の 感想&lt;a href=&quot;#世界でもっとも美しい装飾写本-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;世界でもっとも美しい装飾写本&quot; loading=&quot;lazy&quot; width=&quot;54&quot; height=&quot;75&quot; src=&quot;/_astro/02.C-7x_Tyd_2iKj8V.webp&quot; srcset=&quot;/_astro/02.C-7x_Tyd_2iKj8V.webp 54w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以降、自分用のメモです。ベアトゥスファクンデュス写本、教訓聖書、ブシコーの時書、周縁、動物寓話集、狩りの書、魚形留め金、マイスターE.S.の装飾イニシアル…などの写本があって、15世紀にグーテンベルクによる活版印刷の発明で全てが手による写本は終わりを迎えた。そう言われているが、その少し前から装飾写本の内部では絵画が存在感を増し、文字との調和が崩壊しかけていたらしい。エティエンヌ・シュヴァリエの時書でギリ。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：12月20日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E7%94%B0%E4%B8%AD+%E4%B9%85%E7%BE%8E%E5%AD%90&quot; target=&quot;_blank&quot;&gt;田中 久美子&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アーサー王伝説―7つの絵物語 の 感想&lt;a href=&quot;#アーサー王伝説7つの絵物語-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;アーサー王伝説―7つの絵物語&quot; loading=&quot;lazy&quot; width=&quot;55&quot; height=&quot;75&quot; src=&quot;/_astro/03.C9GZOblE_ZK0nFn.webp&quot; srcset=&quot;/_astro/03.C9GZOblE_ZK0nFn.webp 55w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;挿絵がそれなりの頻度で配置されていて読みやすかったです。前半に7つの物語本編が、後半にそれらの解説がされています。そこまでアーサー王関係に詳しくなくても読み進められると思います。アーサー王伝説入門編に向いている本だと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：12月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%AD%E3%82%B6%E3%83%AA%E3%83%B3%E3%83%89+%E3%82%AB%E3%83%BC%E3%83%B4%E3%82%A7%E3%83%B3&quot; target=&quot;_blank&quot;&gt;ロザリンド カーヴェン&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ハッカーと画家 コンピュータ時代の創造者たち の 感想&lt;a href=&quot;#ハッカーと画家-コンピュータ時代の創造者たち-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ハッカーと画家 コンピュータ時代の創造者たち&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/04.BOMj4Dl8_iBik6.webp&quot; srcset=&quot;/_astro/04.BOMj4Dl8_iBik6.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;創作活動が好きでオタク気質な人向けの本です。良いデザインは、単純で、集団で生起して、似通う。ヨーロッパのルネサンス期とか少し以前のシリコンバレーとか、絵画やITの飛躍的発展は一気に起きました。歴史上で卓越した創作物はどこか類似点があり、参考になり楽しかったです。僕はプログラムをたまに書きますが、本書のプログラミング言語の章でも初見の部分が多く、気付いたら読み終えてしまいました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：12月01日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%9D%E3%83%BC%E3%83%AB+%E3%82%B0%E3%83%AC%E3%82%A2%E3%83%A0&quot; target=&quot;_blank&quot;&gt;ポール グレアム&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ドイツ文学―名作と主人公 (明快案内シリーズ) の 感想&lt;a href=&quot;#ドイツ文学名作と主人公-明快案内シリーズ-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ドイツ文学―名作と主人公 (明快案内シリーズ)&quot; loading=&quot;lazy&quot; width=&quot;56&quot; height=&quot;75&quot; src=&quot;/_astro/05.DiBr9k2U_ZVD7bs.webp&quot; srcset=&quot;/_astro/05.DiBr9k2U_ZVD7bs.webp 56w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;中世の封建制度が根付いていた時代から、第二次対戦、東西ドイツ統合あたりまでの時代に描かれたドイツ文学作品の、粗筋（一部ネタバレあり）および各作者がいた時代背景を説明したものになっています。ニーベルンゲンの歌、ファウストあたりを読んでみようかな。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：12月01日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E4%BF%9D%E5%9D%82+%E4%B8%80%E5%A4%AB&quot; target=&quot;_blank&quot;&gt;保坂 一夫&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は5冊か、先月よりも読めたな。なんとか時間を作れました。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2022年11月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202211/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202211/</guid><description>kinkingame24bitのYouTube等の更新状況になります。「【Ghost of Tsushima】対馬に仇なす者共に鉄槌を」と「【Satisfactory】未知の砂漠でゆっくり工業化」のシリーズを更新中です。</description><pubDate>Sun, 04 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2022年11月に投稿した動画の一覧&lt;a href=&quot;#2022年11月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：30&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】志村の叔父上救出（後編） | 対馬に仇なす者共に鉄槌を #25【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima志村の叔父上救出後編--対馬に仇なす者共に鉄槌を-25ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ff9zNsP-WHQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】高効率施設進化（レベル3シフト）計画 | 未知の砂漠でゆっくり工業化 #15【ゆっくり実況】&lt;a href=&quot;#satisfactory高効率施設進化レベル3シフト計画--未知の砂漠でゆっくり工業化-15ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/02&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/W5d0tuf5Bxc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】石炭発電がバイオマスバーナーを亡き者にしました | 未知の砂漠でゆっくり工業化 #16【ゆっくり実況】&lt;a href=&quot;#satisfactory石炭発電がバイオマスバーナーを亡き者にしました--未知の砂漠でゆっくり工業化-16ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/V21c6ZWOByY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】Update 6の新マップや新武器などに関する報告書 | 未知の砂漠でゆっくり工業化 #17【ゆっくり実況】&lt;a href=&quot;#satisfactoryupdate-6の新マップや新武器などに関する報告書--未知の砂漠でゆっくり工業化-17ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/04&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XBJqLmWOjFc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】さらなる資源を求めて | 未知の砂漠でゆっくり工業化 #18【ゆっくり実況】&lt;a href=&quot;#satisfactoryさらなる資源を求めて--未知の砂漠でゆっくり工業化-18ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/N03Mu1RUBiM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】工場撮影に良いカメラModがあるでごわす。FicsIt-Camの使い方・方法を最短で紹介 | 未知の砂漠でゆっくり工業化 #19【ゆっくり解説】&lt;a href=&quot;#satisfactory工場撮影に良いカメラmodがあるでごわすficsit-camの使い方方法を最短で紹介--未知の砂漠でゆっくり工業化-19ゆっくり解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/1rOmQuJH3qY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ヘビーモジュラーフレームとコンピュータの製造機を設置するでごわす | 未知の砂漠でゆっくり工業化 #20【ゆっくり実況】&lt;a href=&quot;#satisfactoryヘビーモジュラーフレームとコンピュータの製造機を設置するでごわす--未知の砂漠でゆっくり工業化-20ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TsAtdSeKcJ8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】燃料発電の幕開けでごわす | 未知の砂漠でゆっくり工業化 #21【ゆっくり実況】&lt;a href=&quot;#satisfactory燃料発電の幕開けでごわす--未知の砂漠でゆっくり工業化-21ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/TAuezY1p_s8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】電車で物資を輸送するでごわす。タイムテーブルの設定方法を少し説明 | 未知の砂漠でゆっくり工業化 #22【ゆっくり実況】&lt;a href=&quot;#satisfactory電車で物資を輸送するでごわすタイムテーブルの設定方法を少し説明--未知の砂漠でゆっくり工業化-22ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/WKwbdxTxJhw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】軌道エレベータに納品したら、スパコンと水晶発振器を作るでごわす | 未知の砂漠でゆっくり工業化 #23【ゆっくり実況】&lt;a href=&quot;#satisfactory軌道エレベータに納品したらスパコンと水晶発振器を作るでごわす--未知の砂漠でゆっくり工業化-23ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/10&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Z-ElaoTnhJ4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ボーキサイトを求めて冒険って、韻を踏んでるでごわす | 未知の砂漠でゆっくり工業化 #24【ゆっくり実況】&lt;a href=&quot;#satisfactoryボーキサイトを求めて冒険って韻を踏んでるでごわす--未知の砂漠でゆっくり工業化-24ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lxE49_Lsx8k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】今までで最もカオスなレシピ、アルミ製品を製造するでごわす | 未知の砂漠でゆっくり工業化 #25【ゆっくり実況】&lt;a href=&quot;#satisfactory今までで最もカオスなレシピアルミ製品を製造するでごわす--未知の砂漠でゆっくり工業化-25ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/0LSqKLC1pm0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】バッテリードローンを配備するでごわす | 未知の砂漠でゆっくり工業化 #26【ゆっくり実況】&lt;a href=&quot;#satisfactoryバッテリードローンを配備するでごわす--未知の砂漠でゆっくり工業化-26ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/aFetqBP2g_0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】舞台は厳原から豊玉へ | 対馬に仇なす者共に鉄槌を #26【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima舞台は厳原から豊玉へ--対馬に仇なす者共に鉄槌を-26ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9fWrxZdUQrk/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】典雄と赤島の村に助太刀いたす | 対馬に仇なす者共に鉄槌を #27【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima典雄と赤島の村に助太刀いたす--対馬に仇なす者共に鉄槌を-27ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/DPYUxgqVlZQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】五郎の解文を届けるアシストをするぞよ | 対馬に仇なす者共に鉄槌を #28【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima五郎の解文を届けるアシストをするぞよ--対馬に仇なす者共に鉄槌を-28ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/Y7wvv4LXFhI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】鑓川に潜入してみよー | 対馬に仇なす者共に鉄槌を #29【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima鑓川に潜入してみよー--対馬に仇なす者共に鉄槌を-29ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/d8uH21pDzk0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】鑓川を解放いたす | 対馬に仇なす者共に鉄槌を #30【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima鑓川を解放いたす--対馬に仇なす者共に鉄槌を-30ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/J3Xyv0zSRGo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】安達政子ものがたり、再開 | 対馬に仇なす者共に鉄槌を #31【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima安達政子ものがたり再開--対馬に仇なす者共に鉄槌を-31ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/5FTqbAfu4pU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】境井家伝来の鎧を入手いたす | 対馬に仇なす者共に鉄槌を #32【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima境井家伝来の鎧を入手いたす--対馬に仇なす者共に鉄槌を-32ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/EYGPjTGQNDc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】安達政子ものがたり、再開その2 | 対馬に仇なす者共に鉄槌を #33【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima安達政子ものがたり再開その2--対馬に仇なす者共に鉄槌を-33ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/q55QTZN6sXQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】石川のおっちゃんの巴退治、再開 | 対馬に仇なす者共に鉄槌を #34【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima石川のおっちゃんの巴退治再開--対馬に仇なす者共に鉄槌を-34ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PI2iRTNKLz8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】三つの伝承を攻略すっぞ（吾作の鎧、憤怒の舞、小次郎の六本刀） | 対馬に仇なす者共に鉄槌を #35【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima三つの伝承を攻略すっぞ吾作の鎧憤怒の舞小次郎の六本刀--対馬に仇なす者共に鉄槌を-35ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/s07P1PQAF9k/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】メインストーリーの前に寄り道しまくってしまたよ | 対馬に仇なす者共に鉄槌を #36【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaメインストーリーの前に寄り道しまくってしまたよ--対馬に仇なす者共に鉄槌を-36ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lmlnytM6DG8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】志村の城を奪還（前編） | 対馬に仇なす者共に鉄槌を #37【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima志村の城を奪還前編--対馬に仇なす者共に鉄槌を-37ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/25&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/EOlm4z9RD9g/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】志村の城を奪還（後編） | 対馬に仇なす者共に鉄槌を #38【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima志村の城を奪還後編--対馬に仇なす者共に鉄槌を-38ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/jJphh3TX2jM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】間欠泉で地熱発電設備建設の旅に出るでごわす | 未知の砂漠でゆっくり工業化 #27【ゆっくり実況】&lt;a href=&quot;#satisfactory間欠泉で地熱発電設備建設の旅に出るでごわす--未知の砂漠でゆっくり工業化-27ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/9uERDG1aejI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】窒素ガスを資源井加圧機で掘り起こして、熱推進型ロケットを製造するでごわす | 未知の砂漠でゆっくり工業化 #28【ゆっくり実況】&lt;a href=&quot;#satisfactory窒素ガスを資源井加圧機で掘り起こして熱推進型ロケットを製造するでごわす--未知の砂漠でゆっくり工業化-28ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ZU8_knVmQcM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】採鉱機Mk.3を設置したり、ナメクジ探しに行くでごわす。マイルストーン完了 | 未知の砂漠でゆっくり工業化 #29【ゆっくり実況】&lt;a href=&quot;#satisfactory採鉱機mk3を設置したりナメクジ探しに行くでごわすマイルストーン完了--未知の砂漠でゆっくり工業化-29ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/PLpVF1Obr3Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】いよいよ粒子加速器で原子核パスタを作るでごわす | 未知の砂漠でゆっくり工業化 #30【ゆっくり実況】&lt;a href=&quot;#satisfactoryいよいよ粒子加速器で原子核パスタを作るでごわす--未知の砂漠でゆっくり工業化-30ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/11/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/RDdtEbtR5uA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は30本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】人気者になれないなら「ハッカー」になればいい。非凡なものを創造するためのアイディア：「ハッカーと画家」</title><link>https://endorphinbath.com/posts/book-hackers-and-painters/</link><guid isPermaLink="true">https://endorphinbath.com/posts/book-hackers-and-painters/</guid><description>ハッカーと画家という本を読んで、自分の嗜好やそれに合った行動の起こし方を振り返りました。筆者はYahooストアの前身を開発した方です。その本の内容を一部紹介します。</description><pubDate>Sat, 03 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、タイトルと表紙のイラストでつい買ってしまった本の書評を綴ります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あいよー&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;「ハッカーと画家」の冒頭&lt;a href=&quot;#ハッカーと画家の冒頭&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;「ハッカーと画家」カバー表紙&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;854&quot; src=&quot;/_astro/01.BDAlDaNi_Z1JTqCW.webp&quot; srcset=&quot;/_astro/01.BDAlDaNi_Z1JTqCW.webp 600w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;この「ハッカーと画家」は、著者：Paul Graham氏、監訳：川合史郎氏で執筆されています。&lt;/p&gt;&lt;p&gt;著者のPaul Graham氏は、こんな方です。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;ポール・グレアムは新しいArc言語の設計者である。彼は最初のウェブベースアプリケーションであるyahoo! Storeを作った。また、現在の多くのスパムフィルだに影響を与えたフィルタリング技術も開発した。ハーバード大学で計算機科学の博士号を取得しており、ロードアイランドデザイン学校(RISD)およびフィレンツェの美術学校で絵画を学んだ。&lt;/p&gt;&lt;p&gt;（カバー文より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;著者自身は、学生時代には「人気者」とは程遠かったらしいです。
例えば、人気の度合いでA〜Eまでランク分けした（Aはフットボールの選手とチアリーダー、Eは「知恵遅れ」と言われていた子たち）としたら自分はDクラスだったとか、子供は同じような人と友だちになるが自分の周りは「オタク」ばかりだったとか。&lt;/p&gt;&lt;p&gt;そういった学生生活を送っていたことを著者が語るところから、本書は始まります。
それに加えて、著者は淡々と以下のように述べています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;私の知り合いには学校時代にオタク(nerd)だった人がたくさんいるが、皆同じ話をする。賢いこととオタクであることの間には極めて強い相関があり、オタクであることと人気者であることの間にはもっと強い負の相関があるというものだ。賢いとむしろ不人気者になるみたいなんだ。&lt;/p&gt;&lt;p&gt;（7ページ「第1章 どうしてオタクはモテないか」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;これは、あくまでも「人気者はもれなくバカだ」という対偶を指しているわけではない。（と思います。）
不人気者サイドにいた人は、概ね「賢いとむしろ不人気者になる」という思考をするのだと思う。ちなみに、僕も不人気者サイドにいた人間なので、この考え方にはつい共感してしまいます。&lt;/p&gt;&lt;p&gt;じゃあ、「不人気な人っていうのは生まれつきなんだね〜」というかと言うと、それは違います。
本書では、以下のように述べられています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;例えばティーンの子供は服装にものすごく気を遣う。意識して人気者になるために服を選んでるわけじゃないだろう。ただ格好良くしていたいだけだ。でもそれは誰にとってだ？他の子供たちにだろう。他の子供たちの意見が、服装だけでなく歩き方から何からすべてについて、何が正しいかを規定する。だから、得ようとする努力にもなるんだ。&lt;/p&gt;&lt;p&gt;オタクにはこれが分からない。人気者になるには努力が必要だということに気付かないんだ。一般的に、大変な努力が必要な分野を外から見ている人には、成功するためにどれだけの絶え間ない頑張りが（しばしば無意識のうちに）必要かということが見えにくい。例えば絵を描く能力は、ちょうど背の高さみたいに天賦の資質だと思っている人は多いだろう。実際は「絵が描ける」人は描くことが好きで多くの時間をそれに費やしたんだ。だからうまく描けるんだ。同じように、人気者ということも天賦の資質ではない。人は努力して人気者になるんだ。&lt;/p&gt;&lt;p&gt;（9ページ「第1章 どうしてオタクはモテないか」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;人気者になる人は、「人気者になる」ことに時間を費やしたから人気者になっ。絵が描ける人も、「絵を描く」ことに時間を費やしたから絵が描けるようになった。&lt;/p&gt;&lt;p&gt;自分の好きなことに時間を注げば、それ相応の結果が得られる。一応そんな感じでしょうか。
「オタク」も自分の好きなことに時間を注いだ結果、体現する人種ということでしょう。&lt;/p&gt;&lt;p&gt;そして、「オタク」は、人気者になる人（他の子供たちと調和が取れる一般解を導き出す志向の人）とは、逆の存在であるように述べられています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;「ハッカー」とは？&lt;a href=&quot;#ハッカーとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本書で、「ハッカー」という存在は以下のように述べられています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;え、ハッカーだって？ それってコンピュータに侵入する連中のことじゃないの？ うん、外部の人にとっては、ハッカーという言葉はそういう意味だ。けれどコンピュータの世界では、優れたプログラマたちが、やはり優れたプログラマのことを指してハッカーと呼ぶんだ。&lt;/p&gt;&lt;p&gt;（vページ「はじめに」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;新しいアイディアが好きなら、この本は楽しめるんじゃないかと思う。ハッカーは見かけは野暮ったいことが多いけれど、その頭の中はびっくりするほど面白い場所なんだ。&lt;/p&gt;&lt;p&gt;（viiページ「はじめに」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;つまり、ハッカーとは、自分が思いついたことを表現するのが好きな優秀なプログラマのことを指しています。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ハッカーと大企業&lt;a href=&quot;#ハッカーと大企業&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;著者が開発したシステムが買収されたときのことが述べられています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;大学や研究所がハッカーに本当にやりたいことをやらせてくれないとしたら、企業に行くしかないのだろうか。残念ながら、多くの企業はやっぱりハッカーにやりたいことをやらせてはくれない。大学や研究所はハッカーに科学者たれと強要するが、企業はハッカーにエンジニアたれと強要するからだ。&lt;/p&gt;&lt;p&gt;私はこのことにはごく最近になるまで気付かなかった。ViawebがYahoo! に買収された時、彼らは私に何をやりたいか尋ねた。私はビジネスには全然興味がなかったので、ハックしたいんだと答えた。Yahoo! に入ってみたら、そこではハックするということはソフトウェアを実装するということで、デザインするということではないということが分かった。プログラマは、プロダクトマネージャのビジョンとかいったものをコードへと翻訳する技師とみなされていた。&lt;/p&gt;&lt;p&gt;どうも大企業ではそれが普通らしい。そういうふうにすれば、出力のばらつきを抑えることができるからだ。&lt;/p&gt;&lt;p&gt;（27ページ「第2章 ハッカーと画家」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;大企業では、「ハック」はほぼ行われないらしいです。理由は、本当に優秀なハッカーを沢山の社員の中から探し出すのが大変だからだそうです。そのため、委員会みたいなものを作って、その決定をソフトウェアに落とし込むプロセスを組まれているようです。&lt;/p&gt;&lt;p&gt;そのため、本書では「ハッカー」は大企業よりもベンチャー企業の方がその素養を活かせると述べられています。&lt;/p&gt;&lt;p&gt;これまでの様々な要素を図示すると、このようなイメージでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1280&quot; src=&quot;/_astro/02.BCNH8n55_wsin5.webp&quot; srcset=&quot;/_astro/02.BCNH8n55_Z1L1aeX.webp 640w, /_astro/02.BCNH8n55_Z1Kysyx.webp 750w, /_astro/02.BCNH8n55_Z1Ka0sH.webp 828w, /_astro/02.BCNH8n55_26IWII.webp 1080w, /_astro/02.BCNH8n55_wsin5.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ハッカーと画家&lt;a href=&quot;#ハッカーと画家&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本書にて、ハッカーと画家の深い共通点が述べられています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;そのイメージはどちらも正しくない。ハッキングと絵を描くことにはたくさんの共通点がある。実際、私が知っているあらゆる種類の人々のうちで、ハッカーと画家が一番よく似ている。&lt;/p&gt;&lt;p&gt;ハッカーと画家に共通することは、どちらもものを創る人間だということだ。作曲家や建築家や作家と同じように、ハッカーと画家がやろうとしているのは、良いものを創るということだ。良いものを作ろうとする過程で新しいテクニックを発見することがあり、それはそれで良いことだが、いわゆる研究活動とはちょっと違う。&lt;/p&gt;&lt;p&gt;（23ページ「第2章 ハッカーと画家」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;つまり、ハッキングとは、デザインすることと似ており、研究活動つまりエンジニアリングとは異なるということなのです。&lt;/p&gt;&lt;p&gt;そのため、ハッカーとエンジニアは違う人種ということになります。ここは個人的にハッとさせられました。僕自身は、最近までシステムエンジニアとして働いていましたが、現在は配信活動をしながら効率化出来る部分はプログラムを組んでいます。&lt;/p&gt;&lt;p&gt;僕は、エンジニアではなく「ハッカー」でした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設計・デザインのコツ&lt;a href=&quot;#設計デザインのコツ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、ハッキングのコツが紹介されていきます。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;絵画の例からひとつ学べること、少なくとも確認できることは、ハッキングをどうやって学んだらよいかということだ。&lt;/p&gt;&lt;p&gt;絵を描くことは、絵を書きながら学ぶ。ハッキングも同じだ。&lt;/p&gt;&lt;p&gt;画家は作品を足跡として残してゆくから、彼らが絵を描きながら学んでゆく様子をうかがい知ることができる。&lt;/p&gt;&lt;p&gt;ハッカーもたぶん、画家と同じように振る舞うのがいいんじゃないかと思う。ひとつのプロジェクトを何年も続けて、新しいアイディアを新バージョンとして取り込むのではなしに、時々はゼロから始めてみるんだ。&lt;/p&gt;&lt;p&gt;（30ページ「第2章 ハッカーと画家」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;描きたい絵があるから絵を描く。ハッキングしたいことがあるからハッキングする。
そうやって、ハッキングに取り組んでいって、時には先人が創ったプロジェクトのソースやイシューを見て、自分のこれからのハッキングに取り入れていく。GitHubの有り難みがとても染みます。&lt;/p&gt;&lt;p&gt;ハッカーは、色々なプロジェクトを見聞きしてセンスを磨くべきなのです。&lt;/p&gt;&lt;p&gt;ハッキングのコツがもうひとつ紹介されています。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;絵画から学べるもうひとつの例は、次第に詳細化しながら創ってゆく方法だ。絵画はたいてい、スケッチから始まる。そして次第に細かい部分が埋められてゆく。だがそれは、単に隙間を埋めてゆくだけの過程ではない。ときには元の計画が間違いだったことが分かることもある。X線で見てみると、手や足の位置が変更されていたらい、表情が変えられたりしている絵画は数え切れないくらいある。&lt;/p&gt;&lt;p&gt;（31ページ「第2章 ハッカーと画家」より）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;ハッキングおよびプログラミングする際には、概要→詳細と設計を詰めていくのが基本です。この基本の流れは絵画にも通じるものがあり、絵画も、ラフスケッチ→線画→着彩という流れでデザインしていくのが主流かと思います。ハッキングと絵画の共通点がここにもあったのです。&lt;/p&gt;&lt;p&gt;そして、その設計・デザインは、その都度修正していくのは当たり前であることも述べられています。プログラミングする上で、アジャイル開発をするのが当然の工程と言えるわけです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、「ハッカーと画家」を読んだ僕なりのまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;創作活動に対して、オタク気質な人は個人的に取り組み、そうではない人は組織的に意思決定しながら取り組む方式で分かれがちである。「ハッカー」はほぼ前者である。&lt;/li&gt;
&lt;li&gt;ハッキング、絵画や楽曲などの創作活動に取り組むにあたって、ラフに全体像を描いてから詳細部分を詰めていく方式が最も成果を得やすい。先人の著名なオタクもそうしている例がほとんどである。&lt;/li&gt;
&lt;li&gt;人気者になるか、オタクになるか。この結果は、その人の嗜好によることが大きい。&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/48oDKJp&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ハッカーと画家 コンピュータ時代の創造者たち&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/48oDKJp&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自分の嗜好に合った言動、手段を日々模索していきましょう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;人気者になれないなら、ハッカーになってもいい&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年11月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202211/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202211/</guid><description>2022年11月に読んだ本になります。YouTubeで読書する時間が全然取れなかった・・・</description><pubDate>Thu, 01 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;11月の読書メーター&lt;a href=&quot;#11月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：0&lt;/li&gt;
&lt;li&gt;読んだページ数：0&lt;/li&gt;
&lt;li&gt;ナイス数：0&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は0冊じゃないか！ YouTubeの毎日投稿で読んでる時間がなかったか・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年10月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202210/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202210/</guid><description>2022年10月に読んだ本になります。YouTubeやってたら読書に時間を割けなかった・・・</description><pubDate>Fri, 04 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;10月の読書メーター&lt;a href=&quot;#10月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：1&lt;/li&gt;
&lt;li&gt;読んだページ数：198&lt;/li&gt;
&lt;li&gt;ナイス数：3&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;世界一シンプルで科学的に証明された究極の食事 の 感想&lt;a href=&quot;#世界一シンプルで科学的に証明された究極の食事-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;世界一シンプルで科学的に証明された究極の食事&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/01.D8I63aU2_Z2kliIb.webp&quot; srcset=&quot;/_astro/01.D8I63aU2_Z2kliIb.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;どういった食品が健康リスクがあるかどうかを解説した本になります。また、そういった健康に関する情報の取捨選択の仕方や調べ方も紹介してくれています。つまり、魚だけでなく魚の釣り方も教えてくれる健康本になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：10月28日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E6%B4%A5%E5%B7%9D+%E5%8F%8B%E4%BB%8B&quot; target=&quot;_blank&quot;&gt;津川 友介&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、1冊でした。YouTubeに時間を割き過ぎた・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2022年10月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202210/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202210/</guid><description>kinkingame24bitのYouTube等の更新状況になります。「【Ghost of Tsushima】対馬に仇なす者共に鉄槌を」と「【Satisfactory】未知の砂漠でゆっくり工業化」のシリーズを更新中です。</description><pubDate>Thu, 03 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2022年10月に投稿した動画の一覧&lt;a href=&quot;#2022年10月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：23&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】道場奪還也 | 対馬に仇なす者共に鉄槌を #08【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima道場奪還也--対馬に仇なす者共に鉄槌を-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/01&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/c-R3WzwXv48/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】天照大神を己が身に宿す | 対馬に仇なす者共に鉄槌を #10【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima天照大神を己が身に宿す--対馬に仇なす者共に鉄槌を-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/03&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/6iI_kUd6BIw/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】雷ってめっちゃ疾えんだよ | 対馬に仇なす者共に鉄槌を #12【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima雷ってめっちゃ疾えんだよ--対馬に仇なす者共に鉄槌を-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/05&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/dV8QYuwBRW8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】未知の砂漠でゆっくり工業化 #01【ゆっくり実況】&lt;a href=&quot;#satisfactory未知の砂漠でゆっくり工業化-01ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/06&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GOvJhLmDiXc/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】土台を敷きまくろう | 未知の砂漠でゆっくり工業化 #02【ゆっくり実況】&lt;a href=&quot;#satisfactory土台を敷きまくろう--未知の砂漠でゆっくり工業化-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/07&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/fSHl37-LNuE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】工場研修動画：前編 | 未知の砂漠でゆっくり工業化 #03【ゆっくり実況】&lt;a href=&quot;#satisfactory工場研修動画前編--未知の砂漠でゆっくり工業化-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/08&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/DmyvZMo9mfU/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】草木と岩石を刈りまくろう | 未知の砂漠でゆっくり工業化 #06【ゆっくり実況】&lt;a href=&quot;#satisfactory草木と岩石を刈りまくろう--未知の砂漠でゆっくり工業化-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/11&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/H4t4UlEEZL4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】こんなに早くネジの代替レシピが来るなんて | 未知の砂漠でゆっくり工業化 #07【ゆっくり実況】&lt;a href=&quot;#satisfactoryこんなに早くネジの代替レシピが来るなんて--未知の砂漠でゆっくり工業化-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/12&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/lBauY_7G2C8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】はっちぃのは嫌いです | 未知の砂漠でゆっくり工業化 #08【ゆっくり実況】&lt;a href=&quot;#satisfactoryはっちぃのは嫌いです--未知の砂漠でゆっくり工業化-08ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/13&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/NuIvQiYWmwg/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】クモいやつは嫌いです | 未知の砂漠でゆっくり工業化 #09【ゆっくり実況】&lt;a href=&quot;#satisfactoryクモいやつは嫌いです--未知の砂漠でゆっくり工業化-09ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/14&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/vvkN9mfBQtY/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】強いブタは嫌いです | 未知の砂漠でゆっくり工業化 #10【ゆっくり実況】&lt;a href=&quot;#satisfactory強いブタは嫌いです--未知の砂漠でゆっくり工業化-10ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/15&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/nFDdB9XNMwE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】てめーらはおれを怒らせた | 未知の砂漠でゆっくり工業化 #11【ゆっくり実況】&lt;a href=&quot;#satisfactoryてめーらはおれを怒らせた--未知の砂漠でゆっくり工業化-11ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/16&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/KeHP7H1J5iM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】ウラン鉱床を発見です | 未知の砂漠でゆっくり工業化 #12【ゆっくり実況】&lt;a href=&quot;#satisfactoryウラン鉱床を発見です--未知の砂漠でゆっくり工業化-12ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/17&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/xIjvhQZENL8/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Satisfactory】疾きことハイパーチューブの如し | 未知の砂漠でゆっくり工業化 #14【ゆっくり実況】&lt;a href=&quot;#satisfactory疾きことハイパーチューブの如し--未知の砂漠でゆっくり工業化-14ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/19&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kNSHTSL70ac/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】てつはうが見つかりましぇん | 対馬に仇なす者共に鉄槌を #13【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaてつはうが見つかりましぇん--対馬に仇なす者共に鉄槌を-13ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/20&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/76k2uuV8SYQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】熊と再戦 | 対馬に仇なす者共に鉄槌を #14【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima熊と再戦--対馬に仇なす者共に鉄槌を-14ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/21&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/UitbGgeIxX0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】海龍之翼をげとおおお | 対馬に仇なす者共に鉄槌を #15【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima海龍之翼をげとおおお--対馬に仇なす者共に鉄槌を-15ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/22&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/2GIMgJdOMFI/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】小川道場でたくさんアイテムを見つけたでごわす | 対馬に仇なす者共に鉄槌を #16【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima小川道場でたくさんアイテムを見つけたでごわす--対馬に仇なす者共に鉄槌を-16ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/23&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/kEzVcjf7SR4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】稲荷の護符をげと | 対馬に仇なす者共に鉄槌を #17【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima稲荷の護符をげと--対馬に仇なす者共に鉄槌を-17ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/24&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/bOBckWsxTcA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】菅笠衆の竜三と対面 | 対馬に仇なす者共に鉄槌を #20【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima菅笠衆の竜三と対面--対馬に仇なす者共に鉄槌を-20ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/ecUUWlE1zpM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】浅藻浦と小松の鍛冶場を奪還 | 対馬に仇なす者共に鉄槌を #21【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima浅藻浦と小松の鍛冶場を奪還--対馬に仇なす者共に鉄槌を-21ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/M-unSpxqJL4/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】菅笠衆の食料調達のお手伝い | 対馬に仇なす者共に鉄槌を #22【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima菅笠衆の食料調達のお手伝い--対馬に仇なす者共に鉄槌を-22ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/SaGQhOhL8_M/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】鉤縄を使って菅笠衆を救出 | 対馬に仇なす者共に鉄槌を #23【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima鉤縄を使って菅笠衆を救出--対馬に仇なす者共に鉄槌を-23ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/10/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/JYVZBKTYySE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は23本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】ゲームを進める上ではじめに優先的に行っておくべきこと7選</title><link>https://endorphinbath.com/posts/satisfactory-something-to-prioritize/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-something-to-prioritize/</guid><description>Satisfactoryを進める上で優先的に取り組んでおいたほうが良いことを紹介します。自分の工場を効率的に自動化していきましょう。</description><pubDate>Sat, 22 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;みなさま、工業自動化ゲーム「Satisfactory」は楽しんでいるじゃろうか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;つい、寝食を忘れて、のめり込んでしまうよね&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;工業自動化と言うと、最初に何から手を付けて良いのかわからないこともあるかと思う。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこで今回は、Satisfactoryで序盤から中盤にかけて優先的に行っておくべきことを紹介するぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まとめたよー！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;優先的に行っておくべきこと&lt;a href=&quot;#優先的に行っておくべきこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Satisfactoryを始めて最初の方は、
「何から手を付けて良いものやら・・・」
&lt;img loading=&quot;lazy&quot; width=&quot;2107&quot; height=&quot;1179&quot; src=&quot;/_astro/01.f6_MVVE3_Z10lozz.webp&quot; srcset=&quot;/_astro/01.f6_MVVE3_Zygxax.webp 640w, /_astro/01.f6_MVVE3_Zp4s2f.webp 750w, /_astro/01.f6_MVVE3_Z289vB0.webp 828w, /_astro/01.f6_MVVE3_Z1jakVk.webp 1080w, /_astro/01.f6_MVVE3_Z29Xmvs.webp 1280w, /_astro/01.f6_MVVE3_Z18HcDb.webp 1668w, /_astro/01.f6_MVVE3_1j1xqA.webp 2048w, /_astro/01.f6_MVVE3_Z10lozz.webp 2107w&quot; /&gt;&lt;/p&gt;&lt;p&gt;という状態だと思います。&lt;/p&gt;&lt;p&gt;そこで、Satisfactoryを進めていくに当たって、「優先的に行うべきこと」と題して、以下にその事柄を紹介いたします。今回紹介することをリスト化するとこんな感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;電力の元となる、草木と生物の死骸を集める&lt;/li&gt;
&lt;li&gt;生産ラインのテンプレートを覚える&lt;/li&gt;
&lt;li&gt;かなり広めに土台を作る&lt;/li&gt;
&lt;li&gt;ゼノ・バッシャー（Xeno-Basher）とブレード・ランナー（Blade Runners）を作る&lt;/li&gt;
&lt;li&gt;探索する時は電線を伸ばしながら進む&lt;/li&gt;
&lt;li&gt;ベルトコンベアのレベルを上げる&lt;/li&gt;
&lt;li&gt;高効率な発電施設を優先的に作る&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;その1：電力の元となる、草木と生物の死骸を集める&lt;a href=&quot;#その1電力の元となる草木と生物の死骸を集める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、工場を動かしていく上で「電力」は最も大事な要素になります。
電力が生産ラインに対して足りていなければ、いくら生産ラインを増築しても意味がありません。&lt;/p&gt;&lt;p&gt;そして、序盤で電力を供給するために必要なのが、「草」と「木」です。
これらが落ちていたら、すかさず拾いましょう。基本的に、歩きで移動中の時は「E」ボタンを連打です。&lt;/p&gt;&lt;p&gt;また、Tier2の時にチェーンソーを作れるようになるので、その時はすかさず作りましょう。草木の収集効率がグーンと上がります。
&lt;img loading=&quot;lazy&quot; width=&quot;2103&quot; height=&quot;1180&quot; src=&quot;/_astro/02.cd9O7Z5I_1LHMLD.webp&quot; srcset=&quot;/_astro/02.cd9O7Z5I_Z11oRLC.webp 640w, /_astro/02.cd9O7Z5I_ZRcMDk.webp 750w, /_astro/02.cd9O7Z5I_Z3fOhT.webp 828w, /_astro/02.cd9O7Z5I_29epVv.webp 1080w, /_astro/02.cd9O7Z5I_1iqomn.webp 1280w, /_astro/02.cd9O7Z5I_ZfrLiH.webp 1668w, /_astro/02.cd9O7Z5I_2cgXL4.webp 2048w, /_astro/02.cd9O7Z5I_1LHMLD.webp 2103w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それから、草木と生物の死骸からは「バイオマス」を生産することが出来ます。
この「バイオマス」は、草木や花よりも燃料の消費量が少ないです。そのため、バイオマスに切り替えることで、バイオマスバーナーに燃料を詰める回数を減らすことが出来ます。
このバイオマスは、草木や生物の死骸を原料にして作ることが出来ます。生物の死骸は、周りをうろつくと出現する敵性生物を倒すと手に入ります。その生物の死骸からプロテインを作り、プロテインからバイオマスを作るのです。&lt;/p&gt;&lt;p&gt;さらに、そのバイオマスから「固形燃料」というものを生産することが出来ます。
一旦、バイオマスバーナーによる発電は、この「固形燃料」で行うところまでを目標に取り組んでみて下さい。ちなみに、この固形燃料はチェーンソーを使うための燃料にもなりますので、生産体制を速く確立させましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;2099&quot; height=&quot;1178&quot; src=&quot;/_astro/03.ByfPi0f4_l6atY.webp&quot; srcset=&quot;/_astro/03.ByfPi0f4_ZkgJ8J.webp 640w, /_astro/03.ByfPi0f4_Zb4E0r.webp 750w, /_astro/03.ByfPi0f4_CRjkY.webp 828w, /_astro/03.ByfPi0f4_Z1QBTnI.webp 1080w, /_astro/03.ByfPi0f4_2mLcQ5.webp 1280w, /_astro/03.ByfPi0f4_NS2b0.webp 1668w, /_astro/03.ByfPi0f4_Z1Nzlya.webp 2048w, /_astro/03.ByfPi0f4_l6atY.webp 2099w&quot; /&gt;&lt;/p&gt;&lt;p&gt;石炭発電・石油発電が利用できるようになるまでの辛抱です。頑張りましょう・・・&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：生産ラインのテンプレートを覚える&lt;a href=&quot;#その2生産ラインのテンプレートを覚える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;生産ラインの作り方には、ある程度の型があります。
この型を覚えて生産ラインを作ることで、後で増築しやすく生産キャパシティを確認しやすいラインになります。
生産ラインの型は、以下のようなイメージです。
&lt;img loading=&quot;lazy&quot; width=&quot;2430&quot; height=&quot;1620&quot; src=&quot;/_astro/04.CtopkatC_WGwes.webp&quot; srcset=&quot;/_astro/04.CtopkatC_R6FCR.webp 640w, /_astro/04.CtopkatC_Ybs8Y.webp 750w, /_astro/04.CtopkatC_ZKRO4n.webp 828w, /_astro/04.CtopkatC_2n6rw2.webp 1080w, /_astro/04.CtopkatC_1W1OG5.webp 1280w, /_astro/04.CtopkatC_175wk7.webp 1668w, /_astro/04.CtopkatC_Z21hWDE.webp 2048w, /_astro/04.CtopkatC_WGwes.webp 2430w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように生産ラインを作ることで、材料の量が増える場合は左に生産ラインを増やし、現在動いている生産ラインの効率を確認することが出来ます。
基本的にコンベア分岐機（Splitter）は、物資をベルトコンベアが放出されている複数方向に対して、均等な確率で分配します。
そして、右のラインへの材料の上限に達したら、左の方にだけ物資が流れていくというわけです。
手前がコンベア合流機（Merger）、その1つ奥がコンベア分岐機（Splitter）、そのもう1つ奥が生産設備（製作機：Constructor）になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2105&quot; height=&quot;1178&quot; src=&quot;/_astro/05.Bmr6xfFT_1OQYGk.webp&quot; srcset=&quot;/_astro/05.Bmr6xfFT_ZHK3xz.webp 640w, /_astro/05.Bmr6xfFT_ZyxXph.webp 750w, /_astro/05.Bmr6xfFT_Z2hD1Y2.webp 828w, /_astro/05.Bmr6xfFT_Z12X8Op.webp 1080w, /_astro/05.Bmr6xfFT_Z1SLaox.webp 1280w, /_astro/05.Bmr6xfFT_ZRv0wg.webp 1668w, /_astro/05.Bmr6xfFT_1zdJxv.webp 2048w, /_astro/05.Bmr6xfFT_1OQYGk.webp 2105w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この並べ方は最初の方は効率が悪いですが、スッキリしたラインになるので、長期的なメンテナンス面でのメリットが大きいです。
組立機や製造機など複数の材料が必要な場合は、コンベア分岐機の高さを変えたりして見やすくしても良いかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2105&quot; height=&quot;1177&quot; src=&quot;/_astro/06.Bu3M6AFA_xH5ba.webp&quot; srcset=&quot;/_astro/06.Bu3M6AFA_ZljUj1.webp 640w, /_astro/06.Bu3M6AFA_ZaEVqp.webp 750w, /_astro/06.Bu3M6AFA_Z1UcSJt.webp 828w, /_astro/06.Bu3M6AFA_aTJV0.webp 1080w, /_astro/06.Bu3M6AFA_ZESgD8.webp 1280w, /_astro/06.Bu3M6AFA_lmSe9.webp 1668w, /_astro/06.Bu3M6AFA_i3P2l.webp 2048w, /_astro/06.Bu3M6AFA_xH5ba.webp 2105w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：かなり広めに土台を作る&lt;a href=&quot;#その3かなり広めに土台を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;土台（Foundation）が作れるようになったら、すぐさま土台の敷設に取り掛かりましょう。&lt;/p&gt;&lt;p&gt;土台の上に生産ラインを作ることで、地面に直接置くよりも数段キレイな生産ラインになります。
そのため、土台が作れない内は、「その2：生産ラインのテンプレートを覚える」の要領で暫定的な生産ラインを建設して、土台を作れるようになったら本ラインを建設しましょう。
土台が作れるようになるのは、Tier1のマイルストーンをクリアした以降になります。&lt;/p&gt;&lt;p&gt;そして、生産ラインがグチャグチャになる原因の最たるものは、スペース不足によるものです。
そのため、生産ライン用のスペースはかなり大きく取りましょう。
将来を見据えて、製作機 → 組立機（製作機×2の幅） → 製造機（製作機×4の幅）のスペースとプラス0.5倍のスペースは最低限作っておきましょう。
そして、その土台を作るために、大量のコンクリートと鉄板が必要になりますので、優先的にそれらの材料は作っておきましょう。（土台敷設のために、コンクリートが10,000個、鉄板が4,000個を目指しましょう。）
&lt;img loading=&quot;lazy&quot; width=&quot;2105&quot; height=&quot;1183&quot; src=&quot;/_astro/07.C0-L08TJ_Z1nJeN2.webp&quot; srcset=&quot;/_astro/07.C0-L08TJ_ZoROVg.webp 640w, /_astro/07.C0-L08TJ_ZedQ3E.webp 750w, /_astro/07.C0-L08TJ_zI7hL.webp 828w, /_astro/07.C0-L08TJ_ZWfdJK.webp 1080w, /_astro/07.C0-L08TJ_Z1N3fjS.webp 1280w, /_astro/07.C0-L08TJ_1IfHNX.webp 1668w, /_astro/07.C0-L08TJ_Z1DntVQ.webp 2048w, /_astro/07.C0-L08TJ_Z1nJeN2.webp 2105w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：ゼノ・バッシャー（Xeno-Basher）とブレード・ランナー（Blade Runners）を作る&lt;a href=&quot;#その4ゼノバッシャーxeno-basherとブレードランナーblade-runnersを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この2つの装備品は、優先的に作ったほうが良いです。
探索の効率が絶対的に向上します。&lt;/p&gt;&lt;p&gt;ゼノ・バッシャー（Xeno-Basher）は、敵性生物を倒すのに必要な攻撃の回数が減ります。つまり、自分の攻撃力が上がるのです。およそ2倍になります。
ゲーム中の近接武器は、デフォルト装備のゼノ・ザッパー（Xeno-Zapper）とゼノ・バッシャー（Xeno-Basher）しかないので、このゼノ・バッシャーが最強装備ということになります。
その最強装備を作って、敵性生物と闘う時間をなるべく減らしましょう。
ゼノ・バッシャー（Xeno-Basher）は、Tier4のマイルストーンをクリアして解放して、モジュラーフレーム、ゼノ・ザッパー、ケーブルおよびワイヤーの4点を使用して作成することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1624&quot; height=&quot;1018&quot; src=&quot;/_astro/08.B3pw1ypI_Zd13xM.webp&quot; srcset=&quot;/_astro/08.B3pw1ypI_1U5AqI.webp 640w, /_astro/08.B3pw1ypI_Z2jfbLa.webp 750w, /_astro/08.B3pw1ypI_Z2cJXJV.webp 828w, /_astro/08.B3pw1ypI_11nwvO.webp 1080w, /_astro/08.B3pw1ypI_1OMrSA.webp 1280w, /_astro/08.B3pw1ypI_Zd13xM.webp 1624w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ブレード・ランナー（Blade Runners）は、移動の速さが劇的に向上する装備品です。およそ2倍くらいの移動速度になります。
Tier4のハイパーチューブが作れるようになるまで基本的に移動は徒歩のみになるので、Hubや生産ラインに戻るまでの時間を減らすことが出来ます。
ブレード・ランナー（Blade Runners）は、石英の研究を進めて解放して、シリカ、モジュラーフレームおよびローターを使用して作成することが出来ます。&lt;/p&gt;&lt;p&gt;この2つの装備を速く作成して、工場を拡大させるスピードを上げましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1032&quot; height=&quot;864&quot; src=&quot;/_astro/09.DIZdSV_3_Zumvbs.webp&quot; srcset=&quot;/_astro/09.DIZdSV_3_ZAjgtq.webp 640w, /_astro/09.DIZdSV_3_ZGbkef.webp 750w, /_astro/09.DIZdSV_3_zN0K0.webp 828w, /_astro/09.DIZdSV_3_Zumvbs.webp 1032w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その5：探索する時は電線を伸ばしながら進む&lt;a href=&quot;#その5探索する時は電線を伸ばしながら進む&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;探索を開始する時、序盤はHubから始めるかと思います。
そして、探索を進めていく時に、Hubにある電柱から電線を伸ばしながら進んでいきましょう。
理由としては2つあって、「敵性生物がリスポーンするのを防ぐため」と「Hubに戻りやすくするため」です。
1つ目の理由の「敵性生物がリスポーンするのを防ぐため」ですが、敵性生物は、倒された後その地点の周囲に何も施設が建造されていないと、何日か経過したときに復活してしまいます。
そのため、その現象を防ぐために土台とかを置いてもよいのですが、どうせなら電柱と電線を置いてリスポーンしないようにしてしまいましょう。
2つ目の理由の「Hubに戻りやすくするため」ですが、序盤の方は地図があまり開拓されていないので、帰る途中に道を間違えたり、敵と戦闘したりして元々来た道を逸れてしまうと、Hubに帰るのが大変になってしまうかもしれません。
そのため、元々来た道に電線が伸びていると、それを辿って安全に確実にHubに帰ることが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;2106&quot; height=&quot;1170&quot; src=&quot;/_astro/10.BVuDpzIL_Z1DNfLt.webp&quot; srcset=&quot;/_astro/10.BVuDpzIL_1i4aa1.webp 640w, /_astro/10.BVuDpzIL_1sI92C.webp 750w, /_astro/10.BVuDpzIL_2gliCj.webp 828w, /_astro/10.BVuDpzIL_pgBLs.webp 1080w, /_astro/10.BVuDpzIL_28BUJG.webp 1280w, /_astro/10.BVuDpzIL_Z1b8eaj.webp 1668w, /_astro/10.BVuDpzIL_1kH3bf.webp 2048w, /_astro/10.BVuDpzIL_Z1DNfLt.webp 2106w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その6：ベルトコンベアのレベルを上げる&lt;a href=&quot;#その6ベルトコンベアのレベルを上げる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「その2：生産ラインのテンプレートを覚える」でテンプレートを紹介しましたが、実はこのテンプレートのままで生産していると序盤の内はあまり効率よく生産ができません。
なぜかと言うと、序盤はベルトコンベアの運搬効率が低いため、複数の鉱床からの資源を1本のベルトコンベアで運ぶと、それらの鉱床のリソースをフル活用できないのです。
そのため、上位レベルのベルトコンベアを解放できるマイルストーンが出現したら、そのマイルストーンを優先的に完了させるようにしましょう。&lt;/p&gt;&lt;p&gt;僕は、別のコンベアのラインを作って即興で繋いだりもしていますね・・・。ベルトコンベアのレベルが上がったら直しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2100&quot; height=&quot;1176&quot; src=&quot;/_astro/11.asrFAKMH_BlKUG.webp&quot; srcset=&quot;/_astro/11.asrFAKMH_2vPIBP.webp 640w, /_astro/11.asrFAKMH_Z2p9k3N.webp 750w, /_astro/11.asrFAKMH_Z1AclHn.webp 828w, /_astro/11.asrFAKMH_aMfmb.webp 1080w, /_astro/11.asrFAKMH_ZF0LcW.webp 1280w, /_astro/11.asrFAKMH_lfnEk.webp 1668w, /_astro/11.asrFAKMH_Z2hd04P.webp 2048w, /_astro/11.asrFAKMH_BlKUG.webp 2100w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その7：高効率な発電施設を優先的に作る&lt;a href=&quot;#その7高効率な発電施設を優先的に作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「その1：電力の元となる、草木と生物の死骸を集める」で、定期的に燃料を充填しなければならない発電施設を利用していましたが、そのような発電方法からはいち早くオサラバしたいものです。
そのためには、高効率な発電施設である、石炭発電機（Coal Generator）と燃料式発電機（Fuel Generator）が解放されたらすかさず利用しましょう。
それらの発電に必要な、石炭、石油を見つけたら、物資の生産よりも発電施設を優先的に作るのをおすすめします。石油製品に関しては、燃料を作った残り香である「廃重油」からも作ることが出来ますので、そのレシピで作ることを推奨します。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は以上になります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ゼノ・バッシャー（Xeno-Basher）とブレード・ランナー（Blade Runners）、急ごう！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この記事とは別に、資源の場所をまとめた記事もあるのでよければご参考ください。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（石英）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、石英を入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220314_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item3/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（硫黄）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、硫黄を入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220316_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item4/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（窒素ガス）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、窒素ガスを入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220317_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item1/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（ウラン、SAM）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、ウラン、SAMを入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220302_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【YouTubeなど】動画の更新状況_2022年9月</title><link>https://endorphinbath.com/posts/kinkingame24bit-youtube-202209/</link><guid isPermaLink="true">https://endorphinbath.com/posts/kinkingame24bit-youtube-202209/</guid><description>kinkingame24bitのYouTube等の更新状況になります。「【Ghost of Tsushima】対馬に仇なす者共に鉄槌を」と「【Satisfactory】未知の砂漠でゆっくり工業化」のシリーズを更新中です。</description><pubDate>Sat, 08 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月の動画の更新状況です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何を上げたのかなあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9月に投稿した動画の一覧&lt;a href=&quot;#9月に投稿した動画の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;投稿した動画の数：7&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】対馬に仇なす者共に鉄槌を #01【VOICEVOX・ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima対馬に仇なす者共に鉄槌を-01voicevoxゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/09&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/X1RxNijA7I0/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】ゲーム中に桃太郎を話すのやめてもらっていいですか | 対馬に仇なす者共に鉄槌を #02【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushimaゲーム中に桃太郎を話すのやめてもらっていいですか--対馬に仇なす者共に鉄槌を-02ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/18&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/AiSlxYc1reA/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】叔父上、只今参ります | 対馬に仇なす者共に鉄槌を #03【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima叔父上只今参ります--対馬に仇なす者共に鉄槌を-03ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/26&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/8AASvTfDX9Q/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】敗北、そして・・・ | 対馬に仇なす者共に鉄槌を #04【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima敗北そして--対馬に仇なす者共に鉄槌を-04ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/27&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/XFsd-yN4kfQ/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】耳をすませば | 対馬に仇なす者共に鉄槌を #05【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima耳をすませば--対馬に仇なす者共に鉄槌を-05ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/28&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/GCW6QaojhuM/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】竹を斬るの楽しい | 対馬に仇なす者共に鉄槌を #06【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima竹を斬るの楽しい--対馬に仇なす者共に鉄槌を-06ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/29&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/wRCbO8kSNnE/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【Ghost of Tsushima】水の呼吸を心得ました | 対馬に仇なす者共に鉄槌を #07【ゆっくり実況】&lt;a href=&quot;#ghost-of-tsushima水の呼吸を心得ました--対馬に仇なす者共に鉄槌を-07ゆっくり実況&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;動画投稿日：2022/09/30&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;img src=&quot;https://i.ytimg.com/vi/pKzFnvbI4xo/hqdefault.jpg&quot; alt=&quot;YouTube video player&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kinkingame24bitのYouTubeチャンネル&lt;a href=&quot;#kinkingame24bitのyoutubeチャンネル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;よろしければ、チャンネルのご登録お願い致します。&lt;/p&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC95FIAkqzrjyVlg1uWdYzlw&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.youtube.com/s/desktop/5af4fee3/img/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;YouTube&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkingame135ml&lt;/div&gt;&lt;div&gt;どうも、うｐ主のkinkinbeer135mlです。 街づくりやシミュレーションゲームを主に楽しむチャンネルです。 「penguinbeer135ml」というペンギンと、 「那由多リサ」という女の子による会話形式でお送りします。 たまにうp主が喋ることもあります。 ◆現在更新中のシリーズ ・Timberborn | 儚くも永久のハナシ -BEAVERworld-（2023/12/18〜） ・Satisfactory | 未知の設備でゆっくり工業化（2024/03/03〜） ・Chocolate Factory | 菓子と甘味でゆっくり工業化（2024/06/27〜） ◆完結済みのシリーズ ・Ghost of Tsushima | 対馬に仇なす者共に鉄槌を ・Satisfactory | 未知の砂漠でゆっくり工業化 ・Patron | 移住民は港島を作る ・Frostpunk | 極寒の氷の世界で極限生活 ・RAILGRADE | 異星を鉄道でゆっくり工業化 ・Cliff Empire | 移住民は摩天楼を作る ・FF8 | 1度しかドローしないFINAL FANTASY VIII Remastered（編集版） ・ABRISS | I Wanna Destroy ・No Man&apos;s Sky | A World of ARCH ・AC6 | ARMORED CORE VI FIRES OF RUBICON ・Factory Town | ベルトコンベアに飲み込まれた島 ・Frostpunk: The Last Autumn | 極寒の氷の世界で極限生活 Pre-winter ・Terra Nil | 荒廃の焦土をゆっくり緑地化&lt;/div&gt;&lt;div&gt;www.youtube.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://yt3.googleusercontent.com/2ipTh1d3j--UiFWRQb-7pmDEGjUdTny0k17scXps90RJPwdLbHRf3a4eoCLndStPxqBPwqyoDg=s900-c-k-c0x00ffffff-no-rj&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;先月は7本か。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よければ視聴してみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ゲーム】Steamリプレイ2022の自分がプレイした履歴を見てみた</title><link>https://endorphinbath.com/posts/steamreplay-2022/</link><guid isPermaLink="true">https://endorphinbath.com/posts/steamreplay-2022/</guid><description>Steamリプレイ2022という、遊んだゲームを振り返られるサービスを眺めてみました。あなたのアカウントはどんな感じでしょうか？</description><pubDate>Tue, 04 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Steamリプレイ2022というサービスで、自分のSteamアカウント上で遊ばれたゲームの履歴を振り返ってみるよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見てみよ、見てみよ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、Steamリプレイって何よ？&lt;a href=&quot;#まずsteamリプレイって何よ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3015&quot; height=&quot;1555&quot; src=&quot;/_astro/01.CovSW9bl_ZYdQTT.webp&quot; srcset=&quot;/_astro/01.CovSW9bl_Z2jBOAA.webp 640w, /_astro/01.CovSW9bl_Z1pbgC3.webp 750w, /_astro/01.CovSW9bl_1f0nce.webp 828w, /_astro/01.CovSW9bl_1QwE07.webp 1080w, /_astro/01.CovSW9bl_Z1dS3Jr.webp 1280w, /_astro/01.CovSW9bl_ZKym9U.webp 1668w, /_astro/01.CovSW9bl_18dUC6.webp 2048w, /_astro/01.CovSW9bl_ZOhesO.webp 2560w, /_astro/01.CovSW9bl_ZYdQTT.webp 3015w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんなページがあって、自分のSteamアカウントでログインすると自分の記録が見れます。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://store.steampowered.com/replay/&quot; target=&quot;_blank&quot;&gt;ここのリンク&lt;/a&gt;から飛んでログインします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コイカツパーティーやってるんだね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;20分しか遊んでいないゲームを中央に持ってこられるなんて不服だ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2974&quot; height=&quot;1606&quot; src=&quot;/_astro/02.3VMK9zEl_Z1d45wP.webp&quot; srcset=&quot;/_astro/02.3VMK9zEl_Z2e1Aly.webp 640w, /_astro/02.3VMK9zEl_Z23ewun.webp 750w, /_astro/02.3VMK9zEl_Z1e9tan.webp 828w, /_astro/02.3VMK9zEl_Z2820kg.webp 1080w, /_astro/02.3VMK9zEl_2ezas7.webp 1280w, /_astro/02.3VMK9zEl_5c1t3.webp 1668w, /_astro/02.3VMK9zEl_Xnn8g.webp 2048w, /_astro/02.3VMK9zEl_ZvPRcf.webp 2560w, /_astro/02.3VMK9zEl_Z1d45wP.webp 2974w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Steamリプレイのページの冒頭には、自分のアカウントの記録の概要と最も遊んだゲームが表示されます。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Satisfactoryは8割占めてるね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1598&quot; src=&quot;/_astro/03.q5YyiST-_LtfcY.webp&quot; srcset=&quot;/_astro/03.q5YyiST-_CkkQn.webp 640w, /_astro/03.q5YyiST-_Z10od3P.webp 750w, /_astro/03.q5YyiST-_ZTOyRC.webp 828w, /_astro/03.q5YyiST-_Z1F1PDj.webp 1080w, /_astro/03.q5YyiST-_bwvRu.webp 1280w, /_astro/03.q5YyiST-_rwCCE.webp 1668w, /_astro/03.q5YyiST-_1sV2Pr.webp 2048w, /_astro/03.q5YyiST-_ZK0elC.webp 2560w, /_astro/03.q5YyiST-_LtfcY.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;実績とか継続プレイの最高日数が表示されています。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;意外と、毎日ゲームしているわけではないんだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;動画を作ってて、全くゲームをしない日もあったような気がする。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;けっこう細かいところまで見れる&lt;a href=&quot;#けっこう細かいところまで見れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1520&quot; src=&quot;/_astro/04.mL8bOBQx_Z1XtGop.webp&quot; srcset=&quot;/_astro/04.mL8bOBQx_Z2gbYXc.webp 640w, /_astro/04.mL8bOBQx_Z1lCm15.webp 750w, /_astro/04.mL8bOBQx_Z1esJ6Y.webp 828w, /_astro/04.mL8bOBQx_Z1hdatg.webp 1080w, /_astro/04.mL8bOBQx_Z13iIDN.webp 1280w, /_astro/04.mL8bOBQx_ZrKXvH.webp 1668w, /_astro/04.mL8bOBQx_ZUNqrG.webp 2048w, /_astro/04.mL8bOBQx_ZoONwA.webp 2560w, /_astro/04.mL8bOBQx_Z1XtGop.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自分がどういうジャンルを特に遊んでいるかが分かりますね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;都市建設とかが多いね、まあ順当だな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1602&quot; src=&quot;/_astro/05.PdT7FqyP_1JEOOV.webp&quot; srcset=&quot;/_astro/05.PdT7FqyP_2d2O73.webp 640w, /_astro/05.PdT7FqyP_Z1WPPGU.webp 750w, /_astro/05.PdT7FqyP_ERTn3.webp 828w, /_astro/05.PdT7FqyP_ZQRBAf.webp 1080w, /_astro/05.PdT7FqyP_Z1vm3l1.webp 1280w, /_astro/05.PdT7FqyP_1fFQFI.webp 1668w, /_astro/05.PdT7FqyP_Zi43DQ.webp 2048w, /_astro/05.PdT7FqyP_ZG1Okd.webp 2560w, /_astro/05.PdT7FqyP_1JEOOV.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そして、特に遊んだゲームに関して更に深堀ります・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1600&quot; src=&quot;/_astro/06.BUoVGSLR_1rm1Qq.webp&quot; srcset=&quot;/_astro/06.BUoVGSLR_Z23PsL8.webp 640w, /_astro/06.BUoVGSLR_1nC77A.webp 750w, /_astro/06.BUoVGSLR_1tbKiN.webp 828w, /_astro/06.BUoVGSLR_1kQnGO.webp 1080w, /_astro/06.BUoVGSLR_Z18AyyE.webp 1280w, /_astro/06.BUoVGSLR_Wn3Hd.webp 1668w, /_astro/06.BUoVGSLR_ZAmQCm.webp 2048w, /_astro/06.BUoVGSLR_2fRYYv.webp 2560w, /_astro/06.BUoVGSLR_1rm1Qq.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まずは、最も遊んだSatisfactoryの様子です。7月が最も激しくプレイされていたようです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;173回ログインしているね。コイツを22日連続プレイしたのか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1600&quot; src=&quot;/_astro/07.BWZzwXga_Z187diV.webp&quot; srcset=&quot;/_astro/07.BWZzwXga_Z28UlnQ.webp 640w, /_astro/07.BWZzwXga_1ixeuR.webp 750w, /_astro/07.BWZzwXga_1o6RG5.webp 828w, /_astro/07.BWZzwXga_Z1eBQsx.webp 1080w, /_astro/07.BWZzwXga_1m7k4U.webp 1280w, /_astro/07.BWZzwXga_Z1C6bs9.webp 1668w, /_astro/07.BWZzwXga_1Tl21d.webp 2048w, /_astro/07.BWZzwXga_ZjAfaQ.webp 2560w, /_astro/07.BWZzwXga_Z187diV.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;次に多かったのは、Patronですね。11〜12月は、やり込んだなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ログイン回数は33日。Satisfactoryに比べたら余程かわいい・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1214&quot; src=&quot;/_astro/08.JZBnWhUO_Zi3ust.webp&quot; srcset=&quot;/_astro/08.JZBnWhUO_Zpkldi.webp 640w, /_astro/08.JZBnWhUO_Zc9NLM.webp 750w, /_astro/08.JZBnWhUO_E2xao.webp 828w, /_astro/08.JZBnWhUO_ZCYPma.webp 1080w, /_astro/08.JZBnWhUO_ZONNgS.webp 1280w, /_astro/08.JZBnWhUO_Z26SO0v.webp 1668w, /_astro/08.JZBnWhUO_66xPK.webp 2048w, /_astro/08.JZBnWhUO_Zik3Qw.webp 2560w, /_astro/08.JZBnWhUO_Zi3ust.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そして、実績があるゲームは達成した実績も表示されます。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Satisfactoryに実績が搭載されていたら、どんなことになっていたことか・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1586&quot; src=&quot;/_astro/09.CxYAqxGJ_1TycfK.webp&quot; srcset=&quot;/_astro/09.CxYAqxGJ_Z193oYW.webp 640w, /_astro/09.CxYAqxGJ_Zg4JKI.webp 750w, /_astro/09.CxYAqxGJ_Z93cPc.webp 828w, /_astro/09.CxYAqxGJ_1KeLja.webp 1080w, /_astro/09.CxYAqxGJ_Z1ohsHb.webp 1280w, /_astro/09.CxYAqxGJ_Z14aOFe.webp 1668w, /_astro/09.CxYAqxGJ_1k6Nl.webp 2048w, /_astro/09.CxYAqxGJ_qDGqq.webp 2560w, /_astro/09.CxYAqxGJ_1TycfK.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;3番目に多かったのは、Frostpunkです。11月にノーマルモードを1度クリアして、12月に満を持してエクストリームに挑みました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;初見でノーマルをやるより、ノーマルクリア後にエクストリームをやる方が時間掛かったよね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ホントに、大変だった・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1594&quot; src=&quot;/_astro/10.sX-h8YQv_ZVXkPr.webp&quot; srcset=&quot;/_astro/10.sX-h8YQv_Z8Tthn.webp 640w, /_astro/10.sX-h8YQv_J4aVQ.webp 750w, /_astro/10.sX-h8YQv_Q5HRn.webp 828w, /_astro/10.sX-h8YQv_ZUCSJS.webp 1080w, /_astro/10.sX-h8YQv_ZOVvt0.webp 1280w, /_astro/10.sX-h8YQv_Z1f0GsH.webp 1668w, /_astro/10.sX-h8YQv_2lx3hr.webp 2048w, /_astro/10.sX-h8YQv_bHima.webp 2560w, /_astro/10.sX-h8YQv_ZVXkPr.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;月ごとにどのゲームを遊んだかがヒストグラムになっています。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_018.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;エメラルドグリーンで表示されているのは勿論・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1598&quot; src=&quot;/_astro/11.Bx_4ik6C_Z20SNQS.webp&quot; srcset=&quot;/_astro/11.Bx_4ik6C_Z1oML5u.webp 640w, /_astro/11.Bx_4ik6C_ZvO6Qg.webp 750w, /_astro/11.Bx_4ik6C_ZoMyUJ.webp 828w, /_astro/11.Bx_4ik6C_Z1SM7Hk.webp 1080w, /_astro/11.Bx_4ik6C_GW3P8.webp 1280w, /_astro/11.Bx_4ik6C_hRRPq.webp 1668w, /_astro/11.Bx_4ik6C_1jhi3d.webp 2048w, /_astro/11.Bx_4ik6C_1Eulov.webp 2560w, /_astro/11.Bx_4ik6C_Z20SNQS.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;最後は、2022年に自分が遊んだゲームが一覧になって表示されます。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;塊魂が地味に面白かったんだよなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自分が遊んできたゲームを一挙に眺められるのはイイよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Satisfactoryやり過ぎだあ、そろそろ2桁違い・・・！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年9月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202209/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202209/</guid><description>2022年9月に読んだ本になります。来月はもうちょい読みたい。</description><pubDate>Mon, 03 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;9月の読書メーター&lt;a href=&quot;#9月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：1&lt;/li&gt;
&lt;li&gt;読んだページ数：229&lt;/li&gt;
&lt;li&gt;ナイス数：1&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;知識ゼロから学ぶソフトウェアテスト 【改訂版】 の 感想&lt;a href=&quot;#知識ゼロから学ぶソフトウェアテスト-改訂版-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;知識ゼロから学ぶソフトウェアテスト 【改訂版】&quot; loading=&quot;lazy&quot; width=&quot;54&quot; height=&quot;75&quot; src=&quot;/_astro/01.BRqU-jYu_W31Yz.webp&quot; srcset=&quot;/_astro/01.BRqU-jYu_W31Yz.webp 54w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;テストではバグが出やすい場所を特定すること、そして、バグが出やすくなるような複雑なコードにならないように組むことを改めて肝に銘じてコーディングしていきたいと思います。また、フロント側のテストをする場合は、状態遷移図を書くことが挙動を把握する上で確かに大事です。しかし、その状態を全て把握し切るのが大変なため、ついつい速く打鍵できるモンキーテストでバグを探してしまうんですよね・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：09月13日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E9%AB%98%E6%A9%8B+%E5%AF%BF%E4%B8%80&quot; target=&quot;_blank&quot;&gt;高橋 寿一&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、1冊でした。マンガを多く読んでいたのと、長編の本を読んでいたからですね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Googleドライブ】容量を追加購入する前に確認すべきこと4選</title><link>https://endorphinbath.com/posts/googledrive-check-before-storage-adding/</link><guid isPermaLink="true">https://endorphinbath.com/posts/googledrive-check-before-storage-adding/</guid><description>Googleドライブの容量を追加購入する前に確認するべきことを4点紹介します。自分としては盲点だったこともありますので、Googleドライブの残り容量で困っていたらぜひ目を通してみて下さい。</description><pubDate>Sun, 02 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわあ、これは盲点だった！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_009.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どした〜？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Googleドライブの容量が際どかったから、色々試してたら、2.5GBくらい減らせたのだよ！ 普段表示されない部分だったからね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_009.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほー、どの部分だったんだい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回は何を試したら、Googleドライブの残容量を増やすことが出来たかを紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よろしくう&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Googleドライブの容量を追加購入する前に。&lt;a href=&quot;#googleドライブの容量を追加購入する前に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Googleドライブの容量を追加購入する前に確認するべきことを、僕からは3点、お伝えさせていただきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ゴミ箱にサイズが大きいファイルがあるか確認&lt;/li&gt;
&lt;li&gt;Googleドライブには、2種類のサイズがある&lt;/li&gt;
&lt;li&gt;過去に他人と共有したファイルを確認&lt;/li&gt;
&lt;li&gt;開けないフォルダ内にあるファイルを確認&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;以下に、詳細を紹介します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その1：ゴミ箱にサイズが大きいファイルがあるか確認&lt;a href=&quot;#その1ゴミ箱にサイズが大きいファイルがあるか確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ゴミ箱にサイズが大きいファイルが残っていないかどうかを確認して下さい。&lt;/p&gt;&lt;p&gt;残っている場合は、ゴミ箱の画面内の右上の「ゴミ箱を空にする」ボタンをクリックして空にしましょう。
Googleドライブでは、ゴミ箱にあるファイルも使用している容量としてカウントされます。&lt;/p&gt;&lt;p&gt;そのため、ゴミ箱に入れた30日後の自動完全削除をする前に空き容量が無くなりそうな場合は、ゴミ箱を手動で空にしましょう
&lt;img loading=&quot;lazy&quot; width=&quot;2500&quot; height=&quot;1358&quot; src=&quot;/_astro/01.vFTGFCSP_36Fb2.webp&quot; srcset=&quot;/_astro/01.vFTGFCSP_1nJMk9.webp 640w, /_astro/01.vFTGFCSP_1ywQbk.webp 750w, /_astro/01.vFTGFCSP_2ma0L1.webp 828w, /_astro/01.vFTGFCSP_Z1RqFpK.webp 1080w, /_astro/01.vFTGFCSP_2uaumC.webp 1280w, /_astro/01.vFTGFCSP_Z2elY9N.webp 1668w, /_astro/01.vFTGFCSP_Z25lrwf.webp 2048w, /_astro/01.vFTGFCSP_36Fb2.webp 2500w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その2：Googleドライブには、2種類のサイズがある&lt;a href=&quot;#その2googleドライブには2種類のサイズがある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Googleドライブでは、ファイルのサイズに2種類表記があります。&lt;/p&gt;&lt;p&gt;その表記とは、「サイズ」と「使用容量」になります。&lt;/p&gt;&lt;p&gt;以下の画像が実際の表記になります。表記されているデータ量が違うことが分かります。
&lt;img loading=&quot;lazy&quot; width=&quot;656&quot; height=&quot;1456&quot; src=&quot;/_astro/02.DbC3_wS0_Z1hsPhW.webp&quot; srcset=&quot;/_astro/02.DbC3_wS0_ZpGjLl.webp 640w, /_astro/02.DbC3_wS0_Z1hsPhW.webp 656w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Googleドライブで実際に使用されている容量は、「使用容量」の方になります。（「サイズ」ではないので、ご注意。）&lt;/p&gt;&lt;p&gt;おそらく、「使用容量」の方が「サイズ」よりも大きくなるものだと思われます。
さらに、Googleドライブでのファイルを一覧表示する際に表示されている「ファイルサイズ」は「サイズ」の方になります！&lt;/p&gt;&lt;p&gt;ファイル一覧に表示されているサイズは「使用容量」ではありません！
&lt;img loading=&quot;lazy&quot; width=&quot;2458&quot; height=&quot;1432&quot; src=&quot;/_astro/03.Ir-070P6_xvc9U.webp&quot; srcset=&quot;/_astro/03.Ir-070P6_Z1xn10F.webp 640w, /_astro/03.Ir-070P6_1aaTNx.webp 750w, /_astro/03.Ir-070P6_1WEYpE.webp 828w, /_astro/03.Ir-070P6_Z1FMLnI.webp 1080w, /_astro/03.Ir-070P6_1FcsgQ.webp 1280w, /_astro/03.Ir-070P6_1FQG1k.webp 1668w, /_astro/03.Ir-070P6_BVGGI.webp 2048w, /_astro/03.Ir-070P6_xvc9U.webp 2458w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕の場合は、とあるファイルにおいて、「サイズ」が180MBほどでしたが、「使用容量」が700MBだったケースがありました。&lt;/p&gt;&lt;p&gt;この時は、そのファイルを消して（ゴミ箱からも削除して）、別のストレージにあった同じ180MBのファイルをアップロードしたら、Googleドライブの左下に表示されている保存容量が520MBほど減りました。&lt;/p&gt;&lt;p&gt;「使用容量」が増える理由は何なのでしょうかね・・・？ 僕のその180MBのファイルはプレビューできる拡張子ではなかったのですが・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その3：過去に他人と共有したファイルを確認&lt;a href=&quot;#その3過去に他人と共有したファイルを確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あなたは、友人や家族とGoogleドライブ上でファイルなどを共有したことはありませんでしょうか？&lt;/p&gt;&lt;p&gt;その場合、その共有した以降に使用していないファイルがあなたのGoogleドライブの容量を圧迫していませんか？
他の人が共有したファイルは、その共有した人が削除しても共有された人のドライブには残り続けます。&lt;/p&gt;&lt;p&gt;そのため、使用しなくなった共有ファイルを削除することを検討してみて下さい。以下の赤丸で囲んだ印が付いているファイルが共有フォルダもしくは共有ファイルです。
&lt;img loading=&quot;lazy&quot; width=&quot;2508&quot; height=&quot;1456&quot; src=&quot;/_astro/04.e-4SCWuz_8wJhX.webp&quot; srcset=&quot;/_astro/04.e-4SCWuz_Z1AtoYG.webp 640w, /_astro/04.e-4SCWuz_Z1pWv5E.webp 750w, /_astro/04.e-4SCWuz_1TyAqD.webp 828w, /_astro/04.e-4SCWuz_ZFSCkR.webp 1080w, /_astro/04.e-4SCWuz_a3N38.webp 1280w, /_astro/04.e-4SCWuz_TSPOg.webp 1668w, /_astro/04.e-4SCWuz_Z918ul.webp 2048w, /_astro/04.e-4SCWuz_8wJhX.webp 2508w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ということなので、共有ファイルを自分のドライブ上で削除しても、他の人のドライブからは削除されるということもありません。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その4：開けないフォルダ内にあるファイルを確認&lt;a href=&quot;#その4開けないフォルダ内にあるファイルを確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Googleドライブ上で他人と共有した（された）ファイルの中には、マイドライブ上では表示されないものがあります。そういったファイルを見つけ出すために、以下のURLでサイズが大きな共有ファイルがあるかどうかを確認してみて下さい&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drive.google.com/#quota&quot; target=&quot;_blank&quot;&gt;drive.google.com/#quota&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;僕が、このURLで表示されるファイル一覧を確認したら、だいぶ前に使って以降使用していない共有ファイルが2GBほどあることが分かりました。&lt;/p&gt;&lt;p&gt;そのファイルを削除すると、2GBの空きが生まれました。&lt;/p&gt;&lt;p&gt;ぜひ試してみて下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;良かったー、上記のことに気付けて。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;気付くのと気付かないのとでは、ランニングコストが全然違うもんね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Googleドライブの残容量に関してはけっこう粘れるなぁ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【デジタル断捨離】自分が持つデータのサイズを減らす方法の3ステップ</title><link>https://endorphinbath.com/posts/declutter-size-of-digital-data/</link><guid isPermaLink="true">https://endorphinbath.com/posts/declutter-size-of-digital-data/</guid><description>貴方は自分が使用しているSSDやクラウドストレージの容量が足りなくて困っていませんか？ もしかして、その原因は、デジタルデータのサイズが大きいためかもしれません。この記事では、貴方が所持しているデータのサイズを減らす方法を紹介します。</description><pubDate>Wed, 28 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うぼぁぁあああ、ファイルのサイズがデカイなあ・・・Googleドライブの残容量が残り少ない・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;要らないデータとかファイルのサイズが無駄にデカくありませんか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それはあるかもしれない・・・この旅行の時の写真のサイズとか、5MBあるし・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこだねえ。じゃあ、今回は、デジタル断捨離のテーマで綴っていきます。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;デジタルデータのサイズをなぜ減らす必要があるのか？&lt;a href=&quot;#デジタルデータのサイズをなぜ減らす必要があるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、デジタルデータを保存するには、そのデータを記録する機器やサービスを利用する必要があります。&lt;/p&gt;&lt;p&gt;そして、危機に記録する場合では、その記録する機器の利用可能な上限サイズというものがあります。1TB、2TBのSSD（ソリッドステートドライブ）とかHDD（ハードディスクドライブ）とかがありますが、その容量までしかデータを保存できません。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1280&quot; src=&quot;/_astro/01.BPxOQAOO_Zc7jvg.webp&quot; srcset=&quot;/_astro/01.BPxOQAOO_ZBAvkF.webp 640w, /_astro/01.BPxOQAOO_ZuvIOy.webp 750w, /_astro/01.BPxOQAOO_Z2fA12U.webp 828w, /_astro/01.BPxOQAOO_22VECF.webp 1080w, /_astro/01.BPxOQAOO_1BR2MI.webp 1280w, /_astro/01.BPxOQAOO_LUJqK.webp 1668w, /_astro/01.BPxOQAOO_Zc7jvg.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、データを記録するサービスを利用する場合も、無料プランで15GBとか3GBとかの利用制限がありますよね。有料プランでも利用制限は基本的に存在します。（OneDriveは、以前まで無限にデータをアップロード出来るプランが有りましたが、ウン十とかウン百TBのデータを保存する輩が現れて、このプランが無くなった過去があります。）&lt;/p&gt;&lt;p&gt;そういった、データを記録する機器やサービスは、不動産的に言うと、「倉庫」とか「賃貸アパート」みたいなものですので、デジタル生活をエンジョイしている場合、その「倉庫」とか「賃貸アパート」に置く荷物つまり「デジタルデータ」のサイズを減らす必要があるのです。
&lt;img loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;500&quot; src=&quot;/_astro/02.C8gYc_nz_1LIPb6.webp&quot; srcset=&quot;/_astro/02.C8gYc_nz_1pEWb8.webp 640w, /_astro/02.C8gYc_nz_VAQCk.webp 750w, /_astro/02.C8gYc_nz_U6cdx.webp 828w, /_astro/02.C8gYc_nz_1LIPb6.webp 940w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自分が持つデジタルデータを減らす方法&lt;a href=&quot;#自分が持つデジタルデータを減らす方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;方法としては、以下になるかと思います。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ファイルを削除する。&lt;/li&gt;
&lt;li&gt;内容が重複するファイルを削除する。&lt;/li&gt;
&lt;li&gt;1つあたりのファイルのサイズを減らす。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それでは、1つずつ詳しく見ていきましょう。&lt;/p&gt;&lt;p&gt;そして、アナログ断捨離を実践するようなイメージで、デジタル断捨離に取り組んでみませんか？&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：ファイルを削除する。&lt;a href=&quot;#その1ファイルを削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、シンプルに自分が持っているファイルの量を減らすところから始めましょう。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;そのファイルはこの1年の間、目を通しましたか？&lt;/li&gt;
&lt;li&gt;残しておく意味がある内容ですか？&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;アナログな物品ほどに目を光らせる必要はありませんが、本当に必要なさそうなデータは消してしまいましょう。ブレていてあまり見栄えが良くない写真など、自分にプラスにならないようなデータを残しておいて、SSDなどの面積を占有するのは勿体ないです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：内容が重複するファイルを削除する。&lt;a href=&quot;#その2内容が重複するファイルを削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;あなたが所有しているファイル同士で内容が重複しているものは無いでしょうか？&lt;/p&gt;&lt;p&gt;同じところで撮った同じ構図の写真、同じことをメモったテキストデータや同じ内容の書類がPDFとJPGで2種類存在しているなど・・・、そういった内容がモロ被りしているものを持っておくのは、勿体ないです。
そういったファイルが存在しないかどうかを見つけるために、「デジタル断捨離」は1日でまとめて行うなど、一気に取り組んだ方が断捨離の効果が高いかと思います。&lt;/p&gt;&lt;p&gt;また、画像ファイルに関して言えば、Googleフォトに画像をアップロードすると、似たような画像をGoogleのAIが教えて通知してくれます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：1つあたりのファイルのサイズを減らす。&lt;a href=&quot;#その31つあたりのファイルのサイズを減らす&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ファイルをそれ以上減らせなければ、残ったファイル自体のサイズを減らすことを検討してみませんか？&lt;/p&gt;&lt;p&gt;特に、画像ファイルはサイズを圧縮できるランキング1位と言っても良いかもしれません。最近では、色々な画像圧縮サービスが出てきており、スマホやデジカメで撮った写真などをそのまま「Googleフォト」にアップロードしたり、ブログやnoteの記事に使用するのは、課金プランまっしぐらもしくは検索エンジンでの表示順位を下げる原因ともなります。&lt;/p&gt;&lt;p&gt;以前に、画像圧縮サービスのメリット・デメリットをまとめた記事がありますので、以下をご参照下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/mac-app-squeezing-image/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Mac、アプリ】画像の容量を圧縮してくれるアプリを比較してみた。&lt;/div&gt;&lt;div&gt;5つの画像圧縮ツール（JPEGmini Pro、ImageOptim、Image Tools、TinyPNG、Squoosh）の性能を比べてみました。ツールの選定の一助になるかも？&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20211117_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、上記の記事では、&lt;code&gt;.jpg&lt;/code&gt;や&lt;code&gt;.png&lt;/code&gt;のみを対象にサービスを比較しましたが、その2つの拡張子以外に「.webp」という拡張子があります。&lt;/p&gt;&lt;p&gt;この&lt;code&gt;.webp&lt;/code&gt;は、可逆圧縮方式でアルファチャンネルを持っている（透明度を保持する）フォーマットになっており、&lt;code&gt;.jpg&lt;/code&gt;や&lt;code&gt;.png&lt;/code&gt;に比べて、ファイルサイズが軽いファイル拡張子になります。2010年にGoogleが開発・公開した拡張子です。
&lt;img loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;244&quot; src=&quot;/_astro/03.CKXbrpB-_1UOXVI.webp&quot; srcset=&quot;/_astro/03.CKXbrpB-_1UOXVI.webp 508w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらの拡張子のファイルはまだ汎用性が低く、Adobeのソフトでも標準で対応していませんが、可逆圧縮のフォーマットになっていますので、後で&lt;code&gt;.jpg&lt;/code&gt;や&lt;code&gt;.png&lt;/code&gt;に戻して利用すれば、十分利用できると思いますので、画像を&lt;code&gt;.webp&lt;/code&gt;拡張子で保管することで、データのサイズを減らすことが出来ます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;.jpg&lt;/code&gt;もしくは&lt;code&gt;.png&lt;/code&gt;から、&lt;code&gt;.webp&lt;/code&gt;に変換するサービスとしては、「&lt;a href=&quot;https://squoosh.app/&quot; target=&quot;_blank&quot;&gt;Squoosh&lt;/a&gt;」が代表的だと思います。こちらもGoogle様が開発した画像圧縮サービスになります。&lt;/p&gt;&lt;p&gt;一気に複数ファイルを圧縮することは出来ませんが、圧縮すると80%くらいサイズを減らせます。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1608&quot; src=&quot;/_astro/04.flQiz7Jw_vHFRz.webp&quot; srcset=&quot;/_astro/04.flQiz7Jw_1FVklK.webp 640w, /_astro/04.flQiz7Jw_Z2tWksd.webp 750w, /_astro/04.flQiz7Jw_8LpBK.webp 828w, /_astro/04.flQiz7Jw_Z1UziEA.webp 1080w, /_astro/04.flQiz7Jw_Z40V8M.webp 1280w, /_astro/04.flQiz7Jw_bYaBn.webp 1668w, /_astro/04.flQiz7Jw_Z1lKJIc.webp 2048w, /_astro/04.flQiz7Jw_Z1JIvoy.webp 2560w, /_astro/04.flQiz7Jw_vHFRz.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;世は、デジタル断捨離時代じゃ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;デジタルミニマリストを目指す。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】レアな資源の場所（窒素ガス）</title><link>https://endorphinbath.com/posts/satisfactory-where-is-rare-item4/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-where-is-rare-item4/</guid><description>オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、窒素ガスを入手できる場所を紹介します。</description><pubDate>Tue, 27 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見つからんぞお・・・、見つからんぞおっ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何が悲しくて泣いておるのじゃ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;硫黄が全く見つからん・・・この地下にあるはずなのにっ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこの硫黄か〜。じゃあ、今回は硫黄のついでにその他のアイテムの位置も紹介するぜ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の記事は、update 6のときの情報です&lt;a href=&quot;#今回の記事はupdate-6のときの情報です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介する内容は、Satisfactory update 6のときの情報です。&lt;/p&gt;&lt;p&gt;それ以降のバージョンでは、情報が異なる可能性があることをご了承下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;窒素ガスの資源の場所&lt;a href=&quot;#窒素ガスの資源の場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;窒素ガスの吹出口になります。&lt;/p&gt;&lt;p&gt;紹介する場所は、5箇所になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：北西の砂漠の西部&lt;a href=&quot;#その1北西の砂漠の西部&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この窒素ガスは、このクモが多く出現する洞窟の入り口から北に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2062&quot; height=&quot;981&quot; src=&quot;/_astro/01_01_01.ABqMIXOk_Ztcdug.webp&quot; srcset=&quot;/_astro/01_01_01.ABqMIXOk_24fh7c.webp 640w, /_astro/01_01_01.ABqMIXOk_ZeV5uD.webp 750w, /_astro/01_01_01.ABqMIXOk_BORBh.webp 828w, /_astro/01_01_01.ABqMIXOk_Z101Jj3.webp 1080w, /_astro/01_01_01.ABqMIXOk_144x1d.webp 1280w, /_astro/01_01_01.ABqMIXOk_DIYa8.webp 1668w, /_astro/01_01_01.ABqMIXOk_1PL3yE.webp 2048w, /_astro/01_01_01.ABqMIXOk_Ztcdug.webp 2062w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_02.BFY85p87_1Lbxxn.webp&quot; srcset=&quot;/_astro/01_01_02.BFY85p87_ZSk7iI.webp 640w, /_astro/01_01_02.BFY85p87_Z2d4I8T.webp 750w, /_astro/01_01_02.BFY85p87_1s7Oj1.webp 828w, /_astro/01_01_02.BFY85p87_Z1s3RMQ.webp 1080w, /_astro/01_01_02.BFY85p87_1Lbxxn.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この、砂地から北に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_03.CNCwyJLb_1bzUW7.webp&quot; srcset=&quot;/_astro/01_01_03.CNCwyJLb_ZfrASL.webp 640w, /_astro/01_01_03.CNCwyJLb_Z1zccIW.webp 750w, /_astro/01_01_03.CNCwyJLb_260kHX.webp 828w, /_astro/01_01_03.CNCwyJLb_Z22Euo7.webp 1080w, /_astro/01_01_03.CNCwyJLb_1bzUW7.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この、貝殻のようなものが落ちている場所に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_04.CSHBObBB_2bhtzU.webp&quot; srcset=&quot;/_astro/01_01_04.CSHBObBB_Zduaea.webp 640w, /_astro/01_01_04.CSHBObBB_Z1xeL4l.webp 750w, /_astro/01_01_04.CSHBObBB_27WLnz.webp 828w, /_astro/01_01_04.CSHBObBB_Z12WVKj.webp 1080w, /_astro/01_01_04.CSHBObBB_2bhtzU.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;通り道にあそこに見える毒ガスが見えますが、そこは迂回できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_05.BpJdz7Pp_Z1lUvHr.webp&quot; srcset=&quot;/_astro/01_01_05.BpJdz7Pp_1MBsRp.webp 640w, /_astro/01_01_05.BpJdz7Pp_sQR2e.webp 750w, /_astro/01_01_05.BpJdz7Pp_ZV7IjM.webp 828w, /_astro/01_01_05.BpJdz7Pp_u1bKg.webp 1080w, /_astro/01_01_05.BpJdz7Pp_Z1lUvHr.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;反時計回りに迂回します。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_06.Ds8W5XWc_Z10pzmx.webp&quot; srcset=&quot;/_astro/01_01_06.Ds8W5XWc_ZjLie5.webp 640w, /_astro/01_01_06.Ds8W5XWc_Z1DvT4g.webp 750w, /_astro/01_01_06.Ds8W5XWc_21FDnE.webp 828w, /_astro/01_01_06.Ds8W5XWc_Pw86a.webp 1080w, /_astro/01_01_06.Ds8W5XWc_Z10pzmx.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスの右側に窒素ガスが見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_07.pGwUsflL_1YNH4h.webp&quot; srcset=&quot;/_astro/01_01_07.pGwUsflL_Z1cT5AE.webp 640w, /_astro/01_01_07.pGwUsflL_Z2wDGqP.webp 750w, /_astro/01_01_07.pGwUsflL_18xQ15.webp 828w, /_astro/01_01_07.pGwUsflL_Z1eqIgW.webp 1080w, /_astro/01_01_07.pGwUsflL_1YNH4h.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;窒素ガスの吹出口に到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_08.BHP3LV1M_2qG9Qh.webp&quot; srcset=&quot;/_astro/01_01_08.BHP3LV1M_L2ubL.webp 640w, /_astro/01_01_08.BHP3LV1M_ZxH6Dp.webp 750w, /_astro/01_01_08.BHP3LV1M_Z1WGH0q.webp 828w, /_astro/01_01_08.BHP3LV1M_ZMygtW.webp 1080w, /_astro/01_01_08.BHP3LV1M_2qG9Qh.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：中心部の平原の近く&lt;a href=&quot;#その2中心部の平原の近く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次の窒素ガスは地図の中心部にあります。&lt;/p&gt;&lt;p&gt;近くに池がある、この場所から北に向かいます。前方の高台を上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;2061&quot; height=&quot;985&quot; src=&quot;/_astro/01_02_01.Cu0MDwTw_1C6LN5.webp&quot; srcset=&quot;/_astro/01_02_01.Cu0MDwTw_Zlviff.webp 640w, /_astro/01_02_01.Cu0MDwTw_Z1ByhfF.webp 750w, /_astro/01_02_01.Cu0MDwTw_Z1MUGKa.webp 828w, /_astro/01_02_01.Cu0MDwTw_bhryf.webp 1080w, /_astro/01_02_01.Cu0MDwTw_2bG73K.webp 1280w, /_astro/01_02_01.Cu0MDwTw_Zf0W3F.webp 1668w, /_astro/01_02_01.Cu0MDwTw_1R4YWA.webp 2048w, /_astro/01_02_01.Cu0MDwTw_1C6LN5.webp 2061w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_02.BedIP1Fy_17ncLG.webp&quot; srcset=&quot;/_astro/01_02_02.BedIP1Fy_1RucAF.webp 640w, /_astro/01_02_02.BedIP1Fy_xJAKu.webp 750w, /_astro/01_02_02.BedIP1Fy_ZQeYAw.webp 828w, /_astro/01_02_02.BedIP1Fy_Z26Rdyx.webp 1080w, /_astro/01_02_02.BedIP1Fy_17ncLG.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;高台に上ると、窒素ガスが見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_03.DpZln-el_Z1TRikS.webp&quot; srcset=&quot;/_astro/01_02_03.DpZln-el_2gwPN8.webp 640w, /_astro/01_02_03.DpZln-el_VMeWW.webp 750w, /_astro/01_02_03.DpZln-el_Zsclo4.webp 828w, /_astro/01_02_03.DpZln-el_Z3UzRb.webp 1080w, /_astro/01_02_03.DpZln-el_Z1TRikS.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;窒素ガスに到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_04.BPZa5yoi_1Wsn2p.webp&quot; srcset=&quot;/_astro/01_02_04.BPZa5yoi_2e9vcQ.webp 640w, /_astro/01_02_04.BPZa5yoi_ToTmF.webp 750w, /_astro/01_02_04.BPZa5yoi_ZuzFYl.webp 828w, /_astro/01_02_04.BPZa5yoi_Z1gM3iO.webp 1080w, /_astro/01_02_04.BPZa5yoi_1Wsn2p.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：東の湿地の近くの小さい洞窟の近く&lt;a href=&quot;#その3東の湿地の近くの小さい洞窟の近く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の記事で、SAM鉱床がある洞窟を見つけました。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item1/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（ウラン、SAM）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、ウラン、SAMを入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220302_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;この鉱床の近くに、窒素ガスの資源も埋まっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1988&quot; height=&quot;971&quot; src=&quot;/_astro/01_05_01.BBcxyrQu_Z1unRO1.webp&quot; srcset=&quot;/_astro/01_05_01.BBcxyrQu_1WFrp0.webp 640w, /_astro/01_05_01.BBcxyrQu_ZluUcP.webp 750w, /_astro/01_05_01.BBcxyrQu_1tuay1.webp 828w, /_astro/01_05_01.BBcxyrQu_uwfGa.webp 1080w, /_astro/01_05_01.BBcxyrQu_pQM5z.webp 1280w, /_astro/01_05_01.BBcxyrQu_1qD0Qk.webp 1668w, /_astro/01_05_01.BBcxyrQu_Z1unRO1.webp 1988w&quot; /&gt;&lt;/p&gt;&lt;p&gt;SAM鉱床の場所から出発します。
&lt;img loading=&quot;lazy&quot; width=&quot;2107&quot; height=&quot;1169&quot; src=&quot;/_astro/01_05_02.CtgMw8Ba_Z11FyFq.webp&quot; srcset=&quot;/_astro/01_05_02.CtgMw8Ba_Z1mY6eP.webp 640w, /_astro/01_05_02.CtgMw8Ba_Z1FiC9J.webp 750w, /_astro/01_05_02.CtgMw8Ba_ZP7Lqu.webp 828w, /_astro/01_05_02.CtgMw8Ba_Z1PU6vI.webp 1080w, /_astro/01_05_02.CtgMw8Ba_ZLhdJG.webp 1280w, /_astro/01_05_02.CtgMw8Ba_Z1bNhTP.webp 1668w, /_astro/01_05_02.CtgMw8Ba_Z1Av4dn.webp 2048w, /_astro/01_05_02.CtgMw8Ba_Z11FyFq.webp 2107w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ノーべリスクで岩を壊して洞窟を出ます。&lt;/p&gt;&lt;p&gt;窒素ガスがあるところの風景はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_03.Dze05Kom_Z1VeiAP.webp&quot; srcset=&quot;/_astro/01_05_03.Dze05Kom_ZtaXN2.webp 640w, /_astro/01_05_03.Dze05Kom_Z1MUzDd.webp 750w, /_astro/01_05_03.Dze05Kom_1RgWNH.webp 828w, /_astro/01_05_03.Dze05Kom_19b99C.webp 1080w, /_astro/01_05_03.Dze05Kom_Z1VeiAP.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;窒素ガスの資源に到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_04.Bc65Ss8l_Z23wy3N.webp&quot; srcset=&quot;/_astro/01_05_04.Bc65Ss8l_YDb7Q.webp 640w, /_astro/01_05_04.Bc65Ss8l_Zk6pHk.webp 750w, /_astro/01_05_04.Bc65Ss8l_Z1J614l.webp 828w, /_astro/01_05_04.Bc65Ss8l_11RSGE.webp 1080w, /_astro/01_05_04.Bc65Ss8l_Z23wy3N.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：北東の砂漠の北部&lt;a href=&quot;#その4北東の砂漠の北部&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この窒素ガスはとーっても北の方に分布しています。&lt;/p&gt;&lt;p&gt;この石英と水がある場所から西に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;984&quot; src=&quot;/_astro/01_04_01.LKFmlKsE_ZGGaXt.webp&quot; srcset=&quot;/_astro/01_04_01.LKFmlKsE_Z2mCaP0.webp 640w, /_astro/01_04_01.LKFmlKsE_ZDJMfj.webp 750w, /_astro/01_04_01.LKFmlKsE_1bfivx.webp 828w, /_astro/01_04_01.LKFmlKsE_Z1AKpDx.webp 1080w, /_astro/01_04_01.LKFmlKsE_1jH7sH.webp 1280w, /_astro/01_04_01.LKFmlKsE_2ktles.webp 1668w, /_astro/01_04_01.LKFmlKsE_ZGGaXt.webp 2012w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直進して左の方に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_02.Djeu51vR_ZILUsN.webp&quot; srcset=&quot;/_astro/01_04_02.Djeu51vR_Z1JQzJU.webp 640w, /_astro/01_04_02.Djeu51vR_20zWdP.webp 750w, /_astro/01_04_02.Djeu51vR_AAlQO.webp 828w, /_astro/01_04_02.Djeu51vR_2lCwhE.webp 1080w, /_astro/01_04_02.Djeu51vR_ZILUsN.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直進します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_03.BvSdeP9p_Z13a2jF.webp&quot; srcset=&quot;/_astro/01_04_03.BvSdeP9p_Z1AtjVM.webp 640w, /_astro/01_04_03.BvSdeP9p_29Xd1X.webp 750w, /_astro/01_04_03.BvSdeP9p_JXBEW.webp 828w, /_astro/01_04_03.BvSdeP9p_22fpqM.webp 1080w, /_astro/01_04_03.BvSdeP9p_Z13a2jF.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;川を渡って、直進します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_04.C5kXgHYa_Z2vmUl4.webp&quot; srcset=&quot;/_astro/01_04_04.C5kXgHYa_27M8sp.webp 640w, /_astro/01_04_04.C5kXgHYa_N2wCe.webp 750w, /_astro/01_04_04.C5kXgHYa_ZAW3IM.webp 828w, /_astro/01_04_04.C5kXgHYa_z2wpo.webp 1080w, /_astro/01_04_04.C5kXgHYa_Z2vmUl4.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここらへんまで来たら、下図のように坂道を作って、上りましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_05.2lGd4-9A_Z1KqsfV.webp&quot; srcset=&quot;/_astro/01_04_05.2lGd4-9A_Z2qTq8E.webp 640w, /_astro/01_04_05.2lGd4-9A_1jx6P6.webp 750w, /_astro/01_04_05.2lGd4-9A_Z5rtvU.webp 828w, /_astro/01_04_05.2lGd4-9A_1jXYuw.webp 1080w, /_astro/01_04_05.2lGd4-9A_Z1KqsfV.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_06.BcfZkENj_ZjCr9q.webp&quot; srcset=&quot;/_astro/01_04_06.BcfZkENj_41dzo.webp 640w, /_astro/01_04_06.BcfZkENj_Z1fInfM.webp 750w, /_astro/01_04_06.BcfZkENj_2ptac8.webp 828w, /_astro/01_04_06.BcfZkENj_Z2jp8cT.webp 1080w, /_astro/01_04_06.BcfZkENj_ZjCr9q.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上ると途中で、強ブタがいます。右手に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_07.Cxnb3FH2_ZieqL4.webp&quot; srcset=&quot;/_astro/01_04_07.Cxnb3FH2_136jek.webp 640w, /_astro/01_04_07.Cxnb3FH2_ZgDhAQ.webp 750w, /_astro/01_04_07.Cxnb3FH2_Z1FCRWR.webp 828w, /_astro/01_04_07.Cxnb3FH2_Z2i17Ox.webp 1080w, /_astro/01_04_07.Cxnb3FH2_ZieqL4.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直進します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_08.DUXkWN3x_lkf4Y.webp&quot; srcset=&quot;/_astro/01_04_08.DUXkWN3x_Z4EywE.webp 640w, /_astro/01_04_08.DUXkWN3x_Z1opamP.webp 750w, /_astro/01_04_08.DUXkWN3x_2gMn55.webp 828w, /_astro/01_04_08.DUXkWN3x_Z1DrqXu.webp 1080w, /_astro/01_04_08.DUXkWN3x_lkf4Y.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直進していると、左手の方にこんな坂があるので上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_09.BwlxCP8L_rkVop.webp&quot; srcset=&quot;/_astro/01_04_09.BwlxCP8L_Z13v5m1.webp 640w, /_astro/01_04_09.BwlxCP8L_Z2nfGcc.webp 750w, /_astro/01_04_09.BwlxCP8L_1hVQfI.webp 828w, /_astro/01_04_09.BwlxCP8L_Z1xqJE4.webp 1080w, /_astro/01_04_09.BwlxCP8L_rkVop.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_10.BfOztf5Y_1x1cm1.webp&quot; srcset=&quot;/_astro/01_04_10.BfOztf5Y_ZwkHlc.webp 640w, /_astro/01_04_10.BfOztf5Y_Z1Q5jbn.webp 750w, /_astro/01_04_10.BfOztf5Y_1O7egx.webp 828w, /_astro/01_04_10.BfOztf5Y_ZrKtGs.webp 1080w, /_astro/01_04_10.BfOztf5Y_1x1cm1.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;パイプを伸ばして運搬するか、容器に入れて運搬するか・・・&lt;/p&gt;&lt;p&gt;悩ましい場所です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_11.D4t52vVO_Zknscb.webp&quot; srcset=&quot;/_astro/01_04_11.D4t52vVO_Z1f3o94.webp 640w, /_astro/01_04_11.D4t52vVO_2vo8OG.webp 750w, /_astro/01_04_11.D4t52vVO_16oxsF.webp 828w, /_astro/01_04_11.D4t52vVO_Z2ka9fE.webp 1080w, /_astro/01_04_11.D4t52vVO_Zknscb.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その5：南東の湖の南&lt;a href=&quot;#その5南東の湖の南&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この窒素ガスは全体地図の中で南東の方にあります。&lt;/p&gt;&lt;p&gt;場所としては、高地の方にあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1988&quot; height=&quot;971&quot; src=&quot;/_astro/01_05_01.BBcxyrQu_Z1unRO1.webp&quot; srcset=&quot;/_astro/01_05_01.BBcxyrQu_1WFrp0.webp 640w, /_astro/01_05_01.BBcxyrQu_ZluUcP.webp 750w, /_astro/01_05_01.BBcxyrQu_1tuay1.webp 828w, /_astro/01_05_01.BBcxyrQu_uwfGa.webp 1080w, /_astro/01_05_01.BBcxyrQu_pQM5z.webp 1280w, /_astro/01_05_01.BBcxyrQu_1qD0Qk.webp 1668w, /_astro/01_05_01.BBcxyrQu_Z1unRO1.webp 1988w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここから、南方に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2107&quot; height=&quot;1169&quot; src=&quot;/_astro/01_05_02.CtgMw8Ba_Z11FyFq.webp&quot; srcset=&quot;/_astro/01_05_02.CtgMw8Ba_Z1mY6eP.webp 640w, /_astro/01_05_02.CtgMw8Ba_Z1FiC9J.webp 750w, /_astro/01_05_02.CtgMw8Ba_ZP7Lqu.webp 828w, /_astro/01_05_02.CtgMw8Ba_Z1PU6vI.webp 1080w, /_astro/01_05_02.CtgMw8Ba_ZLhdJG.webp 1280w, /_astro/01_05_02.CtgMw8Ba_Z1bNhTP.webp 1668w, /_astro/01_05_02.CtgMw8Ba_Z1Av4dn.webp 2048w, /_astro/01_05_02.CtgMw8Ba_Z11FyFq.webp 2107w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂道を登っていきます。&lt;/p&gt;&lt;p&gt;そしたら、画像でレーダータワーがある所に、坂道を作り上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_03.Dze05Kom_Z1VeiAP.webp&quot; srcset=&quot;/_astro/01_05_03.Dze05Kom_ZtaXN2.webp 640w, /_astro/01_05_03.Dze05Kom_Z1MUzDd.webp 750w, /_astro/01_05_03.Dze05Kom_1RgWNH.webp 828w, /_astro/01_05_03.Dze05Kom_19b99C.webp 1080w, /_astro/01_05_03.Dze05Kom_Z1VeiAP.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;登ったら、この地面伝いに西に進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_04.Bc65Ss8l_Z23wy3N.webp&quot; srcset=&quot;/_astro/01_05_04.Bc65Ss8l_YDb7Q.webp 640w, /_astro/01_05_04.Bc65Ss8l_Zk6pHk.webp 750w, /_astro/01_05_04.Bc65Ss8l_Z1J614l.webp 828w, /_astro/01_05_04.Bc65Ss8l_11RSGE.webp 1080w, /_astro/01_05_04.Bc65Ss8l_Z23wy3N.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;途中で地面の性質が変わりますが、同じ高さで進み続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_05.DFPDFl1u_GYTd6.webp&quot; srcset=&quot;/_astro/01_05_05.DFPDFl1u_ZRYSkL.webp 640w, /_astro/01_05_05.DFPDFl1u_Z2cJuaW.webp 750w, /_astro/01_05_05.DFPDFl1u_1ss3gX.webp 828w, /_astro/01_05_05.DFPDFl1u_Z1hLLPn.webp 1080w, /_astro/01_05_05.DFPDFl1u_GYTd6.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左側を気にしながら進みます。途中に坂道があると思うので、そこを上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_06.3HltNGBE_170xfs.webp&quot; srcset=&quot;/_astro/01_05_06.3HltNGBE_KReGD.webp 640w, /_astro/01_05_06.3HltNGBE_ZxRm8x.webp 750w, /_astro/01_05_06.3HltNGBE_Z1WQWuy.webp 828w, /_astro/01_05_06.3HltNGBE_ZRL8N1.webp 1080w, /_astro/01_05_06.3HltNGBE_170xfs.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂道を登っています。左側に段々となっている地形が出てくるので、そこを上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_07.CdIk-LcP_ZgiVpf.webp&quot; srcset=&quot;/_astro/01_05_07.CdIk-LcP_S9Hx6.webp 640w, /_astro/01_05_07.CdIk-LcP_ZqzSi5.webp 750w, /_astro/01_05_07.CdIk-LcP_Z1PztE6.webp 828w, /_astro/01_05_07.CdIk-LcP_Z2g5CsI.webp 1080w, /_astro/01_05_07.CdIk-LcP_ZgiVpf.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;段々のところを進み続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_08.C_XwAGoX_Z1Wtvx9.webp&quot; srcset=&quot;/_astro/01_05_08.C_XwAGoX_Z27hlJl.webp 640w, /_astro/01_05_08.C_XwAGoX_1Dabep.webp 750w, /_astro/01_05_08.C_XwAGoX_eazRo.webp 828w, /_astro/01_05_08.C_XwAGoX_17UVdj.webp 1080w, /_astro/01_05_08.C_XwAGoX_Z1Wtvx9.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まだまだ段々を進み続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_09.B-ASUKJc_ZyOpov.webp&quot; srcset=&quot;/_astro/01_05_09.B-ASUKJc_Z1zwAqs.webp 640w, /_astro/01_05_09.B-ASUKJc_2aTVxi.webp 750w, /_astro/01_05_09.B-ASUKJc_KUlbh.webp 828w, /_astro/01_05_09.B-ASUKJc_2vA2lW.webp 1080w, /_astro/01_05_09.B-ASUKJc_ZyOpov.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_10.Cmcv0rSU_ZOurwW.webp&quot; srcset=&quot;/_astro/01_05_10.Cmcv0rSU_216b4L.webp 640w, /_astro/01_05_10.Cmcv0rSU_GlzeA.webp 750w, /_astro/01_05_10.Cmcv0rSU_ZHD17q.webp 828w, /_astro/01_05_10.Cmcv0rSU_2fU0dv.webp 1080w, /_astro/01_05_10.Cmcv0rSU_ZOurwW.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;窒素ガスが見えてきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_11.Ddr1Iii__Z2qGgSK.webp&quot; srcset=&quot;/_astro/01_05_11.Ddr1Iii__Za9818.webp 640w, /_astro/01_05_11.Ddr1Iii__Z1tSIQj.webp 750w, /_astro/01_05_11.Ddr1Iii__2biNAB.webp 828w, /_astro/01_05_11.Ddr1Iii__DIaQH.webp 1080w, /_astro/01_05_11.Ddr1Iii__Z2qGgSK.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;到着です。&lt;/p&gt;&lt;p&gt;夜になると、クモが出てくる？
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_12.P5HUVzXS_ZQKUbm.webp&quot; srcset=&quot;/_astro/01_05_12.P5HUVzXS_211HAW.webp 640w, /_astro/01_05_12.P5HUVzXS_Gh6KL.webp 750w, /_astro/01_05_12.P5HUVzXS_ZHHtAf.webp 828w, /_astro/01_05_12.P5HUVzXS_2dDwz6.webp 1080w, /_astro/01_05_12.P5HUVzXS_ZQKUbm.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを快適に&lt;a href=&quot;#satisfactoryを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;マウスその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Razer Orochi V2 ゲーミングマウス ワイヤレス 超軽量60g HyperSpeed Bluetooth 2つの無線モード 最大950時間バッテリー持続 5G 高性能 18000 DPI オプティカルセンサー 【日本正規代理店保証品】 RZ01-03730100-R3A1&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその3&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;アイ・オー・データ IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz AHVAパネル ブラック(HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-GDQ271JA&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】レアな資源の場所（硫黄）</title><link>https://endorphinbath.com/posts/satisfactory-where-is-rare-item3/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-where-is-rare-item3/</guid><description>オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、硫黄を入手できる場所を紹介します。</description><pubDate>Mon, 26 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見つからんぞお・・・、見つからんぞおっ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何が悲しくて泣いておるのじゃ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;硫黄が全く見つからん・・・この地下にあるはずなのにっ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこの硫黄か〜。じゃあ、今回は硫黄のついでにその他のアイテムの位置も紹介するぜ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の記事は、update 6のときの情報です&lt;a href=&quot;#今回の記事はupdate-6のときの情報です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介する内容は、Satisfactory update 6のときの情報です。&lt;/p&gt;&lt;p&gt;それ以降のバージョンでは、情報が異なる可能性があることをご了承下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;硫黄の鉱床の場所&lt;a href=&quot;#硫黄の鉱床の場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;硫黄の鉱床になります。&lt;/p&gt;&lt;p&gt;紹介する場所は、8箇所になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：中央の平原&lt;a href=&quot;#その1中央の平原&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この硫黄の鉱床はここにあります。この湖畔から北東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2056&quot; height=&quot;985&quot; src=&quot;/_astro/01_01_01.BvQIG2DY_AyWz1.webp&quot; srcset=&quot;/_astro/01_01_01.BvQIG2DY_Z16Axuf.webp 640w, /_astro/01_01_01.BvQIG2DY_Z2mDwuF.webp 750w, /_astro/01_01_01.BvQIG2DY_2wbbNL.webp 828w, /_astro/01_01_01.BvQIG2DY_2bBq1U.webp 1080w, /_astro/01_01_01.BvQIG2DY_ZSb3hv.webp 1280w, /_astro/01_01_01.BvQIG2DY_ZjK6G6.webp 1668w, /_astro/01_01_01.BvQIG2DY_Z1gtMdq.webp 2048w, /_astro/01_01_01.BvQIG2DY_AyWz1.webp 2056w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_02.45iXSND5_i1Bwr.webp&quot; srcset=&quot;/_astro/01_01_02.45iXSND5_GOnd6.webp 640w, /_astro/01_01_02.45iXSND5_ZBUdC5.webp 750w, /_astro/01_01_02.45iXSND5_Z21TNY6.webp 828w, /_astro/01_01_02.45iXSND5_28Xk09.webp 1080w, /_astro/01_01_02.45iXSND5_i1Bwr.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;湖畔を反時計回りに回り込んで向かいます。&lt;/p&gt;&lt;p&gt;途中で、パレベリーが沢山ある場所を通ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_03.CNayvXcG_Z1KSQpz.webp&quot; srcset=&quot;/_astro/01_01_03.CNayvXcG_2gOv1K.webp 640w, /_astro/01_01_03.CNayvXcG_W4Tbz.webp 750w, /_astro/01_01_03.CNayvXcG_ZrTGar.webp 828w, /_astro/01_01_03.CNayvXcG_52Q38.webp 1080w, /_astro/01_01_03.CNayvXcG_Z1KSQpz.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;硫黄の鉱床の近くには、石灰岩の鉱床があります。&lt;/p&gt;&lt;p&gt;あの採鉱機がある高台に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_04.cCOxxlzP_1CBBhe.webp&quot; srcset=&quot;/_astro/01_01_04.cCOxxlzP_5qm4c.webp 640w, /_astro/01_01_04.cCOxxlzP_Z1ejeKY.webp 750w, /_astro/01_01_04.cCOxxlzP_2qSiFV.webp 828w, /_astro/01_01_04.cCOxxlzP_Z1ACO40.webp 1080w, /_astro/01_01_04.cCOxxlzP_1CBBhe.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;硫黄の鉱床に到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_05.CIo3UYyr_Z1177FQ.webp&quot; srcset=&quot;/_astro/01_01_05.CIo3UYyr_Z1WQzUo.webp 640w, /_astro/01_01_05.CIo3UYyr_1MzW3m.webp 750w, /_astro/01_01_05.CIo3UYyr_nAlGl.webp 828w, /_astro/01_01_05.CIo3UYyr_OOzLQ.webp 1080w, /_astro/01_01_05.CIo3UYyr_Z1177FQ.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：南部の平原&lt;a href=&quot;#その2南部の平原&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この硫黄の鉱床は、南部の平原にあります。&lt;/p&gt;&lt;p&gt;この場所から東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2049&quot; height=&quot;997&quot; src=&quot;/_astro/01_02_01.Dd8UROvv_1yppsC.webp&quot; srcset=&quot;/_astro/01_02_01.Dd8UROvv_hba7r.webp 640w, /_astro/01_02_01.Dd8UROvv_203xH8.webp 750w, /_astro/01_02_01.Dd8UROvv_Z1f8ukW.webp 828w, /_astro/01_02_01.Dd8UROvv_ZIR52L.webp 1080w, /_astro/01_02_01.Dd8UROvv_ZNwxDm.webp 1280w, /_astro/01_02_01.Dd8UROvv_2hiNdu.webp 1668w, /_astro/01_02_01.Dd8UROvv_1yllgV.webp 2048w, /_astro/01_02_01.Dd8UROvv_1yppsC.webp 2049w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_02.DZjkyKKG_ZyTbm1.webp&quot; srcset=&quot;/_astro/01_02_02.DZjkyKKG_Z17W56n.webp 640w, /_astro/01_02_02.DZjkyKKG_Z2rGFVy.webp 750w, /_astro/01_02_02.DZjkyKKG_1duQvm.webp 828w, /_astro/01_02_02.DZjkyKKG_1h2w6G.webp 1080w, /_astro/01_02_02.DZjkyKKG_ZyTbm1.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;出発地点の近くには、パレベリーが沢山ある高台があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_03.DwIPfcRg_Z1HQSQX.webp&quot; srcset=&quot;/_astro/01_02_03.DwIPfcRg_ZlaMmV.webp 640w, /_astro/01_02_03.DwIPfcRg_Z1EUod7.webp 750w, /_astro/01_02_03.DwIPfcRg_20h9eN.webp 828w, /_astro/01_02_03.DwIPfcRg_84NAJ.webp 1080w, /_astro/01_02_03.DwIPfcRg_Z1HQSQX.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下に降りて、向かいます。&lt;/p&gt;&lt;p&gt;正面の高台を上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_04.D7p5muj-_Zjliva.webp&quot; srcset=&quot;/_astro/01_02_04.D7p5muj-_2tG8Mr.webp 640w, /_astro/01_02_04.D7p5muj-_19VwWg.webp 750w, /_astro/01_02_04.D7p5muj-_Zf33oK.webp 828w, /_astro/01_02_04.D7p5muj-_1wAoWx.webp 1080w, /_astro/01_02_04.D7p5muj-_Zjliva.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また正面の高台を上ります。ここには、クモがいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_05.Bym4EIPH_Z2sjwh3.webp&quot; srcset=&quot;/_astro/01_02_05.Bym4EIPH_16phRI.webp 640w, /_astro/01_02_05.Bym4EIPH_ZdkiWs.webp 750w, /_astro/01_02_05.Bym4EIPH_Z1CjTjt.webp 828w, /_astro/01_02_05.Bym4EIPH_ZBmNNl.webp 1080w, /_astro/01_02_05.Bym4EIPH_Z2sjwh3.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのまま、正面を歩いて硫黄の鉱床に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_06.1qX0GgOb_ZMrIhB.webp&quot; srcset=&quot;/_astro/01_02_06.1qX0GgOb_Z1sowji.webp 640w, /_astro/01_02_06.1qX0GgOb_2i30Es.webp 750w, /_astro/01_02_06.1qX0GgOb_S3pir.webp 828w, /_astro/01_02_06.1qX0GgOb_13tYb6.webp 1080w, /_astro/01_02_06.1qX0GgOb_ZMrIhB.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;硫黄の鉱床に到着です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_07.5zV2oSnq_Z2s3EHd.webp&quot; srcset=&quot;/_astro/01_02_07.5zV2oSnq_1qqzS8.webp 640w, /_astro/01_02_07.5zV2oSnq_6FY2W.webp 750w, /_astro/01_02_07.5zV2oSnq_Z1iiBj4.webp 828w, /_astro/01_02_07.5zV2oSnq_ZB6Wev.webp 1080w, /_astro/01_02_07.5zV2oSnq_Z2s3EHd.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：北部の森林地帯&lt;a href=&quot;#その3北部の森林地帯&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここの鉱床は2つあります。&lt;/p&gt;&lt;p&gt;この湖から南東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1867&quot; height=&quot;981&quot; src=&quot;/_astro/01_03_01.D_7i3Nrd_OFNTJ.webp&quot; srcset=&quot;/_astro/01_03_01.D_7i3Nrd_25bEl5.webp 640w, /_astro/01_03_01.D_7i3Nrd_Z28z37J.webp 750w, /_astro/01_03_01.D_7i3Nrd_1Cd1BO.webp 828w, /_astro/01_03_01.D_7i3Nrd_s2rIu.webp 1080w, /_astro/01_03_01.D_7i3Nrd_Z15gg2P.webp 1280w, /_astro/01_03_01.D_7i3Nrd_hYsLE.webp 1668w, /_astro/01_03_01.D_7i3Nrd_OFNTJ.webp 1867w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、対岸に渡ります。こんな感じに坂道を作って進みましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_02.BBi6h53T_Z4OpfK.webp&quot; srcset=&quot;/_astro/01_03_02.BBi6h53T_1m0eov.webp 640w, /_astro/01_03_02.BBi6h53T_2fCyk.webp 750w, /_astro/01_03_02.BBi6h53T_Z1mIWMG.webp 828w, /_astro/01_03_02.BBi6h53T_Z4OpfK.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;対岸に渡ったら、南東に進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_03.vaiy9zBD_Z1rQVza.webp&quot; srcset=&quot;/_astro/01_03_03.vaiy9zBD_19hsNO.webp 640w, /_astro/01_03_03.vaiy9zBD_Zas81m.webp 750w, /_astro/01_03_03.vaiy9zBD_Z1zrInn.webp 828w, /_astro/01_03_03.vaiy9zBD_Z1rQVza.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この森林には、スピッター、ブタ、クモがいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_04.4ZTwXB74_Z1uyPd.webp&quot; srcset=&quot;/_astro/01_03_04.4ZTwXB74_R5APY.webp 640w, /_astro/01_03_04.4ZTwXB74_ZrDYYc.webp 750w, /_astro/01_03_04.4ZTwXB74_Z1QDAld.webp 828w, /_astro/01_03_04.4ZTwXB74_Z1uyPd.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_05.CEkFaQte_Z1h2KHb.webp&quot; srcset=&quot;/_astro/01_03_05.CEkFaQte_Ztq95T.webp 640w, /_astro/01_03_05.CEkFaQte_Z1NaJV5.webp 750w, /_astro/01_03_05.CEkFaQte_1R1MvP.webp 828w, /_astro/01_03_05.CEkFaQte_Z1h2KHb.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_06.Cmia-czy_26VsQX.webp&quot; srcset=&quot;/_astro/01_03_06.Cmia-czy_1KkeJG.webp 640w, /_astro/01_03_06.Cmia-czy_qzCTv.webp 750w, /_astro/01_03_06.Cmia-czy_ZXoWrv.webp 828w, /_astro/01_03_06.Cmia-czy_26VsQX.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床に到着です。正面の2つの採鉱機が置いてあるのが硫黄の鉱床です。&lt;/p&gt;&lt;p&gt;左側には間欠泉があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_07.BOR53MG1_Z1XjG4D.webp&quot; srcset=&quot;/_astro/01_03_07.BOR53MG1_Z1XPQOD.webp 640w, /_astro/01_03_07.BOR53MG1_1LAF97.webp 750w, /_astro/01_03_07.BOR53MG1_mB4M6.webp 828w, /_astro/01_03_07.BOR53MG1_Z1XjG4D.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：北東の砂漠の北部&lt;a href=&quot;#その4北東の砂漠の北部&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この鉱床はこの石英の鉱床から西に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2054&quot; height=&quot;984&quot; src=&quot;/_astro/01_04_01.DYFJpn7__2gVLM8.webp&quot; srcset=&quot;/_astro/01_04_01.DYFJpn7__Z26qdSF.webp 640w, /_astro/01_04_01.DYFJpn7__1HHUTP.webp 750w, /_astro/01_04_01.DYFJpn7__1wlvpl.webp 828w, /_astro/01_04_01.DYFJpn7__1M3fwj.webp 1080w, /_astro/01_04_01.DYFJpn7__Z1hJdM7.webp 1280w, /_astro/01_04_01.DYFJpn7__ZIjhbH.webp 1668w, /_astro/01_04_01.DYFJpn7__Z1F2WI2.webp 2048w, /_astro/01_04_01.DYFJpn7__2gVLM8.webp 2054w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_02.B39ueDfl_ABk9y.webp&quot; srcset=&quot;/_astro/01_04_02.B39ueDfl_14RePz.webp 640w, /_astro/01_04_02.B39ueDfl_ZeRlYB.webp 750w, /_astro/01_04_02.B39ueDfl_Z1DQWlC.webp 828w, /_astro/01_04_02.B39ueDfl_Z1oalSU.webp 1080w, /_astro/01_04_02.B39ueDfl_ABk9y.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右手の岩壁を時計回りに回り込みます。ここから直進して、川を左手の方に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_03.CKj1_xTl_Z297px7.webp&quot; srcset=&quot;/_astro/01_04_03.CKj1_xTl_1ttm5P.webp 640w, /_astro/01_04_03.CKj1_xTl_9IKfE.webp 750w, /_astro/01_04_03.CKj1_xTl_Z1ffP6m.webp 828w, /_astro/01_04_03.CKj1_xTl_Vi2dl.webp 1080w, /_astro/01_04_03.CKj1_xTl_Z297px7.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;川を進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_04.CxrPDrjy_Z30u5W.webp&quot; srcset=&quot;/_astro/01_04_04.CxrPDrjy_Z1eucoB.webp 640w, /_astro/01_04_04.CxrPDrjy_2vWkz9.webp 750w, /_astro/01_04_04.CxrPDrjy_16WJd8.webp 828w, /_astro/01_04_04.CxrPDrjy_Z22Mb9q.webp 1080w, /_astro/01_04_04.CxrPDrjy_Z30u5W.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んで、右手の方に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_05.DVS4rIbt_ZNdWg5.webp&quot; srcset=&quot;/_astro/01_04_05.DVS4rIbt_Z6Vp5M.webp 640w, /_astro/01_04_05.DVS4rIbt_Z1qG0UX.webp 750w, /_astro/01_04_05.DVS4rIbt_2evwvW.webp 828w, /_astro/01_04_05.DVS4rIbt_2hbuun.webp 1080w, /_astro/01_04_05.DVS4rIbt_ZNdWg5.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここを進んでいくと、右手の方に鉱床が見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_06.Dxv8k8SN_Z1i1EOG.webp&quot; srcset=&quot;/_astro/01_04_06.Dxv8k8SN_ZhTqLR.webp 640w, /_astro/01_04_06.Dxv8k8SN_Z1BE2C3.webp 750w, /_astro/01_04_06.Dxv8k8SN_23xuOR.webp 828w, /_astro/01_04_06.Dxv8k8SN_1MnLUL.webp 1080w, /_astro/01_04_06.Dxv8k8SN_Z1i1EOG.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床に到着です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_07.CAvC_C6Y_y8XSU.webp&quot; srcset=&quot;/_astro/01_04_07.CAvC_C6Y_zLdiG.webp 640w, /_astro/01_04_07.CAvC_C6Y_ZIXnwu.webp 750w, /_astro/01_04_07.CAvC_C6Y_Z28WXSv.webp 828w, /_astro/01_04_07.CAvC_C6Y_Z1qCH9y.webp 1080w, /_astro/01_04_07.CAvC_C6Y_y8XSU.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その5：北東部の砂漠と東部の湿地の間（その1）&lt;a href=&quot;#その5北東部の砂漠と東部の湿地の間その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここにあります。&lt;/p&gt;&lt;p&gt;砂漠のオアシス的な場所から東南東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2002&quot; height=&quot;990&quot; src=&quot;/_astro/01_05_01.BUlASojl_Z2iDUTM.webp&quot; srcset=&quot;/_astro/01_05_01.BUlASojl_1NKgsG.webp 640w, /_astro/01_05_01.BUlASojl_JoHP6.webp 750w, /_astro/01_05_01.BUlASojl_ZKGLB7.webp 828w, /_astro/01_05_01.BUlASojl_1Tx6aq.webp 1080w, /_astro/01_05_01.BUlASojl_Z2kfCCm.webp 1280w, /_astro/01_05_01.BUlASojl_ZopweR.webp 1668w, /_astro/01_05_01.BUlASojl_Z2iDUTM.webp 2002w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_02.Bjff4rb__Z28auia.webp&quot; srcset=&quot;/_astro/01_05_02.Bjff4rb__Yu3n8.webp 640w, /_astro/01_05_02.Bjff4rb__Zkfxs3.webp 750w, /_astro/01_05_02.Bjff4rb__Z1Jf8O4.webp 828w, /_astro/01_05_02.Bjff4rb__WeWsi.webp 1080w, /_astro/01_05_02.Bjff4rb__Z28auia.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;砂漠を進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_03.BamGRpl-_ZEbS4F.webp&quot; srcset=&quot;/_astro/01_05_03.BamGRpl-_Z2oJ7i8.webp 640w, /_astro/01_05_03.BamGRpl-_1lHpFC.webp 750w, /_astro/01_05_03.BamGRpl-_Z3haFo.webp 828w, /_astro/01_05_03.BamGRpl-_2qdyFM.webp 1080w, /_astro/01_05_03.BamGRpl-_ZEbS4F.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;砂漠を進みます。ちなみに、正面に見える小高い岩は、地下への入口です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_04.B85C54ej_Z2B2HD.webp&quot; srcset=&quot;/_astro/01_05_04.B85C54ej_4yHRX.webp 640w, /_astro/01_05_04.B85C54ej_Z1faRWd.webp 750w, /_astro/01_05_04.B85C54ej_2q1EuH.webp 828w, /_astro/01_05_04.B85C54ej_Z22nIL7.webp 1080w, /_astro/01_05_04.B85C54ej_Z2B2HD.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに砂漠を進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_05.DI1u9Jgr_1LItCK.webp&quot; srcset=&quot;/_astro/01_05_05.DI1u9Jgr_Z2tVsu9.webp 640w, /_astro/01_05_05.DI1u9Jgr_1gv4tB.webp 750w, /_astro/01_05_05.DI1u9Jgr_Z8tvRp.webp 828w, /_astro/01_05_05.DI1u9Jgr_Zd3cpI.webp 1080w, /_astro/01_05_05.DI1u9Jgr_1LItCK.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;少し岩肌が見えてきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_06.2vsiqV-9_DoPtH.webp&quot; srcset=&quot;/_astro/01_05_06.2vsiqV-9_Zo5LGW.webp 640w, /_astro/01_05_06.2vsiqV-9_Z1HPnx8.webp 750w, /_astro/01_05_06.2vsiqV-9_1Wm9TM.webp 828w, /_astro/01_05_06.2vsiqV-9_Z1lmPyL.webp 1080w, /_astro/01_05_06.2vsiqV-9_DoPtH.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスは見えますが、そこは右回りに迂回します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_07.BRMUcUce_ZNIkur.webp&quot; srcset=&quot;/_astro/01_05_07.BRMUcUce_1c5Jir.webp 640w, /_astro/01_05_07.BRMUcUce_Z7DQwJ.webp 750w, /_astro/01_05_07.BRMUcUce_Z1wDrSK.webp 828w, /_astro/01_05_07.BRMUcUce_2gG7g1.webp 1080w, /_astro/01_05_07.BRMUcUce_ZNIkur.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな湖が見えますが、この地帯には入りません。&lt;/p&gt;&lt;p&gt;左手の方へ進みます。東です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_08.BWw5tzr7_ZFC783.webp&quot; srcset=&quot;/_astro/01_05_08.BWw5tzr7_ZKI0Xc.webp 640w, /_astro/01_05_08.BWw5tzr7_Z25sBNn.webp 750w, /_astro/01_05_08.BWw5tzr7_1zIUDx.webp 828w, /_astro/01_05_08.BWw5tzr7_2oMkCp.webp 1080w, /_astro/01_05_08.BWw5tzr7_ZFC783.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;硫黄の鉱床は岩壁の上にあるので、このように岩壁の上に登ってしまった方が到達しやすいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_09.DNTK7uUF_ZIlDL9.webp&quot; srcset=&quot;/_astro/01_05_09.DNTK7uUF_Z1fOym0.webp 640w, /_astro/01_05_09.DNTK7uUF_2uBXBK.webp 750w, /_astro/01_05_09.DNTK7uUF_15CnfJ.webp 828w, /_astro/01_05_09.DNTK7uUF_2m3MYj.webp 1080w, /_astro/01_05_09.DNTK7uUF_ZIlDL9.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;岩壁の上に登りました。ここら一帯には、ハードドライブのcrateがあったりします。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_10.Bh11vGWe_Zwigpi.webp&quot; srcset=&quot;/_astro/01_05_10.Bh11vGWe_2vHajG.webp 640w, /_astro/01_05_10.Bh11vGWe_1bWytv.webp 750w, /_astro/01_05_10.Bh11vGWe_Zd21Rv.webp 828w, /_astro/01_05_10.Bh11vGWe_Z2w4WsL.webp 1080w, /_astro/01_05_10.Bh11vGWe_Zwigpi.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Mercer Sphereがあったりもします。奥にぼんやり見えるのが硫黄の鉱床です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_11.z45x2Ouk_Z1QH9nz.webp&quot; srcset=&quot;/_astro/01_05_11.z45x2Ouk_aYuaX.webp 640w, /_astro/01_05_11.z45x2Ouk_Z18K6Ed.webp 750w, /_astro/01_05_11.z45x2Ouk_2wrqMH.webp 828w, /_astro/01_05_11.z45x2Ouk_1dHimS.webp 1080w, /_astro/01_05_11.z45x2Ouk_Z1QH9nz.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;硫黄の鉱床に到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_12.DhizCSRy_Z1OfI9N.webp&quot; srcset=&quot;/_astro/01_05_12.DhizCSRy_13UjD.webp 640w, /_astro/01_05_12.DhizCSRy_Z1iFFvx.webp 750w, /_astro/01_05_12.DhizCSRy_2mvQVn.webp 828w, /_astro/01_05_12.DhizCSRy_1g9IAE.webp 1080w, /_astro/01_05_12.DhizCSRy_Z1OfI9N.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その6：北東部の砂漠と東部の湿地の間（その2）&lt;a href=&quot;#その6北東部の砂漠と東部の湿地の間その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次の硫黄の鉱床は、「その5：北東部の砂漠と東部の湿地の間（その1）」よりも南にあります。&lt;/p&gt;&lt;p&gt;湿地から行ったほうが近いので、湿地近くのこの石英の鉱床から南東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2024&quot; height=&quot;987&quot; src=&quot;/_astro/01_06_01.wR0N68lE_ZCGBCM.webp&quot; srcset=&quot;/_astro/01_06_01.wR0N68lE_Z1Va6Wp.webp 640w, /_astro/01_06_01.wR0N68lE_ZdhImI.webp 750w, /_astro/01_06_01.wR0N68lE_1BHmo8.webp 828w, /_astro/01_06_01.wR0N68lE_1F6fVS.webp 1080w, /_astro/01_06_01.wR0N68lE_1AqMli.webp 1280w, /_astro/01_06_01.wR0N68lE_ZnTYAM.webp 1668w, /_astro/01_06_01.wR0N68lE_ZCGBCM.webp 2024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_02.Cwwc75Bj_Z2mfNiQ.webp&quot; srcset=&quot;/_astro/01_06_02.Cwwc75Bj_1j37gu.webp 640w, /_astro/01_06_02.Cwwc75Bj_ZGtyG.webp 750w, /_astro/01_06_02.Cwwc75Bj_Z1pG4UH.webp 828w, /_astro/01_06_02.Cwwc75Bj_I9DrB.webp 1080w, /_astro/01_06_02.Cwwc75Bj_Z2mfNiQ.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下に下ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_03.BYEzjFHL_ZMXVXC.webp&quot; srcset=&quot;/_astro/01_06_03.BYEzjFHL_34sk0.webp 640w, /_astro/01_06_03.BYEzjFHL_Z1gF8vb.webp 750w, /_astro/01_06_03.BYEzjFHL_2owoVJ.webp 828w, /_astro/01_06_03.BYEzjFHL_2hquLP.webp 1080w, /_astro/01_06_03.BYEzjFHL_ZMXVXC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あの砂地に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_04.BTvhbYT5_Z1SweK7.webp&quot; srcset=&quot;/_astro/01_06_04.BTvhbYT5_Z2ralL1.webp 640w, /_astro/01_06_04.BTvhbYT5_1jhbcJ.webp 750w, /_astro/01_06_04.BTvhbYT5_Z5Hp9h.webp 828w, /_astro/01_06_04.BTvhbYT5_1bSd0l.webp 1080w, /_astro/01_06_04.BTvhbYT5_Z1SweK7.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;砂地についたら、右手の方に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_05.CBc0DYXP_Z1dQPv6.webp&quot; srcset=&quot;/_astro/01_06_05.CBc0DYXP_ZhLfjG.webp 640w, /_astro/01_06_05.CBc0DYXP_Z1BvQ9R.webp 750w, /_astro/01_06_05.CBc0DYXP_23FGi3.webp 828w, /_astro/01_06_05.CBc0DYXP_1QxBfm.webp 1080w, /_astro/01_06_05.CBc0DYXP_Z1dQPv6.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;少し進んだら、左手の方に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_06.DHqLcwVv_hBv1F.webp&quot; srcset=&quot;/_astro/01_06_06.DHqLcwVv_23icX1.webp 640w, /_astro/01_06_06.DHqLcwVv_IxB7P.webp 750w, /_astro/01_06_06.DHqLcwVv_ZFqYeb.webp 828w, /_astro/01_06_06.DHqLcwVv_Z1Hab1N.webp 1080w, /_astro/01_06_06.DHqLcwVv_hBv1F.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左手に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_07.D6N8KnkM_1ylbEx.webp&quot; srcset=&quot;/_astro/01_06_07.D6N8KnkM_2fNygC.webp 640w, /_astro/01_06_07.D6N8KnkM_V3Wqr.webp 750w, /_astro/01_06_07.D6N8KnkM_ZsUCUz.webp 828w, /_astro/01_06_07.D6N8KnkM_ZqqunV.webp 1080w, /_astro/01_06_07.D6N8KnkM_1ylbEx.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直進します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_08.h2f9Hdkk_1yYfTu.webp&quot; srcset=&quot;/_astro/01_06_08.h2f9Hdkk_BKTaP.webp 640w, /_astro/01_06_08.h2f9Hdkk_ZGXGEl.webp 750w, /_astro/01_06_08.h2f9Hdkk_Z26Xi1m.webp 828w, /_astro/01_06_08.h2f9Hdkk_ZpMq8Y.webp 1080w, /_astro/01_06_08.h2f9Hdkk_1yYfTu.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;途中に間欠泉があります。左側を通ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_09.HfTfGMXa_Z1j9E8P.webp&quot; srcset=&quot;/_astro/01_06_09.HfTfGMXa_1v7Dko.webp 640w, /_astro/01_06_09.HfTfGMXa_bn2ud.webp 750w, /_astro/01_06_09.HfTfGMXa_Z1dBxQN.webp 828w, /_astro/01_06_09.HfTfGMXa_1LfMBC.webp 1080w, /_astro/01_06_09.HfTfGMXa_Z1j9E8P.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下ります。途中にハードドライブのcrateがあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_10.UivGGwNU_byme6.webp&quot; srcset=&quot;/_astro/01_06_10.UivGGwNU_ZyYWL2.webp 640w, /_astro/01_06_10.UivGGwNU_Z1SJyBd.webp 750w, /_astro/01_06_10.UivGGwNU_1LrXPH.webp 828w, /_astro/01_06_10.UivGGwNU_Z1NdjOn.webp 1080w, /_astro/01_06_10.UivGGwNU_byme6.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床の場所に到着です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_11.UdOQnFbc_1gDMay.webp&quot; srcset=&quot;/_astro/01_06_11.UdOQnFbc_VbB6H.webp 640w, /_astro/01_06_11.UdOQnFbc_ZnxYIt.webp 750w, /_astro/01_06_11.UdOQnFbc_Z1MxA5u.webp 828w, /_astro/01_06_11.UdOQnFbc_ZI7SRU.webp 1080w, /_astro/01_06_11.UdOQnFbc_1gDMay.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その7：中部の森林の中央&lt;a href=&quot;#その7中部の森林の中央&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;砂漠のオアシス的な場所から、南西の鉱床に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1942&quot; height=&quot;974&quot; src=&quot;/_astro/01_07_01.B2KLc7Hl_Z29CiqE.webp&quot; srcset=&quot;/_astro/01_07_01.B2KLc7Hl_Z1AXUgV.webp 640w, /_astro/01_07_01.B2KLc7Hl_ZVeUiE.webp 750w, /_astro/01_07_01.B2KLc7Hl_Z9nd9d.webp 828w, /_astro/01_07_01.B2KLc7Hl_1rJTGn.webp 1080w, /_astro/01_07_01.B2KLc7Hl_d5bBq.webp 1280w, /_astro/01_07_01.B2KLc7Hl_XU2vy.webp 1668w, /_astro/01_07_01.B2KLc7Hl_Z29CiqE.webp 1942w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_02.Bjff4rb__Z28auia.webp&quot; srcset=&quot;/_astro/01_05_02.Bjff4rb__Yu3n8.webp 640w, /_astro/01_05_02.Bjff4rb__Zkfxs3.webp 750w, /_astro/01_05_02.Bjff4rb__Z1Jf8O4.webp 828w, /_astro/01_05_02.Bjff4rb__WeWsi.webp 1080w, /_astro/01_05_02.Bjff4rb__Z28auia.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;南に向かっていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_02.D1161se7_ddeaN.webp&quot; srcset=&quot;/_astro/01_07_02.D1161se7_ZyVHhC.webp 640w, /_astro/01_07_02.D1161se7_Z1SGj7N.webp 750w, /_astro/01_07_02.D1161se7_1Lvek7.webp 828w, /_astro/01_07_02.D1161se7_Z1LyrRF.webp 1080w, /_astro/01_07_02.D1161se7_ddeaN.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_03.C4MCCBxF_Z2bSoTe.webp&quot; srcset=&quot;/_astro/01_07_03.C4MCCBxF_Z2hK64n.webp 640w, /_astro/01_07_03.C4MCCBxF_1sGqTn.webp 750w, /_astro/01_07_03.C4MCCBxF_3GPxm.webp 828w, /_astro/01_07_03.C4MCCBxF_Sw2Qe.webp 1080w, /_astro/01_07_03.C4MCCBxF_Z2bSoTe.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;岩壁をすり抜けていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_04.BtfFLd5h_Z21qCLC.webp&quot; srcset=&quot;/_astro/01_07_04.BtfFLd5h_kFJfJ.webp 640w, /_astro/01_07_04.BtfFLd5h_ZY3Qzr.webp 750w, /_astro/01_07_04.BtfFLd5h_Z2o3rVs.webp 828w, /_astro/01_07_04.BtfFLd5h_13XNXP.webp 1080w, /_astro/01_07_04.BtfFLd5h_Z21qCLC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;少し開けた場所に出ます。左の方をすり抜けていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_05.8w8Xcchs_Z2a0RQH.webp&quot; srcset=&quot;/_astro/01_07_05.8w8Xcchs_Z9Bj32.webp 640w, /_astro/01_07_05.8w8Xcchs_Z1tlTSd.webp 750w, /_astro/01_07_05.8w8Xcchs_2bPCyH.webp 828w, /_astro/01_07_05.8w8Xcchs_UoySK.webp 1080w, /_astro/01_07_05.8w8Xcchs_Z2a0RQH.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;奥に起伏の激しい地帯が見えます。進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_06.Cbn7EDki_1oDH5K.webp&quot; srcset=&quot;/_astro/01_07_06.Cbn7EDki_7pnHK.webp 640w, /_astro/01_07_06.Cbn7EDki_Z1ckd7q.webp 750w, /_astro/01_07_06.Cbn7EDki_2sRkku.webp 828w, /_astro/01_07_06.Cbn7EDki_ZA7XWI.webp 1080w, /_astro/01_07_06.Cbn7EDki_1oDH5K.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;起伏の激しいエリアです。奥へ進みます。&lt;/p&gt;&lt;p&gt;戦いにくい地形のくせに、敵が強めです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_07.DYt8dBAW_Z1Tp9jC.webp&quot; srcset=&quot;/_astro/01_07_07.DYt8dBAW_1jVTLW.webp 640w, /_astro/01_07_07.DYt8dBAW_ciVL.webp 750w, /_astro/01_07_07.DYt8dBAW_Z1oMhpf.webp 828w, /_astro/01_07_07.DYt8dBAW_1b0iqP.webp 1080w, /_astro/01_07_07.DYt8dBAW_Z1Tp9jC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;途中に石油の資源があります。それと、石灰岩の資源も。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_08.g4mCciI4_ZlkC95.webp&quot; srcset=&quot;/_astro/01_07_08.g4mCciI4_Z247e5d.webp 640w, /_astro/01_07_08.g4mCciI4_1GkiSx.webp 750w, /_astro/01_07_08.g4mCciI4_hkHww.webp 828w, /_astro/01_07_08.g4mCciI4_Z2l7jcy.webp 1080w, /_astro/01_07_08.g4mCciI4_ZlkC95.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_09.CQoYu1Ak_ZCqLQd.webp&quot; srcset=&quot;/_astro/01_07_09.CQoYu1Ak_Z1pDja0.webp 640w, /_astro/01_07_09.CQoYu1Ak_2kNdNK.webp 750w, /_astro/01_07_09.CQoYu1Ak_UNCrJ.webp 828w, /_astro/01_07_09.CQoYu1Ak_2rXETf.webp 1080w, /_astro/01_07_09.CQoYu1Ak_ZCqLQd.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下の道を挟んだ対岸に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_10.BoMOXfvp_Z9bByC.webp&quot; srcset=&quot;/_astro/01_07_10.BoMOXfvp_Z1SHV4q.webp 640w, /_astro/01_07_10.BoMOXfvp_1QIATk.webp 750w, /_astro/01_07_10.BoMOXfvp_rJ0xj.webp 828w, /_astro/01_07_10.BoMOXfvp_Z28XiC6.webp 1080w, /_astro/01_07_10.BoMOXfvp_Z9bByC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;対岸を渡りました。進みます。&lt;/p&gt;&lt;p&gt;右手には間欠泉があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_11.Cysq5Wab_1f5U2H.webp&quot; srcset=&quot;/_astro/01_07_11.Cysq5Wab_168VjR.webp 640w, /_astro/01_07_11.Cysq5Wab_ZdAEvj.webp 750w, /_astro/01_07_11.Cysq5Wab_Z1CAfRk.webp 828w, /_astro/01_07_11.Cysq5Wab_ZJFL0L.webp 1080w, /_astro/01_07_11.Cysq5Wab_1f5U2H.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんなところも通ります。上には上りません。&lt;/p&gt;&lt;p&gt;左手の方に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_12.D9u8QfPZ_Z1zTEDV.webp&quot; srcset=&quot;/_astro/01_07_12.D9u8QfPZ_vxjSY.webp 640w, /_astro/01_07_12.D9u8QfPZ_ZNcgVc.webp 750w, /_astro/01_07_12.D9u8QfPZ_Z2dbRid.webp 828w, /_astro/01_07_12.D9u8QfPZ_1uuM6w.webp 1080w, /_astro/01_07_12.D9u8QfPZ_Z1zTEDV.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進むと、こんな砂地の上り坂があります。&lt;/p&gt;&lt;p&gt;そこを上ります。強クモにご注意を。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_13.BmNmXQLZ_1rqWmU.webp&quot; srcset=&quot;/_astro/01_07_13.BmNmXQLZ_ZQwsE8.webp 640w, /_astro/01_07_13.BmNmXQLZ_Z2bh4uj.webp 750w, /_astro/01_07_13.BmNmXQLZ_1tUsWB.webp 828w, /_astro/01_07_13.BmNmXQLZ_ZxkIFy.webp 1080w, /_astro/01_07_13.BmNmXQLZ_1rqWmU.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。森林の方に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_14.BsvE7z3L_Z22o44M.webp&quot; srcset=&quot;/_astro/01_07_14.BsvE7z3L_Z1ip3Gh.webp 640w, /_astro/01_07_14.BsvE7z3L_2s2tht.webp 750w, /_astro/01_07_14.BsvE7z3L_132RUs.webp 828w, /_astro/01_07_14.BsvE7z3L_131nFF.webp 1080w, /_astro/01_07_14.BsvE7z3L_Z22o44M.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このような森林地帯に出ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_15.DiXRw3Cp_1pPB0J.webp&quot; srcset=&quot;/_astro/01_07_15.DiXRw3Cp_1Uw32h.webp 640w, /_astro/01_07_15.DiXRw3Cp_ALrc6.webp 750w, /_astro/01_07_15.DiXRw3Cp_ZNd99U.webp 828w, /_astro/01_07_15.DiXRw3Cp_ZyV52J.webp 1080w, /_astro/01_07_15.DiXRw3Cp_1pPB0J.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;森林地帯を右手の道なりに進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_16.tdZ4T7k2_knIPw.webp&quot; srcset=&quot;/_astro/01_07_16.tdZ4T7k2_ZyHAob.webp 640w, /_astro/01_07_16.tdZ4T7k2_Z1Sscem.webp 750w, /_astro/01_07_16.tdZ4T7k2_1LJldy.webp 828w, /_astro/01_07_16.tdZ4T7k2_Z1EnWcW.webp 1080w, /_astro/01_07_16.tdZ4T7k2_knIPw.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;森林地帯を道なりに進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_17.DyW6SlNR_Z1yRVTS.webp&quot; srcset=&quot;/_astro/01_07_17.DyW6SlNR_ZMsLQR.webp 640w, /_astro/01_07_17.DyW6SlNR_Z27dnH3.webp 750w, /_astro/01_07_17.DyW6SlNR_1xY9JR.webp 828w, /_astro/01_07_17.DyW6SlNR_1vwuPz.webp 1080w, /_astro/01_07_17.DyW6SlNR_Z1yRVTS.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;森林地帯を道なりに進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_18.XgrjbwVh_Z2lq4Kj.webp&quot; srcset=&quot;/_astro/01_07_18.XgrjbwVh_ZY0IsA.webp 640w, /_astro/01_07_18.XgrjbwVh_Z2iKkiL.webp 750w, /_astro/01_07_18.XgrjbwVh_1mrd99.webp 828w, /_astro/01_07_18.XgrjbwVh_IYn09.webp 1080w, /_astro/01_07_18.XgrjbwVh_Z2lq4Kj.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;森林地帯を進んでいると、少し開けた場所に出ます。&lt;/p&gt;&lt;p&gt;右奥に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_19.DGWzse_s_ZNx4BS.webp&quot; srcset=&quot;/_astro/01_07_19.DGWzse_s_x4wR5.webp 640w, /_astro/01_07_19.DGWzse_s_ZLF3X6.webp 750w, /_astro/01_07_19.DGWzse_s_Z2bEEk7.webp 828w, /_astro/01_07_19.DGWzse_s_2gRn8z.webp 1080w, /_astro/01_07_19.DGWzse_s_ZNx4BS.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな岩場があるので、上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_20.D1E2I1h2_1Gg8eQ.webp&quot; srcset=&quot;/_astro/01_07_20.D1E2I1h2_1h1Mc2.webp 640w, /_astro/01_07_20.D1E2I1h2_Z2HND9.webp 750w, /_astro/01_07_20.D1E2I1h2_Z1rHp0a.webp 828w, /_astro/01_07_20.D1E2I1h2_ZivxNC.webp 1080w, /_astro/01_07_20.D1E2I1h2_1Gg8eQ.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう少し上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_21.C4JZ_Q4u_I6pEd.webp&quot; srcset=&quot;/_astro/01_07_21.C4JZ_Q4u_1p7L4C.webp 640w, /_astro/01_07_21.C4JZ_Q4u_5naer.webp 750w, /_astro/01_07_21.C4JZ_Q4u_Z1jBq7z.webp 828w, /_astro/01_07_21.C4JZ_Q4u_Z1gFgog.webp 1080w, /_astro/01_07_21.C4JZ_Q4u_I6pEd.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;登ったら広い空間があるので、そこに向かって進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_22.BTsnyGai_ZX3Ifp.webp&quot; srcset=&quot;/_astro/01_07_22.BTsnyGai_Zhg9bj.webp 640w, /_astro/01_07_22.BTsnyGai_Z1B0K1u.webp 750w, /_astro/01_07_22.BTsnyGai_24bMqq.webp 828w, /_astro/01_07_22.BTsnyGai_27lIv3.webp 1080w, /_astro/01_07_22.BTsnyGai_ZX3Ifp.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうすると硫黄に到着です。ブタ3匹が護っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_07_23.C0tro3IW_ZPuYWO.webp&quot; srcset=&quot;/_astro/01_07_23.C0tro3IW_214bX2.webp 640w, /_astro/01_07_23.C0tro3IW_GjA7Q.webp 750w, /_astro/01_07_23.C0tro3IW_ZHF0ea.webp 828w, /_astro/01_07_23.C0tro3IW_2eTrMD.webp 1080w, /_astro/01_07_23.C0tro3IW_ZPuYWO.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その8：東部の湿地の近く&lt;a href=&quot;#その8東部の湿地の近く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この鉱床の位置はここです。
&lt;img loading=&quot;lazy&quot; width=&quot;2051&quot; height=&quot;976&quot; src=&quot;/_astro/01_08_01.BrZs-UEI_AGIIy.webp&quot; srcset=&quot;/_astro/01_08_01.BrZs-UEI_2pQg1S.webp 640w, /_astro/01_08_01.BrZs-UEI_19Nh1s.webp 750w, /_astro/01_08_01.BrZs-UEI_21zf8n.webp 828w, /_astro/01_08_01.BrZs-UEI_1Sqxrw.webp 1080w, /_astro/01_08_01.BrZs-UEI_Z17Ej29.webp 1280w, /_astro/01_08_01.BrZs-UEI_Z1wYQSe.webp 1668w, /_astro/01_08_01.BrZs-UEI_Z2q1UzN.webp 2048w, /_astro/01_08_01.BrZs-UEI_AGIIy.webp 2051w&quot; /&gt;&lt;/p&gt;&lt;p&gt;東の湿地にある、この滝から南方に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_02.C0mjwxTY_Z1Y9uKI.webp&quot; srcset=&quot;/_astro/01_08_02.C0mjwxTY_Z1CjsIS.webp 640w, /_astro/01_08_02.C0mjwxTY_2884eR.webp 750w, /_astro/01_08_02.C0mjwxTY_I8sRQ.webp 828w, /_astro/01_08_02.C0mjwxTY_16fVYJ.webp 1080w, /_astro/01_08_02.C0mjwxTY_Z1Y9uKI.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂を登っていきます。画面の場所は、先程の滝の前で、元々池だった場所を土台で埋めている状態です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_03.DWDzYIsT_Z2iQbHH.webp&quot; srcset=&quot;/_astro/01_08_03.DWDzYIsT_u7Qjr.webp 640w, /_astro/01_08_03.DWDzYIsT_ZOBJvJ.webp 750w, /_astro/01_08_03.DWDzYIsT_Z2eBkRK.webp 828w, /_astro/01_08_03.DWDzYIsT_Lyg2K.webp 1080w, /_astro/01_08_03.DWDzYIsT_Z2iQbHH.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂を登っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_04.BbszyihJ_2kl9A5.webp&quot; srcset=&quot;/_astro/01_08_04.BbszyihJ_9eW3p.webp 640w, /_astro/01_08_04.BbszyihJ_Z1auDLL.webp 750w, /_astro/01_08_04.BbszyihJ_2uGSF9.webp 828w, /_astro/01_08_04.BbszyihJ_kyswB.webp 1080w, /_astro/01_08_04.BbszyihJ_2kl9A5.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂を登ると、水溜りが点在している場所に着きます。そのエリアの右端に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_05.Cbgpaqw4_1kjxdq.webp&quot; srcset=&quot;/_astro/01_08_05.Cbgpaqw4_Z1vM33A.webp 640w, /_astro/01_08_05.Cbgpaqw4_2eEtUa.webp 750w, /_astro/01_08_05.Cbgpaqw4_OESy9.webp 828w, /_astro/01_08_05.Cbgpaqw4_ZEs8P3.webp 1080w, /_astro/01_08_05.Cbgpaqw4_1kjxdq.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右端を歩いていると、石灰岩の鉱床があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_06.BSvkMlT9_1gBrcb.webp&quot; srcset=&quot;/_astro/01_08_06.BSvkMlT9_Z2kVirq.webp 640w, /_astro/01_08_06.BSvkMlT9_1pvewk.webp 750w, /_astro/01_08_06.BSvkMlT9_vDaj.webp 828w, /_astro/01_08_06.BSvkMlT9_ZIaeQi.webp 1080w, /_astro/01_08_06.BSvkMlT9_1gBrcb.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その鉱床付近で、土台で上り坂を作ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_07.CkbsddyJ_Z2db6dk.webp&quot; srcset=&quot;/_astro/01_08_07.CkbsddyJ_ZtIk31.webp 640w, /_astro/01_08_07.CkbsddyJ_Z1NsUSc.webp 750w, /_astro/01_08_07.CkbsddyJ_1QIByI.webp 828w, /_astro/01_08_07.CkbsddyJ_Relx8.webp 1080w, /_astro/01_08_07.CkbsddyJ_Z2db6dk.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;作った坂道を登っていくと、右手に鉱床を見つけました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_08_08.UmfJq3W9_ZV9ucs.webp&quot; srcset=&quot;/_astro/01_08_08.UmfJq3W9_ZVdX3S.webp 640w, /_astro/01_08_08.UmfJq3W9_Z2fXyT4.webp 750w, /_astro/01_08_08.UmfJq3W9_1pdXxQ.webp 828w, /_astro/01_08_08.UmfJq3W9_29fWy0.webp 1080w, /_astro/01_08_08.UmfJq3W9_ZV9ucs.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを快適に&lt;a href=&quot;#satisfactoryを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;マウスその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Razer Orochi V2 ゲーミングマウス ワイヤレス 超軽量60g HyperSpeed Bluetooth 2つの無線モード 最大950時間バッテリー持続 5G 高性能 18000 DPI オプティカルセンサー 【日本正規代理店保証品】 RZ01-03730100-R3A1&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその3&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;アイ・オー・データ IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz AHVAパネル ブラック(HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-GDQ271JA&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】トカゲイヌの楽園よ永遠に・・・ 〜 Goodbye, Lizard Doggo Paradise 〜</title><link>https://endorphinbath.com/posts/satisfactory-goodbye-doggo-paradise/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-goodbye-doggo-paradise/</guid><description>オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、トカゲイヌ「Lizard Doggo」との思い出を綴ります。</description><pubDate>Sun, 25 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ・・・、なんてことだ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;My Sweet Doggoがいなくなってるじゃないか！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;な、なんてことだ・・・&lt;a href=&quot;#ななんてことだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この記事は、SatisfactoryのUpdate 6が為されたことによって、僕のLizard Doggoたちが消えてしまった悲しい事故を綴ったものになります。特に攻略記事というわけではありません。&lt;/p&gt;&lt;p&gt;こんなに変わっちまったかあ・・・&lt;/p&gt;&lt;p&gt;（以下のSatisfactoryのマップの引用元は&lt;a href=&quot;https://www.reddit.com/r/SatisfactoryGame/comments/dmmp3d/complete_biome_map/&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;です）&lt;/p&gt;&lt;section&gt;&lt;h3&gt;中部の湿地が変わっちまった・・・&lt;a href=&quot;#中部の湿地が変わっちまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;中部の湿地には、Lizard Doggoが多くいました。（5、6匹くらい）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/01.D-qvbkCX_ZkYvE3.webp&quot; srcset=&quot;/_astro/01.D-qvbkCX_kYEir.webp 640w, /_astro/01.D-qvbkCX_Z21vsHH.webp 750w, /_astro/01.D-qvbkCX_Z1cyumh.webp 828w, /_astro/01.D-qvbkCX_Zy0L60.webp 1080w, /_astro/01.D-qvbkCX_q9HPz.webp 1280w, /_astro/01.D-qvbkCX_27uasI.webp 1668w, /_astro/01.D-qvbkCX_Z1f92i6.webp 2048w, /_astro/01.D-qvbkCX_ZkYvE3.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;地図だとここらへんに当たります。
&lt;img loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;966&quot; src=&quot;/_astro/02.hQvVmr_L_ZdJJQ9.webp&quot; srcset=&quot;/_astro/02.hQvVmr_L_Z2zQIz.webp 640w, /_astro/02.hQvVmr_L_Z1UIPjM.webp 750w, /_astro/02.hQvVmr_L_2q1r0u.webp 828w, /_astro/02.hQvVmr_L_ZdJJQ9.webp 960w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この頃は、ハイパーチューブで中部の湿地に降りる時、沢山のDoggoが柵の中で僕の方にダッシュしてくるのがとても愛らしかったです。&lt;/p&gt;&lt;p&gt;しかし、今となっては、2、3匹ほどに減ってしまいました。（それでも他の場所と比べて多いけど）&lt;/p&gt;&lt;p&gt;僕の帰りを待ってくれているDoggoが減ってしまい、悲しいです・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/03.C7KXwP7R_ZWI0AN.webp&quot; srcset=&quot;/_astro/03.C7KXwP7R_ZufwUp.webp 640w, /_astro/03.C7KXwP7R_2dqsRn.webp 750w, /_astro/03.C7KXwP7R_Z22NGA8.webp 828w, /_astro/03.C7KXwP7R_Z1aJg2K.webp 1080w, /_astro/03.C7KXwP7R_ZbyL6b.webp 1280w, /_astro/03.C7KXwP7R_1uKFvX.webp 1668w, /_astro/03.C7KXwP7R_Z1QRweQ.webp 2048w, /_astro/03.C7KXwP7R_ZWI0AN.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;北の湾が変わっちまった・・・&lt;a href=&quot;#北の湾が変わっちまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Update 5の時は、北の湾にはLizard Doggoが大量に生息していました。（11〜13匹くらい）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/04.D63BZKRH_ZxFdug.webp&quot; srcset=&quot;/_astro/04.D63BZKRH_Z1WuLH9.webp 640w, /_astro/04.D63BZKRH_Kbe5D.webp 750w, /_astro/04.D63BZKRH_1z8cr4.webp 828w, /_astro/04.D63BZKRH_ZKGsVd.webp 1080w, /_astro/04.D63BZKRH_dt10m.webp 1280w, /_astro/04.D63BZKRH_1TNsCv.webp 1668w, /_astro/04.D63BZKRH_Z1rOJ8j.webp 2048w, /_astro/04.D63BZKRH_ZxFdug.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;地図だとこの場所に当たります。
&lt;img loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;966&quot; src=&quot;/_astro/05.C4Ze568R_efBM3.webp&quot; srcset=&quot;/_astro/05.C4Ze568R_ppuTC.webp 640w, /_astro/05.C4Ze568R_Z1sIsFA.webp 750w, /_astro/05.C4Ze568R_Z2cakaf.webp 828w, /_astro/05.C4Ze568R_efBM3.webp 960w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、Update 6が行われ、このエリアの内容がガラリと様変わりし、元々Doggoを囲んでいたスペースの所にちょうど島というか岩といったものが置かれてしまいました。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/06.AZC6m9EV_1ggF1X.webp&quot; srcset=&quot;/_astro/06.AZC6m9EV_Z1IU4kO.webp 640w, /_astro/06.AZC6m9EV_XKVrX.webp 750w, /_astro/06.AZC6m9EV_1MHTNo.webp 828w, /_astro/06.AZC6m9EV_13fpA1.webp 1080w, /_astro/06.AZC6m9EV_22pTwA.webp 1280w, /_astro/06.AZC6m9EV_Z1lqLEc.webp 1668w, /_astro/06.AZC6m9EV_m79nU.webp 2048w, /_astro/06.AZC6m9EV_1ggF1X.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれ、ここらへんに10匹以上ものDoggoがいたはずなんだが・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/07.tzZ7W4oV_ZYyF42.webp&quot; srcset=&quot;/_astro/07.tzZ7W4oV_Z1tlw05.webp 640w, /_astro/07.tzZ7W4oV_1ektMH.webp 750w, /_astro/07.tzZ7W4oV_23hs98.webp 828w, /_astro/07.tzZ7W4oV_Z1czUuY.webp 1080w, /_astro/07.tzZ7W4oV_Zdpqyp.webp 1280w, /_astro/07.tzZ7W4oV_1sU13J.webp 1668w, /_astro/07.tzZ7W4oV_Z1SIbH5.webp 2048w, /_astro/07.tzZ7W4oV_ZYyF42.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あれ？ 岩が出来てる？
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/08.JtCi3MQF_Zgy73C.webp&quot; srcset=&quot;/_astro/08.JtCi3MQF_F9ab2.webp 640w, /_astro/08.JtCi3MQF_Z1GlWP7.webp 750w, /_astro/08.JtCi3MQF_ZRoYtG.webp 828w, /_astro/08.JtCi3MQF_Ztzmuz.webp 1080w, /_astro/08.JtCi3MQF_uA7r0.webp 1280w, /_astro/08.JtCi3MQF_2bUz49.webp 1668w, /_astro/08.JtCi3MQF_Z1aHCGF.webp 2048w, /_astro/08.JtCi3MQF_Zgy73C.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;完全にこの岩、ヤッてるよなあ・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/09.D2VAxIJy_do4kC.webp&quot; srcset=&quot;/_astro/09.D2VAxIJy_w6HHE.webp 640w, /_astro/09.D2VAxIJy_Z1Popiu.webp 750w, /_astro/09.D2VAxIJy_Z11rqW4.webp 828w, /_astro/09.D2VAxIJy_mNSF.webp 1080w, /_astro/09.D2VAxIJy_YxiPf.webp 1280w, /_astro/09.D2VAxIJy_Z2ojnlx.webp 1668w, /_astro/09.D2VAxIJy_ZFKriq.webp 2048w, /_astro/09.D2VAxIJy_do4kC.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おい、タッカー・・・！！
&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;1070&quot; src=&quot;/_astro/10.zgM3LHwJ_Z1bwG1t.webp&quot; srcset=&quot;/_astro/10.zgM3LHwJ_Z1bwG1t.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ダジャレを言うガキも嫌いだよ&lt;/p&gt;&lt;p&gt;ああ、Doggoたち元気かなあ・・・&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Doggoの脚力が変わっちまった・・・&lt;a href=&quot;#doggoの脚力が変わっちまった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Update 5では、手すり用の柵を設ければ、Doggoを中に留めておくことが可能でした。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/11.CFsRX9tz_1viTsb.webp&quot; srcset=&quot;/_astro/11.CFsRX9tz_eDdj2.webp 640w, /_astro/11.CFsRX9tz_Z27QTH7.webp 750w, /_astro/11.CFsRX9tz_Z1iTVlG.webp 828w, /_astro/11.CFsRX9tz_1ihE1e.webp 1080w, /_astro/11.CFsRX9tz_2hs8WN.webp 1280w, /_astro/11.CFsRX9tz_Z16oxdY.webp 1668w, /_astro/11.CFsRX9tz_B9nO8.webp 2048w, /_astro/11.CFsRX9tz_1viTsb.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、Update 6の後、この柵だと軽〜くDoggoに乗り越えられてしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;202&quot; src=&quot;/_astro/12.UIsXQZEL_ZePtVY.webp&quot; srcset=&quot;/_astro/12.UIsXQZEL_ZePtVY.webp 360w&quot; /&gt;&lt;/p&gt;&lt;p&gt;お前ら・・・成長したな！&lt;/p&gt;&lt;p&gt;そのため、Doggoがどこかに行かないように、外から見たい場合には、ガラスフレームで囲うことにしました。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/03.C7KXwP7R_ZWI0AN.webp&quot; srcset=&quot;/_astro/03.C7KXwP7R_ZufwUp.webp 640w, /_astro/03.C7KXwP7R_2dqsRn.webp 750w, /_astro/03.C7KXwP7R_Z22NGA8.webp 828w, /_astro/03.C7KXwP7R_Z1aJg2K.webp 1080w, /_astro/03.C7KXwP7R_ZbyL6b.webp 1280w, /_astro/03.C7KXwP7R_1uKFvX.webp 1668w, /_astro/03.C7KXwP7R_Z1QRweQ.webp 2048w, /_astro/03.C7KXwP7R_ZWI0AN.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他、Doggoの写真&lt;a href=&quot;#その他doggoの写真&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;お前たちは主人にケツを向けて何をやっているんだ？（ウラン廃棄物まで拾ってきやがって・・・）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/31.BgNAytjJ_Z2liUeN.webp&quot; srcset=&quot;/_astro/31.BgNAytjJ_Z1G1Izu.webp 640w, /_astro/31.BgNAytjJ_11Ehdi.webp 750w, /_astro/31.BgNAytjJ_1PBfyI.webp 828w, /_astro/31.BgNAytjJ_2vQX8b.webp 1080w, /_astro/31.BgNAytjJ_Z1z9FJb.webp 1280w, /_astro/31.BgNAytjJ_7aKRX.webp 1668w, /_astro/31.BgNAytjJ_1OIGV5.webp 2048w, /_astro/31.BgNAytjJ_Z2liUeN.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;お前ら、何で主人を避けているんだ（テイムが解けている）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/32.UpxPCMCo_dLmzU.webp&quot; srcset=&quot;/_astro/32.UpxPCMCo_Z1UXoSM.webp 640w, /_astro/32.UpxPCMCo_LHAT0.webp 750w, /_astro/32.UpxPCMCo_1AEzfq.webp 828w, /_astro/32.UpxPCMCo_K78X.webp 1080w, /_astro/32.UpxPCMCo_YUB5x.webp 1280w, /_astro/32.UpxPCMCo_Z2nV56f.webp 1668w, /_astro/32.UpxPCMCo_ZFn938.webp 2048w, /_astro/32.UpxPCMCo_dLmzU.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあまあ、落ち着いて語り明かそうや（テイムし直すとデレる）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/33.CznyZLop_1kb0tD.webp&quot; srcset=&quot;/_astro/33.CznyZLop_1xkrzT.webp 640w, /_astro/33.CznyZLop_ZOaFqf.webp 750w, /_astro/33.CznyZLop_ZdH4O.webp 828w, /_astro/33.CznyZLop_179K2G.webp 1080w, /_astro/33.CznyZLop_26keYg.webp 1280w, /_astro/33.CznyZLop_Z1hwrcw.webp 1668w, /_astro/33.CznyZLop_q1tPA.webp 2048w, /_astro/33.CznyZLop_1kb0tD.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな時間も無くなってしまうんだなあ・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この悲しみを超えて、新しいDoggoの園を探すのじゃ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】レアな資源の場所（石英）</title><link>https://endorphinbath.com/posts/satisfactory-where-is-rare-item2/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-where-is-rare-item2/</guid><description>オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、石英を入手できる場所を紹介します。</description><pubDate>Fri, 23 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見つからんぞお・・・、見つからんぞおっ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何が悲しくて泣いておるのじゃ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;石英が全く見つからん・・・この地下にあるはずなのにっ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこの石英か〜。じゃあ、今回は石英のついでにその他のアイテムの位置も紹介するぜ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の記事は、update 6のときの情報です&lt;a href=&quot;#今回の記事はupdate-6のときの情報です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介する内容は、Satisfactory update 6のときの情報です。&lt;/p&gt;&lt;p&gt;それ以降のバージョンでは、情報が異なる可能性があることをご了承下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;石英の鉱床の場所&lt;a href=&quot;#石英の鉱床の場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;石英の鉱床になります。&lt;/p&gt;&lt;p&gt;場所は、6箇所になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：中央の平原&lt;a href=&quot;#その1中央の平原&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここの石英は、この中央の平原にあります。この池が見える場所から向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;986&quot; src=&quot;/_astro/01_01_01.B0u5a2zL_Z1sq9xi.webp&quot; srcset=&quot;/_astro/01_01_01.B0u5a2zL_Wtp3m.webp 640w, /_astro/01_01_01.B0u5a2zL_1YoCDA.webp 750w, /_astro/01_01_01.B0u5a2zL_Z1x4n3X.webp 828w, /_astro/01_01_01.B0u5a2zL_Z1Ydrsh.webp 1080w, /_astro/01_01_01.B0u5a2zL_Z20bie7.webp 1280w, /_astro/01_01_01.B0u5a2zL_aAb10.webp 1668w, /_astro/01_01_01.B0u5a2zL_Z1sq9xi.webp 2048w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_02.CpvGeVDw_15b5Ru.webp&quot; srcset=&quot;/_astro/01_01_02.CpvGeVDw_1doj6N.webp 640w, /_astro/01_01_02.CpvGeVDw_Z6lhIn.webp 750w, /_astro/01_01_02.CpvGeVDw_Z1vkS5o.webp 828w, /_astro/01_01_02.CpvGeVDw_Z294ksJ.webp 1080w, /_astro/01_01_02.CpvGeVDw_15b5Ru.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;赤い森林に向かって、北の方に行きます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_03.DvYfqPB8_uME6O.webp&quot; srcset=&quot;/_astro/01_01_03.DvYfqPB8_Z1fPbAz.webp 640w, /_astro/01_01_03.DvYfqPB8_2uBlnb.webp 750w, /_astro/01_01_03.DvYfqPB8_15BK1a.webp 828w, /_astro/01_01_03.DvYfqPB8_2lJmzw.webp 1080w, /_astro/01_01_03.DvYfqPB8_uME6O.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;向かう途中にこの砂地があります。ハッチャーが居た所です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_04.0sqJqP2Z_2qFFGM.webp&quot; srcset=&quot;/_astro/01_01_04.0sqJqP2Z_h1iyb.webp 640w, /_astro/01_01_04.0sqJqP2Z_Z12Iih0.webp 750w, /_astro/01_01_04.0sqJqP2Z_Z2rHSD1.webp 828w, /_astro/01_01_04.0sqJqP2Z_ZMyJDr.webp 1080w, /_astro/01_01_04.0sqJqP2Z_2qFFGM.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左方の高台に上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_05.BRkeEHqq_1AY9z8.webp&quot; srcset=&quot;/_astro/01_01_05.BRkeEHqq_ZyDpdt.webp 640w, /_astro/01_01_05.BRkeEHqq_Z1So13E.webp 750w, /_astro/01_01_05.BRkeEHqq_1LNwog.webp 828w, /_astro/01_01_05.BRkeEHqq_Z1CggL6.webp 1080w, /_astro/01_01_05.BRkeEHqq_1AY9z8.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスの方です。あの採鉱機の方に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_06.BJml_5px_ZOGPN0.webp&quot; srcset=&quot;/_astro/01_01_06.BJml_5px_1NDRNi.webp 640w, /_astro/01_01_06.BJml_5px_tTgX7.webp 750w, /_astro/01_01_06.BJml_5px_ZU5jnT.webp 828w, /_astro/01_01_06.BJml_5px_11eQEH.webp 1080w, /_astro/01_01_06.BJml_5px_ZOGPN0.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここが鉱床です。2つあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_01_07.DX6wBSxx_kJJYe.webp&quot; srcset=&quot;/_astro/01_01_07.DX6wBSxx_2uY30e.webp 640w, /_astro/01_01_07.DX6wBSxx_1bera3.webp 750w, /_astro/01_01_07.DX6wBSxx_ZdK9bX.webp 828w, /_astro/01_01_07.DX6wBSxx_2bGsrV.webp 1080w, /_astro/01_01_07.DX6wBSxx_kJJYe.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：北西の砂漠の地下の洞窟&lt;a href=&quot;#その2北西の砂漠の地下の洞窟&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、洞窟の入口を探す必要があります。入り口には岩があるのでノーべリスクをお忘れなく。&lt;/p&gt;&lt;p&gt;あと、紹介するルートは毒ガスを通るので、ガスマスクもあった方が良いです。（走り抜けられないわけではないのですが、強クモがいます。）&lt;/p&gt;&lt;p&gt;あと、入り口と洞窟内部の両方とも、クモが沢山出現します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;鉱床までのルートその1&lt;a href=&quot;#鉱床までのルートその1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この海岸から、まず北に向かいます。こんなイメージです。
&lt;img loading=&quot;lazy&quot; width=&quot;1559&quot; height=&quot;971&quot; src=&quot;/_astro/01_02_01.DHuWRAFh_Z1u64Ir.webp&quot; srcset=&quot;/_astro/01_02_01.DHuWRAFh_Zwpbqi.webp 640w, /_astro/01_02_01.DHuWRAFh_gjC54.webp 750w, /_astro/01_02_01.DHuWRAFh_Z11RMQA.webp 828w, /_astro/01_02_01.DHuWRAFh_ZMwmrh.webp 1080w, /_astro/01_02_01.DHuWRAFh_Z2dhW1u.webp 1280w, /_astro/01_02_01.DHuWRAFh_Z1u64Ir.webp 1559w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_02.CIDlC-Aq_Z2s76rS.webp&quot; srcset=&quot;/_astro/01_02_02.CIDlC-Aq_Vpiqb.webp 640w, /_astro/01_02_02.CIDlC-Aq_Znkip0.webp 750w, /_astro/01_02_02.CIDlC-Aq_Z1MjSL1.webp 828w, /_astro/01_02_02.CIDlC-Aq_ZBanYb.webp 1080w, /_astro/01_02_02.CIDlC-Aq_Z2s76rS.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;川を越えて行って・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_03.BKhshoAg_Z2lu4l2.webp&quot; srcset=&quot;/_astro/01_02_03.BKhshoAg_hAKRp.webp 640w, /_astro/01_02_03.BKhshoAg_Z128OWL.webp 750w, /_astro/01_02_03.BKhshoAg_Z2r8qjM.webp 828w, /_astro/01_02_03.BKhshoAg_ZuxlRk.webp 1080w, /_astro/01_02_03.BKhshoAg_Z2lu4l2.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;坂道を登っていって・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_04.BGOpcVsn_ZNrhHa.webp&quot; srcset=&quot;/_astro/01_02_04.BGOpcVsn_1DFWy6.webp 640w, /_astro/01_02_04.BGOpcVsn_jVlHU.webp 750w, /_astro/01_02_04.BGOpcVsn_Z153eD6.webp 828w, /_astro/01_02_04.BGOpcVsn_12upKx.webp 1080w, /_astro/01_02_04.BGOpcVsn_ZNrhHa.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;岩壁を時計回りに回り込んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_05.cX-CivIB_1NS9F0.webp&quot; srcset=&quot;/_astro/01_02_05.cX-CivIB_Z22hxFy.webp 640w, /_astro/01_02_05.cX-CivIB_1I9Yic.webp 750w, /_astro/01_02_05.cX-CivIB_janVb.webp 828w, /_astro/01_02_05.cX-CivIB_Z1pmgFe.webp 1080w, /_astro/01_02_05.cX-CivIB_1NS9F0.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;回り込んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_06.OwNyT2d4_1mP0Ol.webp&quot; srcset=&quot;/_astro/01_02_06.OwNyT2d4_4UiUq.webp 640w, /_astro/01_02_06.OwNyT2d4_Z1eOhTK.webp 750w, /_astro/01_02_06.OwNyT2d4_2qnfxa.webp 828w, /_astro/01_02_06.OwNyT2d4_Z1QppvS.webp 1080w, /_astro/01_02_06.OwNyT2d4_1mP0Ol.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;回り込んでいくと、奥の砂地が見えてきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_08.QXq3_-_R_Z2v6CPQ.webp&quot; srcset=&quot;/_astro/01_02_08.QXq3_-_R_Z1bKFp3.webp 640w, /_astro/01_02_08.QXq3_-_R_Z2vvhfe.webp 750w, /_astro/01_02_08.QXq3_-_R_19GgcG.webp 828w, /_astro/01_02_08.QXq3_-_R_ZE9Un9.webp 1080w, /_astro/01_02_08.QXq3_-_R_Z2v6CPQ.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;洞窟の入り口周辺です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_09.FDCIO7tL_2mgr5t.webp&quot; srcset=&quot;/_astro/01_02_09.FDCIO7tL_Z21cQMB.webp 640w, /_astro/01_02_09.FDCIO7tL_1JeFb9.webp 750w, /_astro/01_02_09.FDCIO7tL_kf4O8.webp 828w, /_astro/01_02_09.FDCIO7tL_ZQXYfK.webp 1080w, /_astro/01_02_09.FDCIO7tL_2mgr5t.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;既に入り口の岩は爆弾で破壊していますが、暗くて不気味な感じです・・・&lt;/p&gt;&lt;p&gt;ここで、小さいクモが出現します。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_10.BmrFMrUu_yKP5D.webp&quot; srcset=&quot;/_astro/01_02_10.BmrFMrUu_ZgF1EI.webp 640w, /_astro/01_02_10.BmrFMrUu_Z1ApCuT.webp 750w, /_astro/01_02_10.BmrFMrUu_24LTW1.webp 828w, /_astro/01_02_10.BmrFMrUu_2pHxyl.webp 1080w, /_astro/01_02_10.BmrFMrUu_yKP5D.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;入り口を入りました。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_11.DqtCohCD_Z9gVao.webp&quot; srcset=&quot;/_astro/01_02_11.DqtCohCD_1uXBjL.webp 640w, /_astro/01_02_11.DqtCohCD_be0tA.webp 750w, /_astro/01_02_11.DqtCohCD_Z1dKzRq.webp 828w, /_astro/01_02_11.DqtCohCD_1GELij.webp 1080w, /_astro/01_02_11.DqtCohCD_Z9gVao.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいくと、毒ガスのエリアに入ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_12.D1ETZQCJ_A9aJX.webp&quot; srcset=&quot;/_astro/01_02_12.D1ETZQCJ_Z1TGdFK.webp 640w, /_astro/01_02_12.D1ETZQCJ_1PKji0.webp 750w, /_astro/01_02_12.D1ETZQCJ_qKHUY.webp 828w, /_astro/01_02_12.D1ETZQCJ_2r5SdF.webp 1080w, /_astro/01_02_12.D1ETZQCJ_A9aJX.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスの中を進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_13.DNyLOWPK_1l3b00.webp&quot; srcset=&quot;/_astro/01_02_13.DNyLOWPK_Z2ddFMq.webp 640w, /_astro/01_02_13.DNyLOWPK_1xdQbk.webp 750w, /_astro/01_02_13.DNyLOWPK_8efOj.webp 828w, /_astro/01_02_13.DNyLOWPK_Z1Scfle.webp 1080w, /_astro/01_02_13.DNyLOWPK_1l3b00.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスを抜けました。更に進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_14.D24FNDkk_Z11olMA.webp&quot; srcset=&quot;/_astro/01_02_14.D24FNDkk_ZtNBK3.webp 640w, /_astro/01_02_14.D24FNDkk_Z1NydAe.webp 750w, /_astro/01_02_14.D24FNDkk_1QDjQG.webp 828w, /_astro/01_02_14.D24FNDkk_OxlF7.webp 1080w, /_astro/01_02_14.D24FNDkk_Z11olMA.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいくと大きな空間に出ます。この空間に、石英の鉱床が2つあります。大きめのクモと小さいクモの両方が出現します。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_15.eihFHp0E_Z2hGDyp.webp&quot; srcset=&quot;/_astro/01_02_15.eihFHp0E_Z2kn26f.webp 640w, /_astro/01_02_15.eihFHp0E_1q4uRv.webp 750w, /_astro/01_02_15.eihFHp0E_14Tvu.webp 828w, /_astro/01_02_15.eihFHp0E_ZqJV5H.webp 1080w, /_astro/01_02_15.eihFHp0E_Z2hGDyp.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、1つ目の石英の鉱床です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_16.rKHeyr2-_Z1lTMMM.webp&quot; srcset=&quot;/_astro/01_02_16.rKHeyr2-_DyK0D.webp 640w, /_astro/01_02_16.rKHeyr2-_ZFaPOx.webp 750w, /_astro/01_02_16.rKHeyr2-_Z25arby.webp 828w, /_astro/01_02_16.rKHeyr2-_u1TEU.webp 1080w, /_astro/01_02_16.rKHeyr2-_Z1lTMMM.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実は、この空間内にはSAMの鉱床もあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_17.mX0Cyoh3_IGB3t.webp&quot; srcset=&quot;/_astro/01_02_17.mX0Cyoh3_3Ei7G.webp 640w, /_astro/01_02_17.mX0Cyoh3_Z1g5iHu.webp 750w, /_astro/01_02_17.mX0Cyoh3_2p7eJq.webp 828w, /_astro/01_02_17.mX0Cyoh3_Z2uxOhK.webp 1080w, /_astro/01_02_17.mX0Cyoh3_IGB3t.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう1つの石英の鉱床は奥にあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_18.CoO81lfx_Z1E6cpb.webp&quot; srcset=&quot;/_astro/01_02_18.CoO81lfx_Z1a5kRH.webp 640w, /_astro/01_02_18.CoO81lfx_Z2tOVHS.webp 750w, /_astro/01_02_18.CoO81lfx_1bmAJ2.webp 828w, /_astro/01_02_18.CoO81lfx_bPv3w.webp 1080w, /_astro/01_02_18.CoO81lfx_Z1E6cpb.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう1つの石英の鉱床です。
&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/01_02_19.mmnGGn5S_dii29.webp&quot; srcset=&quot;/_astro/01_02_19.mmnGGn5S_Z1Uqbto.webp 640w, /_astro/01_02_19.mmnGGn5S_1P1lum.webp 750w, /_astro/01_02_19.mmnGGn5S_q1K8l.webp 828w, /_astro/01_02_19.mmnGGn5S_24f0uQ.webp 1080w, /_astro/01_02_19.mmnGGn5S_dii29.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;鉱床までのルートその2および3&lt;a href=&quot;#鉱床までのルートその2および3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実はこの洞窟には、出入り口が4つあります。&lt;/p&gt;&lt;p&gt;その内の2つを紹介します。&lt;/p&gt;&lt;p&gt;まず、1つ。この位置に入口があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1475&quot; height=&quot;967&quot; src=&quot;/_astro/01_02_31.NjICylb8_Z1jaCeH.webp&quot; srcset=&quot;/_astro/01_02_31.NjICylb8_Z2lopic.webp 640w, /_astro/01_02_31.NjICylb8_2nNC83.webp 750w, /_astro/01_02_31.NjICylb8_Z10Ez2q.webp 828w, /_astro/01_02_31.NjICylb8_5ibbh.webp 1080w, /_astro/01_02_31.NjICylb8_1m1BCw.webp 1280w, /_astro/01_02_31.NjICylb8_Z1jaCeH.webp 1475w&quot; /&gt;&lt;/p&gt;&lt;p&gt;入り口周辺の外観はこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;2107&quot; height=&quot;1177&quot; src=&quot;/_astro/01_02_32.D5MLrDWR_1ngeHL.webp&quot; srcset=&quot;/_astro/01_02_32.D5MLrDWR_ZBzcI8.webp 640w, /_astro/01_02_32.D5MLrDWR_ZTSID2.webp 750w, /_astro/01_02_32.D5MLrDWR_Z8puJx.webp 828w, /_astro/01_02_32.D5MLrDWR_vSaiT.webp 1080w, /_astro/01_02_32.D5MLrDWR_rlhlG.webp 1280w, /_astro/01_02_32.D5MLrDWR_Zjlf3J.webp 1668w, /_astro/01_02_32.D5MLrDWR_NqJaO.webp 2048w, /_astro/01_02_32.D5MLrDWR_1ngeHL.webp 2107w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう1つの入口はここらへんです。
&lt;img loading=&quot;lazy&quot; width=&quot;2059&quot; height=&quot;983&quot; src=&quot;/_astro/01_02_33.TNmYhUPq_Z1bxNQs.webp&quot; srcset=&quot;/_astro/01_02_33.TNmYhUPq_Z14djEE.webp 640w, /_astro/01_02_33.TNmYhUPq_Z2kgiF5.webp 750w, /_astro/01_02_33.TNmYhUPq_Z1sukya.webp 828w, /_astro/01_02_33.TNmYhUPq_Z1FLG4I.webp 1080w, /_astro/01_02_33.TNmYhUPq_2oG6vS.webp 1280w, /_astro/01_02_33.TNmYhUPq_Z20WAx.webp 1668w, /_astro/01_02_33.TNmYhUPq_254YpI.webp 2048w, /_astro/01_02_33.TNmYhUPq_Z1bxNQs.webp 2059w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その入口の周辺の外観はこんな感じです。ハッチャーの巣が3つありました。&lt;/p&gt;&lt;p&gt;左の土台は気にしないで下さい。ハッチャーがスポーンしないように建てただけです。
&lt;img loading=&quot;lazy&quot; width=&quot;2110&quot; height=&quot;1182&quot; src=&quot;/_astro/01_02_34.d-MXModK_Z1KOa2t.webp&quot; srcset=&quot;/_astro/01_02_34.d-MXModK_Z2he7Dk.webp 640w, /_astro/01_02_34.d-MXModK_Zyb8hS.webp 750w, /_astro/01_02_34.d-MXModK_Z1N4pEJ.webp 828w, /_astro/01_02_34.d-MXModK_1f4Wtf.webp 1080w, /_astro/01_02_34.d-MXModK_1ax4w2.webp 1280w, /_astro/01_02_34.d-MXModK_oPx6B.webp 1668w, /_astro/01_02_34.d-MXModK_Z214PUF.webp 2048w, /_astro/01_02_34.d-MXModK_Z1KOa2t.webp 2110w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：北部の森林の脇&lt;a href=&quot;#その3北部の森林の脇&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここの鉱床も2つペアで設置されています。&lt;/p&gt;&lt;p&gt;出発地点は、「その2：北西の砂漠の地下の洞窟」の石英の鉱床から東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1596&quot; height=&quot;971&quot; src=&quot;/_astro/01_03_01.DzteGXV1_Z1JAqqd.webp&quot; srcset=&quot;/_astro/01_03_01.DzteGXV1_HQBdi.webp 640w, /_astro/01_03_01.DzteGXV1_Z2vsksR.webp 750w, /_astro/01_03_01.DzteGXV1_2jEL0O.webp 828w, /_astro/01_03_01.DzteGXV1_Z2oVNb5.webp 1080w, /_astro/01_03_01.DzteGXV1_kpRqT.webp 1280w, /_astro/01_03_01.DzteGXV1_Z1JAqqd.webp 1596w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_02.B-dysOim_1djvCT.webp&quot; srcset=&quot;/_astro/01_03_02.B-dysOim_zw12t.webp 640w, /_astro/01_03_02.B-dysOim_ZJdzMH.webp 750w, /_astro/01_03_02.B-dysOim_Z29db9I.webp 828w, /_astro/01_03_02.B-dysOim_1djvCT.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;洞窟を東に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_03.BgRAN_CK_Z1DlrbM.webp&quot; srcset=&quot;/_astro/01_03_03.BgRAN_CK_Z28cWwN.webp 640w, /_astro/01_03_03.BgRAN_CK_1CezqW.webp 750w, /_astro/01_03_03.BgRAN_CK_deY4V.webp 828w, /_astro/01_03_03.BgRAN_CK_Z1DlrbM.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいくと分岐点に差し掛かりますので、そこを右の方に進みます。（左の方は、先ほど紹介した、この洞窟の3番目の出入り口になります。）
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_04.ux46pcBH_meJRf.webp&quot; srcset=&quot;/_astro/01_03_04.ux46pcBH_ZUcY5E.webp 640w, /_astro/01_03_04.ux46pcBH_Z2eWzUP.webp 750w, /_astro/01_03_04.ux46pcBH_1qeWw5.webp 828w, /_astro/01_03_04.ux46pcBH_meJRf.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_05.B_ZUh8mU_Z1nQvnA.webp&quot; srcset=&quot;/_astro/01_03_05.B_ZUh8mU_1tq8zH.webp 640w, /_astro/01_03_05.B_ZUh8mU_9FwJw.webp 750w, /_astro/01_03_05.B_ZUh8mU_Z1fj3Bu.webp 828w, /_astro/01_03_05.B_ZUh8mU_Z1nQvnA.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;さらに進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_06.0_GFqIp7_Z27EMQB.webp&quot; srcset=&quot;/_astro/01_03_06.0_GFqIp7_MWoAc.webp 640w, /_astro/01_03_06.0_GFqIp7_ZvMceY.webp 750w, /_astro/01_03_06.0_GFqIp7_Z1ULMB0.webp 828w, /_astro/01_03_06.0_GFqIp7_Z27EMQB.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいくと、こんな感じのツタにぶち当たります。ここが洞窟の最後の出入り口です。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_07.txcZXzSA_Z1o09H0.webp&quot; srcset=&quot;/_astro/01_03_07.txcZXzSA_ZNEBYh.webp 640w, /_astro/01_03_07.txcZXzSA_Z28pdOs.webp 750w, /_astro/01_03_07.txcZXzSA_1wMjCs.webp 828w, /_astro/01_03_07.txcZXzSA_Z1o09H0.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;洞窟から出ると、湖が見えます。石英の鉱床はその湖を挟んだ対岸にあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_08.BKTcTp5y_29eUiY.webp&quot; srcset=&quot;/_astro/01_03_08.BKTcTp5y_16ncwf.webp 640w, /_astro/01_03_08.BKTcTp5y_ZdmoiV.webp 750w, /_astro/01_03_08.BKTcTp5y_Z1ClYEW.webp 828w, /_astro/01_03_08.BKTcTp5y_29eUiY.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;対岸は、あの高台に当たります。土台が伸びている先がそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_09.DvRlxVeR_Z1kaKRV.webp&quot; srcset=&quot;/_astro/01_03_09.DvRlxVeR_ZtwiVp.webp 640w, /_astro/01_03_09.DvRlxVeR_Z1NgTLA.webp 750w, /_astro/01_03_09.DvRlxVeR_1QUCFk.webp 828w, /_astro/01_03_09.DvRlxVeR_Z1kaKRV.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左手に見える採鉱機が、石英の鉱床のものになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_10.DfMp8qqf_Z1gEVm1.webp&quot; srcset=&quot;/_astro/01_03_10.DfMp8qqf_Z2ru6W0.webp 640w, /_astro/01_03_10.DfMp8qqf_1iWq1K.webp 750w, /_astro/01_03_10.DfMp8qqf_Z62akg.webp 828w, /_astro/01_03_10.DfMp8qqf_Z1gEVm1.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここにある2つの石英の鉱床を並んでみると、こんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;576&quot; src=&quot;/_astro/01_03_11.DAI6iTSC_1v7XkS.webp&quot; srcset=&quot;/_astro/01_03_11.DAI6iTSC_Z1cXeX7.webp 640w, /_astro/01_03_11.DAI6iTSC_Z2wHPNi.webp 750w, /_astro/01_03_11.DAI6iTSC_18tGDC.webp 828w, /_astro/01_03_11.DAI6iTSC_1v7XkS.webp 1024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：北東の砂漠の北部&lt;a href=&quot;#その4北東の砂漠の北部&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この鉱床のルートは特に紹介しません。&lt;/p&gt;&lt;p&gt;オブジェクトスキャナーで読み取って、容易にたどりつけると思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2059&quot; height=&quot;976&quot; src=&quot;/_astro/01_04_01.D_4tKBJm_1w4gYv.webp&quot; srcset=&quot;/_astro/01_04_01.D_4tKBJm_Z2ukVcL.webp 640w, /_astro/01_04_01.D_4tKBJm_gEOYk.webp 750w, /_astro/01_04_01.D_4tKBJm_2bzbHE.webp 828w, /_astro/01_04_01.D_4tKBJm_1ScEye.webp 1080w, /_astro/01_04_01.D_4tKBJm_Z17SbUr.webp 1280w, /_astro/01_04_01.D_4tKBJm_wPnjz.webp 1668w, /_astro/01_04_01.D_4tKBJm_1IRrI6.webp 2048w, /_astro/01_04_01.D_4tKBJm_1w4gYv.webp 2059w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この鉱床の近くには、水の吹出口もあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_02.Djeu51vR_ZILUsN.webp&quot; srcset=&quot;/_astro/01_04_02.Djeu51vR_Z1JQzJU.webp 640w, /_astro/01_04_02.Djeu51vR_20zWdP.webp 750w, /_astro/01_04_02.Djeu51vR_AAlQO.webp 828w, /_astro/01_04_02.Djeu51vR_2lCwhE.webp 1080w, /_astro/01_04_02.Djeu51vR_ZILUsN.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらが石英の鉱床になります。2つの鉱床が設置されています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_04_03.CPw4lYmU_sqh3m.webp&quot; srcset=&quot;/_astro/01_04_03.CPw4lYmU_Z1dtkHY.webp 640w, /_astro/01_04_03.CPw4lYmU_2wXcfL.webp 750w, /_astro/01_04_03.CPw4lYmU_17XASK.webp 828w, /_astro/01_04_03.CPw4lYmU_Z1wlp07.webp 1080w, /_astro/01_04_03.CPw4lYmU_sqh3m.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その5：東側の湿地と砂漠の間（その1）&lt;a href=&quot;#その5東側の湿地と砂漠の間その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここには鉱床が3つあります。&lt;/p&gt;&lt;p&gt;この鉱床へは、北東の砂漠から南方に向かいます。&lt;/p&gt;&lt;p&gt;この砂漠のオアシス的な場所から出発します。
&lt;img loading=&quot;lazy&quot; width=&quot;2053&quot; height=&quot;987&quot; src=&quot;/_astro/01_05_01.C84EfPVa_Z1eEYGs.webp&quot; srcset=&quot;/_astro/01_05_01.C84EfPVa_Z259kF5.webp 640w, /_astro/01_05_01.C84EfPVa_Z13e74Q.webp 750w, /_astro/01_05_01.C84EfPVa_1xCoCV.webp 828w, /_astro/01_05_01.C84EfPVa_lyFkv.webp 1080w, /_astro/01_05_01.C84EfPVa_2lXkP1.webp 1280w, /_astro/01_05_01.C84EfPVa_ZxrjIN.webp 1668w, /_astro/01_05_01.C84EfPVa_Z2bsEi6.webp 2048w, /_astro/01_05_01.C84EfPVa_Z1eEYGs.webp 2053w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_02.Bjff4rb__Z28auia.webp&quot; srcset=&quot;/_astro/01_05_02.Bjff4rb__Yu3n8.webp 640w, /_astro/01_05_02.Bjff4rb__Zkfxs3.webp 750w, /_astro/01_05_02.Bjff4rb__Z1Jf8O4.webp 828w, /_astro/01_05_02.Bjff4rb__WeWsi.webp 1080w, /_astro/01_05_02.Bjff4rb__Z28auia.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;南に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_03.BnGqsnY5_Zf1luC.webp&quot; srcset=&quot;/_astro/01_05_03.BnGqsnY5_Z1IT1ay.webp 640w, /_astro/01_05_03.BnGqsnY5_21xvNc.webp 750w, /_astro/01_05_03.BnGqsnY5_BxUrb.webp 828w, /_astro/01_05_03.BnGqsnY5_Z2eN2y6.webp 1080w, /_astro/01_05_03.BnGqsnY5_Zf1luC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;南に進み続けます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_04.DsXxhYLK_Z2s3dPr.webp&quot; srcset=&quot;/_astro/01_05_04.DsXxhYLK_Z1NfIdc.webp 640w, /_astro/01_05_04.DsXxhYLK_1WbNKy.webp 750w, /_astro/01_05_04.DsXxhYLK_xcdox.webp 828w, /_astro/01_05_04.DsXxhYLK_CmdU1.webp 1080w, /_astro/01_05_04.DsXxhYLK_Z2s3dPr.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;岩場の間を通ります。ここには強ブタがいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_05.lLH94HvP_259Al2.webp&quot; srcset=&quot;/_astro/01_05_05.lLH94HvP_Z1kisfv.webp 640w, /_astro/01_05_05.lLH94HvP_2q94If.webp 750w, /_astro/01_05_05.lLH94HvP_119tme.webp 828w, /_astro/01_05_05.lLH94HvP_5mThy.webp 1080w, /_astro/01_05_05.lLH94HvP_259Al2.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進み続けると、こんなエリアに出ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_06.Bs72Pomx_vVD0e.webp&quot; srcset=&quot;/_astro/01_05_06.Bs72Pomx_Z22onoA.webp 640w, /_astro/01_05_06.Bs72Pomx_1I39za.webp 750w, /_astro/01_05_06.Bs72Pomx_j3yd9.webp 828w, /_astro/01_05_06.Bs72Pomx_Z1sP33f.webp 1080w, /_astro/01_05_06.Bs72Pomx_vVD0e.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このエリアは起伏が激しいエリアになっており、ブタやらクモやらスピッターが出現します。&lt;/p&gt;&lt;p&gt;あのハードドライブでお馴染みのcrateの方面に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_07.DGSyynVr_Z1baxb2.webp&quot; srcset=&quot;/_astro/01_05_07.DGSyynVr_Z1gIioL.webp 640w, /_astro/01_05_07.DGSyynVr_2tIeyY.webp 750w, /_astro/01_05_07.DGSyynVr_14IDcX.webp 828w, /_astro/01_05_07.DGSyynVr_1TeTzq.webp 1080w, /_astro/01_05_07.DGSyynVr_Z1baxb2.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;激しい闘いの末、遂にベーコン茸に手を出してしまいました。&lt;/p&gt;&lt;p&gt;あの陸クジラ先輩がいる方に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_08.BWoclLHB_Z2niwri.webp&quot; srcset=&quot;/_astro/01_05_08.BWoclLHB_1j13RB.webp 640w, /_astro/01_05_08.BWoclLHB_ZIwWz.webp 750w, /_astro/01_05_08.BWoclLHB_Z1pI8jA.webp 828w, /_astro/01_05_08.BWoclLHB_H6Uja.webp 1080w, /_astro/01_05_08.BWoclLHB_Z2niwri.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進むと洞窟がありますが、その洞窟の上の方に目的の石英の鉱床があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_09.CDcKAlAo_Z21ubFl.webp&quot; srcset=&quot;/_astro/01_05_09.CDcKAlAo_19HzJD.webp 640w, /_astro/01_05_09.CDcKAlAo_Za215x.webp 750w, /_astro/01_05_09.CDcKAlAo_Z1z1Bry.webp 828w, /_astro/01_05_09.CDcKAlAo_13Ug57.webp 1080w, /_astro/01_05_09.CDcKAlAo_Z21ubFl.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのため、足場を作って登っていきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_10.CSEb4e3e_yGePx.webp&quot; srcset=&quot;/_astro/01_05_10.CSEb4e3e_Z1HibNe.webp 640w, /_astro/01_05_10.CSEb4e3e_239law.webp 750w, /_astro/01_05_10.CSEb4e3e_D9JNv.webp 828w, /_astro/01_05_10.CSEb4e3e_Z1q5rcV.webp 1080w, /_astro/01_05_10.CSEb4e3e_yGePx.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;登ったら、もう一度足場を作って登っていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_11.Cr6yecZI_Z1D0lxq.webp&quot; srcset=&quot;/_astro/01_05_11.Cr6yecZI_Z8zjXt.webp 640w, /_astro/01_05_11.Cr6yecZI_Z1sjUNE.webp 750w, /_astro/01_05_11.Cr6yecZI_2cRBDg.webp 828w, /_astro/01_05_11.Cr6yecZI_1rp6d2.webp 1080w, /_astro/01_05_11.Cr6yecZI_Z1D0lxq.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいくと、石英の鉱床に到着です。この3つの採鉱機が置いてある場所が石英の鉱床です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_12.CDhMxd14_1qwQbz.webp&quot; srcset=&quot;/_astro/01_05_12.CDhMxd14_Z1bz1Ry.webp 640w, /_astro/01_05_12.CDhMxd14_Z2vjCHJ.webp 750w, /_astro/01_05_12.CDhMxd14_19RTJb.webp 828w, /_astro/01_05_12.CDhMxd14_ZyeOQT.webp 1080w, /_astro/01_05_12.CDhMxd14_1qwQbz.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その6：東側の湿地と砂漠の間（その2）&lt;a href=&quot;#その6東側の湿地と砂漠の間その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この鉱床は、「その5：東側の湿地と砂漠の間（その1）」のすぐ近くにあります。&lt;/p&gt;&lt;p&gt;ここにも石英の鉱床が3つあります。
&lt;img loading=&quot;lazy&quot; width=&quot;2058&quot; height=&quot;986&quot; src=&quot;/_astro/01_06_01.8bw3EwkG_Z1qLsVw.webp&quot; srcset=&quot;/_astro/01_06_01.8bw3EwkG_Z16vsrS.webp 640w, /_astro/01_06_01.8bw3EwkG_Z2myrsj.webp 750w, /_astro/01_06_01.8bw3EwkG_2wggQ8.webp 828w, /_astro/01_06_01.8bw3EwkG_2ebYe6.webp 1080w, /_astro/01_06_01.8bw3EwkG_ZPAu5k.webp 1280w, /_astro/01_06_01.8bw3EwkG_ZhaxtU.webp 1668w, /_astro/01_06_01.8bw3EwkG_Z1dTe1f.webp 2048w, /_astro/01_06_01.8bw3EwkG_Z1qLsVw.webp 2058w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程の「その5：東側の湿地と砂漠の間（その1）」の鉱床から、南東に向かいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_05_12.CDhMxd14_1qwQbz.webp&quot; srcset=&quot;/_astro/01_05_12.CDhMxd14_Z1bz1Ry.webp 640w, /_astro/01_05_12.CDhMxd14_Z2vjCHJ.webp 750w, /_astro/01_05_12.CDhMxd14_19RTJb.webp 828w, /_astro/01_05_12.CDhMxd14_ZyeOQT.webp 1080w, /_astro/01_05_12.CDhMxd14_1qwQbz.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。少し下ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_03.BYyBCaPa_u8nIB.webp&quot; srcset=&quot;/_astro/01_06_03.BYyBCaPa_Z1dpXQu.webp 640w, /_astro/01_06_03.BYyBCaPa_2x1y7g.webp 750w, /_astro/01_06_03.BYyBCaPa_181WKf.webp 828w, /_astro/01_06_03.BYyBCaPa_Z1uDijR.webp 1080w, /_astro/01_06_03.BYyBCaPa_u8nIB.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進むと、開けたエリアに出ます。ここに石英の鉱床があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_04.DgbeErZV_1F9wa0.webp&quot; srcset=&quot;/_astro/01_06_04.DgbeErZV_Zw4GHe.webp 640w, /_astro/01_06_04.DgbeErZV_Z1POixp.webp 750w, /_astro/01_06_04.DgbeErZV_1OneTv.webp 828w, /_astro/01_06_04.DgbeErZV_ZjC9St.webp 1080w, /_astro/01_06_04.DgbeErZV_1F9wa0.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;石英の鉱床の場所に到着です。この採鉱機が置いてある3箇所が石英の鉱床です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_06_02.Cwwc75Bj_Z2mfNiQ.webp&quot; srcset=&quot;/_astro/01_06_02.Cwwc75Bj_1j37gu.webp 640w, /_astro/01_06_02.Cwwc75Bj_ZGtyG.webp 750w, /_astro/01_06_02.Cwwc75Bj_Z1pG4UH.webp 828w, /_astro/01_06_02.Cwwc75Bj_I9DrB.webp 1080w, /_astro/01_06_02.Cwwc75Bj_Z2mfNiQ.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その7：中央部（調査中）&lt;a href=&quot;#その7中央部調査中&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここには2つの石英の鉱床があります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを快適に&lt;a href=&quot;#satisfactoryを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;マウスその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Razer Orochi V2 ゲーミングマウス ワイヤレス 超軽量60g HyperSpeed Bluetooth 2つの無線モード 最大950時間バッテリー持続 5G 高性能 18000 DPI オプティカルセンサー 【日本正規代理店保証品】 RZ01-03730100-R3A1&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその3&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;アイ・オー・データ IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz AHVAパネル ブラック(HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-GDQ271JA&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Googleスプレッドシート、GAS】選択した範囲をHTMLのtableタグとして画面上に出力する</title><link>https://endorphinbath.com/posts/gas-selected-area-to-html-table-2/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-selected-area-to-html-table-2/</guid><description>Googleスプレッドシートで編集したセルをそのままCSVやTSVとして出力するツールを作りました。この機能を導入することによって、データの受け渡しが楽になるかと思います。</description><pubDate>Thu, 22 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うっひょお〜、気持ちいい〜！今まで作ったツールの中で、最も作ってよかったと思ったツールなのだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、この前作ったツールを使っていて、気持ちよくなっているんだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;というわけで、今回はこの気持ちいいツールを紹介します。良ければ、使ってみたり、開発の参考にしてみて欲しいのだ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;以前の記事&lt;a href=&quot;#以前の記事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にとあるツールを作りました。
それは一言で言うと、「Googleスプレッドシートに書いた内容をHTMLに出力してくれる」ツールです。&lt;/p&gt;&lt;p&gt;その機能を紹介している記事がありますので、それは以下をご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-selected-area-to-html-table/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Googleスプレッドシート、GAS】選択した範囲をHTMLのtableタグとしてテキスト出力する&lt;/div&gt;&lt;div&gt;Googleスプレッドシートで編集したセルをそのままHTMLのtableタグとして出力するツールを作りました。HTMLの編集は面倒ですが、これを使えば編集はGoogle Spreadsheetで管理することが出来ます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220228_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回は、何をするツールなのか&lt;a href=&quot;#今回は何をするツールなのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、今回はそのツールに機能を追加しました。
一言で言うと、「Googleスプレッドシートに書いた内容をCSVもしくはTSVに出力してくれる」ツールです。&lt;/p&gt;&lt;p&gt;例えば、以下のように編集した内容があります。
&lt;img loading=&quot;lazy&quot; width=&quot;2746&quot; height=&quot;384&quot; src=&quot;/_astro/01.NSZzh7vD_GbEny.webp&quot; srcset=&quot;/_astro/01.NSZzh7vD_233M6l.webp 640w, /_astro/01.NSZzh7vD_1JUgSq.webp 750w, /_astro/01.NSZzh7vD_ZoP8Ji.webp 828w, /_astro/01.NSZzh7vD_Z1jCegg.webp 1080w, /_astro/01.NSZzh7vD_GUXP0.webp 1280w, /_astro/01.NSZzh7vD_1ozqQD.webp 1668w, /_astro/01.NSZzh7vD_20rShK.webp 2048w, /_astro/01.NSZzh7vD_1hI8GL.webp 2560w, /_astro/01.NSZzh7vD_GbEny.webp 2746w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その内容をGoogleスプレッドシート上で選択して、僕のシートの場合は、GASで拡張したメニュー内の「選択範囲をCSVで出力」を押します。
&lt;img loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;558&quot; src=&quot;/_astro/02.B8EHAFOa_9zepo.webp&quot; srcset=&quot;/_astro/02.B8EHAFOa_l68V5.webp 640w, /_astro/02.B8EHAFOa_vSaqr.webp 750w, /_astro/02.B8EHAFOa_Z15qIk3.webp 828w, /_astro/02.B8EHAFOa_1W2nxE.webp 1080w, /_astro/02.B8EHAFOa_9zepo.webp 1104w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、CSVとして表内の値を出力してくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1790&quot; height=&quot;900&quot; src=&quot;/_astro/03.BBs6iIrn_ZY9DX8.webp&quot; srcset=&quot;/_astro/03.BBs6iIrn_2lN59c.webp 640w, /_astro/03.BBs6iIrn_Z1Xzwzg.webp 750w, /_astro/03.BBs6iIrn_24jd4i.webp 828w, /_astro/03.BBs6iIrn_Z1MAkrm.webp 1080w, /_astro/03.BBs6iIrn_ZJ7uU0.webp 1280w, /_astro/03.BBs6iIrn_1l4zsz.webp 1668w, /_astro/03.BBs6iIrn_ZY9DX8.webp 1790w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで出力したCSVやTSVは別のスプレッドシートに貼り付けたりしても良いですし、自分が作ったツールに利用するでも良いですし、データの受け渡しが楽になる機能になっていると思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;HTML出力機能の使い途&lt;a href=&quot;#html出力機能の使い途&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CSVとTSVへの出力機能は、ぶっちゃけあまり紹介することがないですね・・・
その代わりに、今回のツールのHTML出力機能の使い途を少し書きます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;GitHubのREADME.mdに掲載する&lt;a href=&quot;#githubのreadmemdに掲載する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、以前の記事で、ツール実行のBefore &amp;amp; Afterを紹介した時に確認できるかと思います。&lt;/p&gt;&lt;p&gt;以下のように、GitHubのREADME.mdでtableレイアウトで情報を表示できています。
&lt;img loading=&quot;lazy&quot; width=&quot;1694&quot; height=&quot;594&quot; src=&quot;/_astro/02.F-opY_UY_Z92jc1.webp&quot; srcset=&quot;/_astro/02.F-opY_UY_2tWuVb.webp 640w, /_astro/02.F-opY_UY_ZVj89L.webp 750w, /_astro/02.F-opY_UY_ZN6CoB.webp 828w, /_astro/02.F-opY_UY_Z1ML7XV.webp 1080w, /_astro/02.F-opY_UY_ZD4sxB.webp 1280w, /_astro/02.F-opY_UY_ZcYcAG.webp 1668w, /_astro/02.F-opY_UY_Z92jc1.webp 1694w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;WordPressのテーブル編集を楽にする&lt;a href=&quot;#wordpressのテーブル編集を楽にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最近、WordPressで性能比較などの記事を執筆する時に、テーブル形式で調査結果を掲載することがあります。
そうした場合に、WordPress上でテーブルを編集するのはあまり勝手が良くなく、記事の編集に時間が掛かっていました。&lt;/p&gt;&lt;p&gt;行や列の数も一気に増やせないですし。
&lt;img loading=&quot;lazy&quot; width=&quot;1996&quot; height=&quot;1128&quot; src=&quot;/_astro/05.DTc7bOv__KdKTO.webp&quot; srcset=&quot;/_astro/05.DTc7bOv__ZuQ6CC.webp 640w, /_astro/05.DTc7bOv__2cOTaa.webp 750w, /_astro/05.DTc7bOv__Z23pgil.webp 828w, /_astro/05.DTc7bOv__lDBvl.webp 1080w, /_astro/05.DTc7bOv__20SocM.webp 1280w, /_astro/05.DTc7bOv__nSGfU.webp 1668w, /_astro/05.DTc7bOv__KdKTO.webp 1996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そんな時には、Googleスプレッドシートでテーブルを編集した方が速いです。編集した状態でスクリプトを実行します。
&lt;img loading=&quot;lazy&quot; width=&quot;888&quot; height=&quot;424&quot; src=&quot;/_astro/06.CGocwy5R_ZMd0vG.webp&quot; srcset=&quot;/_astro/06.CGocwy5R_VJTBl.webp 640w, /_astro/06.CGocwy5R_ZxrtCV.webp 750w, /_astro/06.CGocwy5R_Z2jJHAa.webp 828w, /_astro/06.CGocwy5R_ZMd0vG.webp 888w&quot; /&gt;&lt;/p&gt;&lt;p&gt;WordPressのテーブルはHTMLで編集できる状態にして・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1938&quot; height=&quot;420&quot; src=&quot;/_astro/07.DDlE0ilo_1FIi6x.webp&quot; srcset=&quot;/_astro/07.DDlE0ilo_46Jyk.webp 640w, /_astro/07.DDlE0ilo_237IjH.webp 750w, /_astro/07.DDlE0ilo_26qVxl.webp 828w, /_astro/07.DDlE0ilo_23VgEs.webp 1080w, /_astro/07.DDlE0ilo_1tC5vT.webp 1280w, /_astro/07.DDlE0ilo_ZrYjgB.webp 1668w, /_astro/07.DDlE0ilo_1FIi6x.webp 1938w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程出力したHTMLを貼り付けてしまえば・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1998&quot; height=&quot;798&quot; src=&quot;/_astro/08.DKyjdIRl_1UCMSz.webp&quot; srcset=&quot;/_astro/08.DKyjdIRl_2qJjOs.webp 640w, /_astro/08.DKyjdIRl_1Q8hVL.webp 750w, /_astro/08.DKyjdIRl_ZiKcEw.webp 828w, /_astro/08.DKyjdIRl_Q6q04.webp 1080w, /_astro/08.DKyjdIRl_Zylf6X.webp 1280w, /_astro/08.DKyjdIRl_ZaTBGw.webp 1668w, /_astro/08.DKyjdIRl_1UCMSz.webp 1998w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように素早くブログにテーブルの編集内容を反映することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1706&quot; height=&quot;842&quot; src=&quot;/_astro/09.C3vMrJ0D_1S0T4F.webp&quot; srcset=&quot;/_astro/09.C3vMrJ0D_Z1aOk4Y.webp 640w, /_astro/09.C3vMrJ0D_Z1J6xbV.webp 750w, /_astro/09.C3vMrJ0D_ZShGyL.webp 828w, /_astro/09.C3vMrJ0D_uwbiK.webp 1080w, /_astro/09.C3vMrJ0D_1y85NG.webp 1280w, /_astro/09.C3vMrJ0D_Z1qAMEw.webp 1668w, /_astro/09.C3vMrJ0D_1S0T4F.webp 1706w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この時短は、個人的にかなり助かっています！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回作ったツールのリポジトリはこちらになります。ご参考下さい。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://github.com/landmaster135/HtmlGeneratorSheet&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;HtmlGeneratorSheet&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふーー、楽、できてます！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【動画作成、YouTube】ゆっくり実況動画をYMM4とDaVinci Resolve＋VOICEVOXで作る速さを比べてみた</title><link>https://endorphinbath.com/posts/youtube-comparison-to-ymm4-and-dvr-voicevox/</link><guid isPermaLink="true">https://endorphinbath.com/posts/youtube-comparison-to-ymm4-and-dvr-voicevox/</guid><description>ゆっくり実況動画をYMM4とDaVinci Resolve＋VOICEVOXの２通りの方法でそれぞれ作ってみたので、その作業スピードを比較してみました。</description><pubDate>Wed, 21 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うおおおお、YMM（ゆっくりムービーメーカー）4の方が速く作れるなあ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この前は、DaVinci Resolveで作ってたよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うむ、本当に作業スピードに差が出るな・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、ツールの概要&lt;a href=&quot;#まずツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、以下の２つの方法でゆっくり動画を作り比べてみました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;YMM4&lt;/li&gt;
&lt;li&gt;DaVinci Resolve＋VOICEVOX&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;まずは、2通りの方法に使用するツールの概要を紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;方法1. YMM4だけを使う&lt;a href=&quot;#方法1-ymm4だけを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この方法では、「YMM」（ゆっくりムービーメーカー）のみを使用します。&lt;/p&gt;&lt;p&gt;「ゆっくりムービーメーカー」は、YouTubeで一世を風靡している「ゆっくり実況」で使用される「ゆっくり音声」を搭載している動画編集ソフトになります。&lt;/p&gt;&lt;a href=&quot;https://manjubox.net/ymm4/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://manjubox.net/favicon-32x32.png?v=a082428b78d620c28b16cd32faf1feba&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;manjubox.net&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ゆっくりMovieMaker4&lt;/div&gt;&lt;div&gt;ゆっくり実況プレイ動画用動画編集ソフト「ゆっくりMovieMaker4」の配布ページです&lt;/div&gt;&lt;div&gt;manjubox.net&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://manjubox.net/ogimage.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「ゆっくりムービーメーカー」で編集しているときの画面はこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1374&quot; src=&quot;/_astro/01.D4oJRy8K_2f84C4.webp&quot; srcset=&quot;/_astro/01.D4oJRy8K_1bKPJ8.webp 640w, /_astro/01.D4oJRy8K_1mxTAj.webp 750w, /_astro/01.D4oJRy8K_Zlo3YR.webp 828w, /_astro/01.D4oJRy8K_ZeqV5b.webp 1080w, /_astro/01.D4oJRy8K_ZcQ555.webp 1280w, /_astro/01.D4oJRy8K_1O10U0.webp 1668w, /_astro/01.D4oJRy8K_c9yiD.webp 2048w, /_astro/01.D4oJRy8K_2f84C4.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方法2. DaVinci Resolve＋VOICEVOXを使う&lt;a href=&quot;#方法2-davinci-resolvevoicevoxを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この方法では、動画編集に「DaVinci Resolve」、音声出力に「VOICEVOX」を使用します。&lt;/p&gt;&lt;p&gt;「DaVinci Resolve」は、ハリウッドのスタッフも使用している動画編集ソフトだそうです。&lt;/p&gt;&lt;a href=&quot;https://www.blackmagicdesign.com/jp/products/davinciresolve&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.blackmagicdesign.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;DaVinci Resolve | Blackmagic Design&lt;/div&gt;&lt;div&gt;革命的な新ツールを搭載。編集、カラーコレクション、プロフェッショナルなオーディオ・ポストプロダクションを単一のアプリケーションで実現できます。&lt;/div&gt;&lt;div&gt;www.blackmagicdesign.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;無料版の「DaVinci Resolve」と有料版の「DaVinci Resolve Studio」がありますが、今回は無料版を使用します。&lt;/p&gt;&lt;p&gt;「DaVinci Resolve」で編集しているときの画面はこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1369&quot; src=&quot;/_astro/02.C0glgIkh_1PafNw.webp&quot; srcset=&quot;/_astro/02.C0glgIkh_Z9FnEM.webp 640w, /_astro/02.C0glgIkh_16Fbo.webp 750w, /_astro/02.C0glgIkh_PbIvo.webp 828w, /_astro/02.C0glgIkh_1Mww64.webp 1080w, /_astro/02.C0glgIkh_Z1q6fc4.webp 1280w, /_astro/02.C0glgIkh_Z1TgWsy.webp 1668w, /_astro/02.C0glgIkh_ZVY4wy.webp 2048w, /_astro/02.C0glgIkh_1PafNw.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、音声出力に使う「VOICEVOX」ですが、こちらは、一部音声がライセンスを動画に表記すれば、商用・非商用問わず無料で使用できるソフトウェアになっています。&lt;/p&gt;&lt;p&gt;細かいイントネーションを設定できるのがウリとなっているそうです。&lt;/p&gt;&lt;a href=&quot;https://voicevox.hiroshiba.jp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://voicevox.hiroshiba.jp/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;voicevox.hiroshiba.jp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;VOICEVOX | 無料のテキスト読み上げ・歌声合成ソフトウェア&lt;/div&gt;&lt;div&gt;無料で使える中品質なテキスト読み上げ・歌声合成ソフトウェア。商用・非商用問わず無料で、誰でも簡単にお使いいただけます。イントネーションを詳細に調整することも可能です。&lt;/div&gt;&lt;div&gt;voicevox.hiroshiba.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://voicevox.hiroshiba.jp/_astro/share.D8sYb9zR_Z2epAzp.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「VOICEVOX」で編集しているときの画面はこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1742&quot; src=&quot;/_astro/03.BkX8Wuxg_9P5Yb.webp&quot; srcset=&quot;/_astro/03.BkX8Wuxg_Z29b5sa.webp 640w, /_astro/03.BkX8Wuxg_x31Aj.webp 750w, /_astro/03.BkX8Wuxg_Z1ba6W1.webp 828w, /_astro/03.BkX8Wuxg_1Q8zHg.webp 1080w, /_astro/03.BkX8Wuxg_Z1CUiG1.webp 1280w, /_astro/03.BkX8Wuxg_Z1y9xEK.webp 1668w, /_astro/03.BkX8Wuxg_2we86m.webp 2048w, /_astro/03.BkX8Wuxg_DTImG.webp 2560w, /_astro/03.BkX8Wuxg_9P5Yb.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この方法では、以下の作業方法を採ります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;VOICEVOXで出力したセリフの音声をDaVinci Resolveの所定の位置にインポートする&lt;/li&gt;
&lt;li&gt;VOICEVOXで出力した音声のテキストをDaVinci Resolveの対応する音声と同じ位置に配置して字幕を入力する&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際のところ、どちらの方がどれぐらい速く作れるの？&lt;a href=&quot;#実際のところどちらの方がどれぐらい速く作れるの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;早速、実際にどちらの方が速く作れるのかを比較してみたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;比較対象&lt;a href=&quot;#比較対象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回比較対象とする動画は、僕が運営しているゆっくり実況動画2本です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;動画その1（YMM4で作成）&lt;a href=&quot;#動画その1ymm4で作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;動画その2（DaVinci Resolve＋VOICEVOXで作成）&lt;a href=&quot;#動画その2davinci-resolvevoicevoxで作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;比較するポイント&lt;a href=&quot;#比較するポイント&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;比較するポイントは、以下とします。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;動画作成の所要時間&lt;/li&gt;
&lt;li&gt;動画の再生時間&lt;/li&gt;
&lt;li&gt;キャラクターのセリフの数&lt;/li&gt;
&lt;li&gt;キャラクター以外の画像・音声・テキスト・効果の挿入数&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「動画作成の所要時間」は、どちらも同じくらいだったと思います。そのため、双方とも15時間としておきます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;比較結果&lt;a href=&quot;#比較結果&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実際に比較してみた結果は、以下となりました。&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;YMM4&lt;/th&gt;&lt;th&gt;DaVinci + VOICEVOX&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;動画作成の所要時間 [hour]&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;動画の再生時間 [mm]&lt;/td&gt;&lt;td&gt;13:23&lt;/td&gt;&lt;td&gt;18:45&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キャラクターのセリフの数&lt;/td&gt;&lt;td&gt;161&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キャラクター以外の画像・音声・テキスト・効果の挿入数&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;YMM（ゆっくりムービーメーカー）で作成した動画の方が、DVR + VOICEVOXよりも、セリフの密度が約3倍あるという結果になりました。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;考察&lt;a href=&quot;#考察&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下の点について、考察です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ゆっくり実況のために必要な作業&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;ゆっくり実況のための作業の洗い出し&lt;a href=&quot;#ゆっくり実況のための作業の洗い出し&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ゆっくり実況動画を作るために必要な作業、こなす量が多い作業などを洗い出します。
まず、動画作成に以下のファクターがあります&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;キャラクターの音声の挿入&lt;/li&gt;
&lt;li&gt;キャラクラーの立ち絵の挿入&lt;/li&gt;
&lt;li&gt;キャラクターのセリフの字幕の挿入&lt;/li&gt;
&lt;li&gt;キャラクター以外の画像・音声・テキスト・効果の挿入&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらの作業を効率的に出来るかどうかが作成速度を左右するかと考えます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ゆっくり実況のための作業の洗い出し（YMM4の場合）&lt;a href=&quot;#ゆっくり実況のための作業の洗い出しymm4の場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;YMM4の場合、以下の3つの作業は一気に行うことが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;キャラクターの音声の挿入&lt;/li&gt;
&lt;li&gt;キャラクラーの立ち絵の挿入&lt;/li&gt;
&lt;li&gt;キャラクターのセリフの字幕の挿入&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;YMM4では、キャラクターごとにセリフを入力した時に、デフォルトで入れる立ち絵とその位置を保持出来ます。セリフごとに紐付いた「キャラクラーの立ち絵の挿入」が自動的に行われるということです。デフォルトと違う表情にしたい場合は、そのセリフの設定を変えるだけです。&lt;/p&gt;&lt;p&gt;そして、セリフを入力した時に、そのアイテムに自動的に「キャラクターの音声の挿入」「キャラクターのセリフの字幕の挿入」が行われます。細かい発音が想定通りにいかないこともありますが、概ね問題ない場合がほとんどです。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1367&quot; src=&quot;/_astro/04.DwSjBzAA_Z2fFa43.webp&quot; srcset=&quot;/_astro/04.DwSjBzAA_ZLSgy7.webp 640w, /_astro/04.DwSjBzAA_1V3TbO.webp 750w, /_astro/04.DwSjBzAA_Z2k3bi7.webp 828w, /_astro/04.DwSjBzAA_cITu4.webp 1080w, /_astro/04.DwSjBzAA_24ih0R.webp 1280w, /_astro/04.DwSjBzAA_1A7yJn.webp 1668w, /_astro/04.DwSjBzAA_Z2wLG8y.webp 2048w, /_astro/04.DwSjBzAA_Z2fFa43.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「キャラクター以外の画像・音声・テキスト・効果の挿入」は、YMM4では簡易な表現であれば可能です。例えば、テキストボックスを配置するなどです。それを動かすとなると少し難しそうですが。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ゆっくり実況のための作業の洗い出し（DaVinci Resolve ＋ VOICEVOXの場合）&lt;a href=&quot;#ゆっくり実況のための作業の洗い出しdavinci-resolve--voicevoxの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DaVinci Resolve ＋ VOICEVOXの場合、以下の3つの作業は各々行う必要があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;キャラクターの音声の挿入&lt;/li&gt;
&lt;li&gt;キャラクラーの立ち絵の挿入&lt;/li&gt;
&lt;li&gt;キャラクターのセリフの字幕の挿入&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;セリフの音声をタイムラインに入れただけでは、キャラクターの立ち絵は入ってくれません。セリフの字幕も後で手入力で追加する必要があります。音声、立ち絵、字幕を別々に追加しなければなりません。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1374&quot; src=&quot;/_astro/05.CKddYWzR_1FlYBM.webp&quot; srcset=&quot;/_astro/05.CKddYWzR_Z2gtMPF.webp 640w, /_astro/05.CKddYWzR_Z25GIYu.webp 750w, /_astro/05.CKddYWzR_1gxqeg.webp 828w, /_astro/05.CKddYWzR_ZNd15s.webp 1080w, /_astro/05.CKddYWzR_ZLCa5m.webp 1280w, /_astro/05.CKddYWzR_1feUTI.webp 1668w, /_astro/05.CKddYWzR_ZmBvGD.webp 2048w, /_astro/05.CKddYWzR_1FlYBM.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;YMM4では1つの工程で出来たことが、DaVinci Resolve ＋ VOICEVOXの場合では3つ工程が必要となります。このYMM4の効率性は破壊力があります。その差が、顕著にキャラクターのセリフの数で見て取れます。&lt;/p&gt;&lt;p&gt;「キャラクター以外の画像・音声・テキスト・効果の挿入」は、YMM4よりもDaVinci Resolveの方が多彩なことが出来ます。例えば、テキストボックスを配置することは勿論、それを時間軸で動かしたり拡大することは朝飯前です。もしかしたら、図形を変形させることも出来るかもしれません。そこはもう少し触って確認してみたいと思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;UIの比較&lt;a href=&quot;#uiの比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;YMM4とDaVinci ResolveのUIを比較します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;UIの比較（YMM4の場合）&lt;a href=&quot;#uiの比較ymm4の場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;YMM4では、以下のような事柄がサイドメニューで一気に表示されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;キャラクターのセリフの再生速度&lt;/li&gt;
&lt;li&gt;キャラクターのセリフの音量&lt;/li&gt;
&lt;li&gt;キャラクターのセリフのピッチ&lt;/li&gt;
&lt;li&gt;再生開始位置&lt;/li&gt;
&lt;li&gt;字幕の大きさ&lt;/li&gt;
&lt;li&gt;字幕の内容&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そのため、右クリック→ポップアップから設定、みたいな操作をせずに少ない操作で、ゆっくり実況編集が行なえます。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1367&quot; src=&quot;/_astro/06.aFfwarHg_1szSu7.webp&quot; srcset=&quot;/_astro/06.aFfwarHg_ZOyswE.webp 640w, /_astro/06.aFfwarHg_1SnHdh.webp 750w, /_astro/06.aFfwarHg_Z2mIngE.webp 828w, /_astro/06.aFfwarHg_Z19caKH.webp 1080w, /_astro/06.aFfwarHg_HmbK6.webp 1280w, /_astro/06.aFfwarHg_ebttB.webp 1668w, /_astro/06.aFfwarHg_1btmpB.webp 2048w, /_astro/06.aFfwarHg_1szSu7.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;UIの比較（DaVinci Resolve ＋ VOICEVOXの場合）&lt;a href=&quot;#uiの比較davinci-resolve--voicevoxの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DaVinci Resolveの場合、YMM4で上述したような一気にサイドバーで表示するといった機能はありません。まあ、ゆっくり実況に特化した製品ではないので仕方がないですが。
セリフなどのタイムラインアイテムを編集する場合は、タイムラインにあるアイテムを右クリック→ポップアップから編集、みたいな操作が必要になり、複数回の操作が必要になります。&lt;/p&gt;&lt;p&gt;YMM4では、画像のフェードインはサイドバーから秒数を簡単に指定できます。しかし、DaVinci Resolveでは、画の切り替えが多いパターンが想定されているため、設定のための選択肢が多く、どうも工程が多いです。多機能なんですよね。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1373&quot; src=&quot;/_astro/07.DUZihlmV_1EjDKO.webp&quot; srcset=&quot;/_astro/07.DUZihlmV_Z2qwent.webp 640w, /_astro/07.DUZihlmV_Z2fJawi.webp 750w, /_astro/07.DUZihlmV_Z1qE7ci.webp 828w, /_astro/07.DUZihlmV_2pXglN.webp 1080w, /_astro/07.DUZihlmV_1Hnikf.webp 1280w, /_astro/07.DUZihlmV_Z1kVJtB.webp 1668w, /_astro/07.DUZihlmV_ZnDQxB.webp 2048w, /_astro/07.DUZihlmV_1EjDKO.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、DaVinci Resolveでは、「メディアプール」という、プロジェクト内で使用されている（もしくは、しようとしている）テキスト、音声や画像をリスト形式で表示してくれる機能があります。Premiere Proとかでもありますよね。&lt;/p&gt;&lt;p&gt;しかし、この機能なのですが、ゆっくり実況動画を作るに当たってはぶっちゃけ不要な機能になります・・・その他の確認した情報を表示するスペースも狭まってしまいますし・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1374&quot; src=&quot;/_astro/08.D78wPBsb_Zxmhgq.webp&quot; srcset=&quot;/_astro/08.D78wPBsb_Z2aQtqe.webp 640w, /_astro/08.D78wPBsb_Z204pz3.webp 750w, /_astro/08.D78wPBsb_1maJDH.webp 828w, /_astro/08.D78wPBsb_23fPPg.webp 1080w, /_astro/08.D78wPBsb_24PGPm.webp 1280w, /_astro/08.D78wPBsb_ZXtkXu.webp 1668w, /_astro/08.D78wPBsb_2tQle5.webp 2048w, /_astro/08.D78wPBsb_Zxmhgq.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;じゃあ、ゆっくり実況でDaVinci Resolveは使わないほうが良いの？&lt;a href=&quot;#じゃあゆっくり実況でdavinci-resolveは使わないほうが良いの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いいえ、そんなことはなく、少し凝った表現をしたい場合は、DaVinci Resolveの方が編集しやすい場合もあります。
タイムラインのアイテムを回転させたり、点滅させたり、シルエットにしたり、徐々に動きを速くしたり・・・などなど、自分の頭の中のイメージを細かく表現することが出来ます。&lt;/p&gt;&lt;p&gt;また、アイテムへの効果は、ノードを繋いで編集できますので、視覚的にプログラミングが出来て編集しやすいです。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1367&quot; src=&quot;/_astro/09.y9ktLkZU_23donA.webp&quot; srcset=&quot;/_astro/09.y9ktLkZU_1DFvOk.webp 640w, /_astro/09.y9ktLkZU_ZHyreF.webp 750w, /_astro/09.y9ktLkZU_6vB5k.webp 828w, /_astro/09.y9ktLkZU_ZyyERe.webp 1080w, /_astro/09.y9ktLkZU_1hYGDz.webp 1280w, /_astro/09.y9ktLkZU_NNYn5.webp 1668w, /_astro/09.y9ktLkZU_1L6Rj5.webp 2048w, /_astro/09.y9ktLkZU_23donA.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;YMM4だと表現の幅が狭い（むしろ、ゆっくり実況用に特化しているとも言えます）ので、ゆっくり実況の掛け合いとは関係ないパートの表現は、DaVinci Resolveを利用するというのは選択肢としてアリなのではないでしょうか。&lt;/p&gt;&lt;p&gt;そして、DaVinci Resolveでは「Fairlight」という機能があり、トラックごとに音程、音量や音声効果を編集することが出来ます。「Fairlight」では、現在再生中の動画が何dBの音量を出力しているかどうかも確認できます。YMM4にはない機能です。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1372&quot; src=&quot;/_astro/10.CKzIiFnz_ZAs8Y4.webp&quot; srcset=&quot;/_astro/10.CKzIiFnz_ZhW6IN.webp 640w, /_astro/10.CKzIiFnz_Z7a2RC.webp 750w, /_astro/10.CKzIiFnz_GU0rn.webp 828w, /_astro/10.CKzIiFnz_Z2oWQVr.webp 1080w, /_astro/10.CKzIiFnz_ZxoupD.webp 1280w, /_astro/10.CKzIiFnz_1tsAzr.webp 1668w, /_astro/10.CKzIiFnz_Z8nQ1U.webp 2048w, /_astro/10.CKzIiFnz_ZAs8Y4.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まとめると、以下のような感じで僕は2製品を使い分けたいと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;DaVinci Resolve・・・動画のイントロや小休止に、凝った表現を行う場合に利用する。&lt;/li&gt;
&lt;li&gt;YMM4・・・ゆっくり実況の掛け合いのパートを編集するときに利用する。そして最後、DaVinci Resolveで作った動画を挿入して、レンダリングする。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ゆっくりムービーメーカーがどれだけ速く作れるかが如実に分かった試みであった・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;でも、DaVinci Resolveが必要な場合もあるんだね。ツールは、それぞれの長所を見て使い分ける、って付き合い方が良いね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Satisfactory】レアな資源の場所（ウラン、SAM）</title><link>https://endorphinbath.com/posts/satisfactory-where-is-rare-item1/</link><guid isPermaLink="true">https://endorphinbath.com/posts/satisfactory-where-is-rare-item1/</guid><description>オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、ウラン、SAMを入手できる場所を紹介します。</description><pubDate>Tue, 20 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;見つからんぞお・・・、見つからんぞおっ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何が悲しくて泣いておるのじゃ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ウランが全く見つからん・・・この地下にあるはずなのにっ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこのウランか〜。じゃあ、今回はウランのついでにその他のアイテムの位置も紹介するぜ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の記事は、update 6のときの情報です&lt;a href=&quot;#今回の記事はupdate-6のときの情報です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介する内容は、Satisfactory update 6のときの情報です。&lt;/p&gt;&lt;p&gt;それ以降のバージョンでは、情報が異なる可能性があることをご了承下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ウランの鉱床の場所&lt;a href=&quot;#ウランの鉱床の場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ウランの鉱床になります。&lt;/p&gt;&lt;p&gt;紹介する場所は、3箇所になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：中部のクレーター周辺&lt;a href=&quot;#その1中部のクレーター周辺&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最初の鉱床の場所は、このクレーターの周辺にあります。&lt;/p&gt;&lt;p&gt;この場所から向かいます。草原スタートとすると、よく通るエリアかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2053&quot; height=&quot;981&quot; src=&quot;/_astro/01_01_01.TlYj7OWX_1muGBy.webp&quot; srcset=&quot;/_astro/01_01_01.TlYj7OWX_FGLIN.webp 640w, /_astro/01_01_01.TlYj7OWX_ZzlcgC.webp 750w, /_astro/01_01_01.TlYj7OWX_ZKHBL7.webp 828w, /_astro/01_01_01.TlYj7OWX_1MJ7aa.webp 1080w, /_astro/01_01_01.TlYj7OWX_Z1h3m9g.webp 1280w, /_astro/01_01_01.TlYj7OWX_1mqHxf.webp 1668w, /_astro/01_01_01.TlYj7OWX_Z1AEtfq.webp 2048w, /_astro/01_01_01.TlYj7OWX_1muGBy.webp 2053w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_02.Bk2PQDB7_1wQqX8.webp&quot; srcset=&quot;/_astro/01_01_02.Bk2PQDB7_2fKCGN.webp 640w, /_astro/01_01_02.Bk2PQDB7_V11QC.webp 750w, /_astro/01_01_02.Bk2PQDB7_ZsXyuo.webp 828w, /_astro/01_01_02.Bk2PQDB7_ZrUf5l.webp 1080w, /_astro/01_01_02.Bk2PQDB7_1wQqX8.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;洞窟に向かっています。ブタがいるぐらいで平和です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_03.DBHJvZe3_z4Spi.webp&quot; srcset=&quot;/_astro/01_01_03.DBHJvZe3_2dQXg8.webp 640w, /_astro/01_01_03.DBHJvZe3_T7mpW.webp 750w, /_astro/01_01_03.DBHJvZe3_ZuRdV4.webp 828w, /_astro/01_01_03.DBHJvZe3_Z1pGMDb.webp 1080w, /_astro/01_01_03.DBHJvZe3_z4Spi.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;毒ガスエリアを通ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_04.D98LnMoK_Z1vgUGl.webp&quot; srcset=&quot;/_astro/01_01_04.D98LnMoK_10HBVL.webp 640w, /_astro/01_01_04.D98LnMoK_Zj1XSp.webp 750w, /_astro/01_01_04.D98LnMoK_Z1I1zfq.webp 828w, /_astro/01_01_04.D98LnMoK_1z8w47.webp 1080w, /_astro/01_01_04.D98LnMoK_Z1vgUGl.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいきます。奥に洞窟の入口が見えてきました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_05.CBMJfVU8_ZO0ClE.webp&quot; srcset=&quot;/_astro/01_01_05.CBMJfVU8_R4oth.webp 640w, /_astro/01_01_05.CBMJfVU8_ZrFclT.webp 750w, /_astro/01_01_05.CBMJfVU8_Z1QEMHU.webp 828w, /_astro/01_01_05.CBMJfVU8_2goOoN.webp 1080w, /_astro/01_01_05.CBMJfVU8_ZO0ClE.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このクレーターにこのような比較的大きめの洞窟があります。既に岩は爆破してしまいましたが、入り口の一面を岩が塞いでいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_06.RCF1uG74_Z1C89a8.webp&quot; srcset=&quot;/_astro/01_01_06.RCF1uG74_ZMzaRm.webp 640w, /_astro/01_01_06.RCF1uG74_Z27jLHx.webp 750w, /_astro/01_01_06.RCF1uG74_1xRKJn.webp 828w, /_astro/01_01_06.RCF1uG74_1shiAk.webp 1080w, /_astro/01_01_06.RCF1uG74_Z1C89a8.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この洞窟を進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_07.wDGENk0O_Z2mJ3VW.webp&quot; srcset=&quot;/_astro/01_01_07.wDGENk0O_E0B6O.webp 640w, /_astro/01_01_07.wDGENk0O_ZEIYIm.webp 750w, /_astro/01_01_07.wDGENk0O_Z24IA5n.webp 828w, /_astro/01_01_07.wDGENk0O_HFnNv.webp 1080w, /_astro/01_01_07.wDGENk0O_Z2mJ3VW.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;登っていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_08.CMLtwhCL_P3BHb.webp&quot; srcset=&quot;/_astro/01_01_08.CMLtwhCL_ZxIeXR.webp 640w, /_astro/01_01_08.CMLtwhCL_Z1RsPO3.webp 750w, /_astro/01_01_08.CMLtwhCL_1MIGCR.webp 828w, /_astro/01_01_08.CMLtwhCL_Z19I4li.webp 1080w, /_astro/01_01_08.CMLtwhCL_P3BHb.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まだ登っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_09.DZ9YH6f__1lI6Rk.webp&quot; srcset=&quot;/_astro/01_01_09.DZ9YH6f__Z1lISLU.webp 640w, /_astro/01_01_09.DZ9YH6f__2oHDbP.webp 750w, /_astro/01_01_09.DZ9YH6f__YI2OO.webp 828w, /_astro/01_01_09.DZ9YH6f__ZD3zb9.webp 1080w, /_astro/01_01_09.DZ9YH6f__1lI6Rk.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;登っていくと、開けた空間に出ます。右手の方に進みます。&lt;/p&gt;&lt;p&gt;Update 6の前は、この空間に毒グモが出たのですが、Update 6では、普通のクモしか出てきませんでした・・・New Gameでやったら出るのかな？
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_10.yYbD0TZ8_Z28NXmK.webp&quot; srcset=&quot;/_astro/01_01_10.yYbD0TZ8_ZDA8gJ.webp 640w, /_astro/01_01_10.yYbD0TZ8_Z1XkJ6U.webp 750w, /_astro/01_01_10.yYbD0TZ8_1GQNl0.webp 828w, /_astro/01_01_10.yYbD0TZ8_VAtnH.webp 1080w, /_astro/01_01_10.yYbD0TZ8_Z28NXmK.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床を発見です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_11.BzqEb7zM_Z2jT322.webp&quot; srcset=&quot;/_astro/01_01_11.BzqEb7zM_Z2s1ftQ.webp 640w, /_astro/01_01_11.BzqEb7zM_1iqhtT.webp 750w, /_astro/01_01_11.BzqEb7zM_Z6yiR7.webp 828w, /_astro/01_01_11.BzqEb7zM_KvoIq.webp 1080w, /_astro/01_01_11.BzqEb7zM_Z2jT322.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに、この洞窟には別の出入り口があり、その出入り口の場所はここらへんです。
&lt;img loading=&quot;lazy&quot; width=&quot;2061&quot; height=&quot;985&quot; src=&quot;/_astro/01_01_21.BndO351b_1Xici8.webp&quot; srcset=&quot;/_astro/01_01_21.BndO351b_ZEPnSS.webp 640w, /_astro/01_01_21.BndO351b_Z1USmTj.webp 750w, /_astro/01_01_21.BndO351b_Z27fMoN.webp 828w, /_astro/01_01_21.BndO351b_wsR3i.webp 1080w, /_astro/01_01_21.BndO351b_2wRwxN.webp 1280w, /_astro/01_01_21.BndO351b_6asqn.webp 1668w, /_astro/01_01_21.BndO351b_2dgprD.webp 2048w, /_astro/01_01_21.BndO351b_1Xici8.webp 2061w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その出入り口の眺めはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_01_22.gPBn9pR3_DiG6V.webp&quot; srcset=&quot;/_astro/01_01_22.gPBn9pR3_JVKsA.webp 640w, /_astro/01_01_22.gPBn9pR3_ZyMPmA.webp 750w, /_astro/01_01_22.gPBn9pR3_Z1XMqIB.webp 828w, /_astro/01_01_22.gPBn9pR3_Z1lsYVx.webp 1080w, /_astro/01_01_22.gPBn9pR3_DiG6V.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：東部の湿地の滝の裏&lt;a href=&quot;#その2東部の湿地の滝の裏&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次の鉱床は、この湿地にある滝の裏にあります。そもそもこの湿地にはクモやら毒グモやらいますが、ウラン鉱床のところにも毒グモがいます・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2013&quot; height=&quot;981&quot; src=&quot;/_astro/01_02_01.WhUI5LjF_LMmII.webp&quot; srcset=&quot;/_astro/01_02_01.WhUI5LjF_ZDP1mO.webp 640w, /_astro/01_02_01.WhUI5LjF_27aJOh.webp 750w, /_astro/01_02_01.WhUI5LjF_Z2b9FPd.webp 828w, /_astro/01_02_01.WhUI5LjF_Z2cp4e8.webp 1080w, /_astro/01_02_01.WhUI5LjF_I3sS7.webp 1280w, /_astro/01_02_01.WhUI5LjF_Z1gij3X.webp 1668w, /_astro/01_02_01.WhUI5LjF_LMmII.webp 2013w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左の滝の方に鉱床があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_02.ps7k6rid_ZpdKqk.webp&quot; srcset=&quot;/_astro/01_02_02.ps7k6rid_Z6aaVh.webp 640w, /_astro/01_02_02.ps7k6rid_Z1pTLLs.webp 750w, /_astro/01_02_02.ps7k6rid_2fhKFs.webp 828w, /_astro/01_02_02.ps7k6rid_Z2p0rtN.webp 1080w, /_astro/01_02_02.ps7k6rid_ZpdKqk.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらの滝です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_03.DP_7cmj4_1NrKkA.webp&quot; srcset=&quot;/_astro/01_02_03.DP_7cmj4_MeKAT.webp 640w, /_astro/01_02_03.DP_7cmj4_ZwuPeh.webp 750w, /_astro/01_02_03.DP_7cmj4_Z1VuqAi.webp 828w, /_astro/01_02_03.DP_7cmj4_ZbjUHS.webp 1080w, /_astro/01_02_03.DP_7cmj4_1NrKkA.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;滝の中に通じる通路を設置します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_04.CtzQ18w2_ZTXYWo.webp&quot; srcset=&quot;/_astro/01_02_04.CtzQ18w2_1bSqhx.webp 640w, /_astro/01_02_04.CtzQ18w2_Z7QaxD.webp 750w, /_astro/01_02_04.CtzQ18w2_Z1wPKTE.webp 828w, /_astro/01_02_04.CtzQ18w2_2aqrN4.webp 1080w, /_astro/01_02_04.CtzQ18w2_ZTXYWo.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;滝の中に入ると、こんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_05.CaIR8v89_1micWc.webp&quot; srcset=&quot;/_astro/01_02_05.CaIR8v89_Z2aJIcw.webp 640w, /_astro/01_02_05.CaIR8v89_1zGNLe.webp 750w, /_astro/01_02_05.CaIR8v89_aHdpd.webp 828w, /_astro/01_02_05.CaIR8v89_ZCtt6h.webp 1080w, /_astro/01_02_05.CaIR8v89_1micWc.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あそこに鉱床があります。&lt;/p&gt;&lt;p&gt;ここで毒グモ2匹と闘う必要があります。（奥の紫ナメクジがあるスペースにももう1匹います。）&lt;/p&gt;&lt;p&gt;つまり、この滝の中に毒グモは3匹います。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_06.8QINPf8g_etbrO.webp&quot; srcset=&quot;/_astro/01_02_06.8QINPf8g_Z1HVX8F.webp 640w, /_astro/01_02_06.8QINPf8g_22uyP5.webp 750w, /_astro/01_02_06.8QINPf8g_CuXt4.webp 828w, /_astro/01_02_06.8QINPf8g_Z1KiuAE.webp 1080w, /_astro/01_02_06.8QINPf8g_etbrO.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床に到着です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_02_07.CivyRJ9V_ZrqRMF.webp&quot; srcset=&quot;/_astro/01_02_07.CivyRJ9V_Z1zi3SM.webp 640w, /_astro/01_02_07.CivyRJ9V_2b9t4X.webp 750w, /_astro/01_02_07.CivyRJ9V_L9RHW.webp 828w, /_astro/01_02_07.CivyRJ9V_Z2rdyQ9.webp 1080w, /_astro/01_02_07.CivyRJ9V_ZrqRMF.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：中部の赤い竹林の周辺&lt;a href=&quot;#その3中部の赤い竹林の周辺&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次の鉱床は、この周辺にあります。&lt;/p&gt;&lt;p&gt;今までのウランの鉱床の中で最も手強いエリアになるかと思います。&lt;/p&gt;&lt;p&gt;クラスター爆弾などを持っていくと攻略が楽になるかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2058&quot; height=&quot;981&quot; src=&quot;/_astro/01_03_01.DAJHCeZc_Z11kdvq.webp&quot; srcset=&quot;/_astro/01_03_01.DAJHCeZc_Z8VKqc.webp 640w, /_astro/01_03_01.DAJHCeZc_Z2s8832.webp 750w, /_astro/01_03_01.DAJHCeZc_Z1Am9V7.webp 828w, /_astro/01_03_01.DAJHCeZc_1tCYaP.webp 1080w, /_astro/01_03_01.DAJHCeZc_tTCWv.webp 1280w, /_astro/01_03_01.DAJHCeZc_Z1VMq9U.webp 1668w, /_astro/01_03_01.DAJHCeZc_2fmDWr.webp 2048w, /_astro/01_03_01.DAJHCeZc_Z11kdvq.webp 2058w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここから向かいます。奥へ直進します。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_02.CrmuH2Sd_2jrFEW.webp&quot; srcset=&quot;/_astro/01_03_02.CrmuH2Sd_ZkMXOs.webp 640w, /_astro/01_03_02.CrmuH2Sd_Z1ExzED.webp 750w, /_astro/01_03_02.CrmuH2Sd_20DWMh.webp 828w, /_astro/01_03_02.CrmuH2Sd_jEYBt.webp 1080w, /_astro/01_03_02.CrmuH2Sd_2jrFEW.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;奥へ進むと、まずこのエリアに来るかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_03.BJ0ArZQ9_Z1gcGea.webp&quot; srcset=&quot;/_astro/01_03_03.BJ0ArZQ9_GbtXo.webp 640w, /_astro/01_03_03.BJ0ArZQ9_ZCy6QM.webp 750w, /_astro/01_03_03.BJ0ArZQ9_Z22xHdN.webp 828w, /_astro/01_03_03.BJ0ArZQ9_1OcKwi.webp 1080w, /_astro/01_03_03.BJ0ArZQ9_Z1gcGea.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;クラスター爆弾を投げまくって、辺り一面をまっさらにするとこんな感じです。&lt;/p&gt;&lt;p&gt;紫ナメクジがいるので敵が多いです。&lt;/p&gt;&lt;p&gt;しかしながら、爆弾で大方の敵を一掃できるかと思います。（しかし、僕がこの時やった時は、毒グモだけがなぜか生きていました・・・お気を付けを・・・）&lt;/p&gt;&lt;p&gt;左奥に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_04.Bb0yaPw2_ZcwEr7.webp&quot; srcset=&quot;/_astro/01_03_04.Bb0yaPw2_Z2dPin9.webp 640w, /_astro/01_03_04.Bb0yaPw2_1wBeAB.webp 750w, /_astro/01_03_04.Bb0yaPw2_7BDeA.webp 828w, /_astro/01_03_04.Bb0yaPw2_Z2cjluA.webp 1080w, /_astro/01_03_04.Bb0yaPw2_ZcwEr7.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右奥の方に進んでいきます。&lt;/p&gt;&lt;p&gt;左奥の方はノーべリスクを使えばSomersloopを入手できますが、毒グモがいるので余裕がある時に行きましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_05.V1OlASOF_1itlEK.webp&quot; srcset=&quot;/_astro/01_03_05.V1OlASOF_Z1vPENV.webp 640w, /_astro/01_03_05.V1OlASOF_2eAR9O.webp 750w, /_astro/01_03_05.V1OlASOF_OBgMN.webp 828w, /_astro/01_03_05.V1OlASOF_ZGiknI.webp 1080w, /_astro/01_03_05.V1OlASOF_1itlEK.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右奥の方に進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_06.A744aNK6_NWnLG.webp&quot; srcset=&quot;/_astro/01_03_06.A744aNK6_1fiSAH.webp 640w, /_astro/01_03_06.A744aNK6_Z4qHet.webp 750w, /_astro/01_03_06.A744aNK6_Z1tqiAu.webp 828w, /_astro/01_03_06.A744aNK6_Z1aOigM.webp 1080w, /_astro/01_03_06.A744aNK6_NWnLG.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右奥に進んでいきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_07.TEm32sQN_1VeG4H.webp&quot; srcset=&quot;/_astro/01_03_07.TEm32sQN_ZPyOOy.webp 640w, /_astro/01_03_07.TEm32sQN_Z2ajqEJ.webp 750w, /_astro/01_03_07.TEm32sQN_1uS6Mb.webp 828w, /_astro/01_03_07.TEm32sQN_Z3wYXL.webp 1080w, /_astro/01_03_07.TEm32sQN_1VeG4H.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このエリアでは、毒グモ1匹とハッチャーの巣3個があります。&lt;/p&gt;&lt;p&gt;ハッチャーに一気に刺されて、毒グモのジャンピングハグを食らったら、瞬く間にリスポーンしますので、&lt;/p&gt;&lt;p&gt;ハッチャーの巣を全て壊す → ハッチャーを全て潰す → 毒グモを潰す&lt;/p&gt;&lt;p&gt;の流れで、対処していくと良いかと思います。&lt;/p&gt;&lt;p&gt;個人的には、ウラン鉱床到着まででここが一番きつかったですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_08.3liXr1gW_Z2fLOSC.webp&quot; srcset=&quot;/_astro/01_03_08.3liXr1gW_Z2hRKga.webp 640w, /_astro/01_03_08.3liXr1gW_1syLHA.webp 750w, /_astro/01_03_08.3liXr1gW_3zblz.webp 828w, /_astro/01_03_08.3liXr1gW_OCBQP.webp 1080w, /_astro/01_03_08.3liXr1gW_Z2fLOSC.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;倒した後の眺め。&lt;/p&gt;&lt;p&gt;右奥には胞子花もいますので、毒グモと合わせて毒対策は必要かと思います。&lt;/p&gt;&lt;p&gt;左手に進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_09.BdNx39ET_Z1yqFXg.webp&quot; srcset=&quot;/_astro/01_03_09.BdNx39ET_ZMrTdC.webp 640w, /_astro/01_03_09.BdNx39ET_Z27cv3N.webp 750w, /_astro/01_03_09.BdNx39ET_1y02o7.webp 828w, /_astro/01_03_09.BdNx39ET_1vXKMc.webp 1080w, /_astro/01_03_09.BdNx39ET_Z1yqFXg.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この坂道を上ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_10.DBbHbl7t_2tTaNO.webp&quot; srcset=&quot;/_astro/01_03_10.DBbHbl7t_Zas1uQ.webp 640w, /_astro/01_03_10.DBbHbl7t_Z1ucCl2.webp 750w, /_astro/01_03_10.DBbHbl7t_2aYU6S.webp 828w, /_astro/01_03_10.DBbHbl7t_u7tKl.webp 1080w, /_astro/01_03_10.DBbHbl7t_2tTaNO.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_11.mclxGSQG_pyVwT.webp&quot; srcset=&quot;/_astro/01_03_11.mclxGSQG_1evTG8.webp 640w, /_astro/01_03_11.mclxGSQG_Z5dG93.webp 750w, /_astro/01_03_11.mclxGSQG_Z1udhv4.webp 828w, /_astro/01_03_11.mclxGSQG_Z1zcJvz.webp 1080w, /_astro/01_03_11.mclxGSQG_pyVwT.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この高台の下にウラン鉱床があります。&lt;/p&gt;&lt;p&gt;手前の高台には強スピッターが2匹いますので、まずそれらから対応します。&lt;/p&gt;&lt;p&gt;高台から対応した方が、下の敵を倒す時にスピッターを気にしなくて済むので楽です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_12.BiqUfJsw_1JrJbQ.webp&quot; srcset=&quot;/_astro/01_03_12.BiqUfJsw_Z1U42U.webp 640w, /_astro/01_03_12.BiqUfJsw_Z1lEES6.webp 750w, /_astro/01_03_12.BiqUfJsw_2jwRyO.webp 828w, /_astro/01_03_12.BiqUfJsw_ZfjVQC.webp 1080w, /_astro/01_03_12.BiqUfJsw_1JrJbQ.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スピッターを倒したら、下にいるクモを倒しましょう。&lt;/p&gt;&lt;p&gt;デカイクモはいませんが（中くらいはいる。）、それなりに数がいますので気を引き締めていきましょう。&lt;/p&gt;&lt;p&gt;ちなみに、上からノーべリスクを投げる作戦もアリですが、中くらいのクモはジャンプして高台に登って来れるので、油断はせずに行きましょう。（本当にキモいですね・・・僕は食らった時、鳥肌ハンパなかったです・・・）
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_14.BKELt-qm_2pzSIR.webp&quot; srcset=&quot;/_astro/01_03_14.BKELt-qm_27tWYp.webp 640w, /_astro/01_03_14.BKELt-qm_MJm9e.webp 750w, /_astro/01_03_14.BKELt-qm_ZBfecM.webp 828w, /_astro/01_03_14.BKELt-qm_pNcFo.webp 1080w, /_astro/01_03_14.BKELt-qm_2pzSIR.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下に見えるのが、ウランの鉱床です！&lt;/p&gt;&lt;p&gt;お疲れさまでした！（黄色ナメクジもいます！）
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/01_03_13.D8qF9nbR_Z22ns4e.webp&quot; srcset=&quot;/_astro/01_03_13.D8qF9nbR_28Ibl5.webp 640w, /_astro/01_03_13.D8qF9nbR_NXzuT.webp 750w, /_astro/01_03_13.D8qF9nbR_ZA10Q7.webp 828w, /_astro/01_03_13.D8qF9nbR_131YGe.webp 1080w, /_astro/01_03_13.D8qF9nbR_Z22ns4e.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;SAMの鉱床の場所&lt;a href=&quot;#samの鉱床の場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次はSAMの鉱床になります。&lt;/p&gt;&lt;p&gt;紹介する場所は、4箇所になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：北西の砂漠の大きい洞窟&lt;a href=&quot;#その1北西の砂漠の大きい洞窟&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この鉱床の場所は、以下の記事の石英の鉱床の場所と同じですので、そちらをご参考下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/satisfactory-where-is-rare-item2/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Satisfactory】レアな資源の場所（石英）&lt;/div&gt;&lt;div&gt;オープンワールド型工業自動化サンドボックスゲーム「Satisfactory」で、石英を入手できる場所を紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220314_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：北西の砂漠の小さい洞窟&lt;a href=&quot;#その2北西の砂漠の小さい洞窟&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;北西の砂漠の方にもう1つSAM鉱床があります。&lt;/p&gt;&lt;p&gt;この海岸から、東に向かいます。（上が先程のその1のルートで、下が今回のその2のルートです。）
&lt;img loading=&quot;lazy&quot; width=&quot;1559&quot; height=&quot;971&quot; src=&quot;/_astro/02_02_01.BLVSezPA_1xy17R.webp&quot; srcset=&quot;/_astro/02_02_01.BLVSezPA_Z1pscVS.webp 640w, /_astro/02_02_01.BLVSezPA_ZBIoqw.webp 750w, /_astro/02_02_01.BLVSezPA_Z1TUOnb.webp 828w, /_astro/02_02_01.BLVSezPA_2f7Ip2.webp 1080w, /_astro/02_02_01.BLVSezPA_Om8OO.webp 1280w, /_astro/02_02_01.BLVSezPA_1xy17R.webp 1559w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_02.DGmFnbUK_12Jreg.webp&quot; srcset=&quot;/_astro/02_02_02.DGmFnbUK_2eMmX4.webp 640w, /_astro/02_02_02.DGmFnbUK_U2L7S.webp 750w, /_astro/02_02_02.DGmFnbUK_ZtVOe8.webp 828w, /_astro/02_02_02.DGmFnbUK_ZW2eOd.webp 1080w, /_astro/02_02_02.DGmFnbUK_12Jreg.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サバンナのヤシの木みたいな木々の間を進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_03.CosaUiST_ZJARgh.webp&quot; srcset=&quot;/_astro/02_02_03.CosaUiST_ZUQexw.webp 640w, /_astro/02_02_03.CosaUiST_Z2fAPnH.webp 750w, /_astro/02_02_03.CosaUiST_1pAH4d.webp 828w, /_astro/02_02_03.CosaUiST_2kNzub.webp 1080w, /_astro/02_02_03.CosaUiST_ZJARgh.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進んでいきます。画像中のハイパーチューブに沿っていくイメージです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_04.BtEiI6c8_18jYgV.webp&quot; srcset=&quot;/_astro/02_02_04.BtEiI6c8_Z21bOgb.webp 640w, /_astro/02_02_04.BtEiI6c8_1JfHHz.webp 750w, /_astro/02_02_04.BtEiI6c8_kg7ly.webp 828w, /_astro/02_02_04.BtEiI6c8_ZQrGLx.webp 1080w, /_astro/02_02_04.BtEiI6c8_18jYgV.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;途中では、このように川が分岐しています。手前が下流で、奥が上流です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_05.DiJ1Hgka_29fuwl.webp&quot; srcset=&quot;/_astro/02_02_05.DiJ1Hgka_Z1kaouS.webp 640w, /_astro/02_02_05.DiJ1Hgka_2qh8sR.webp 750w, /_astro/02_02_05.DiJ1Hgka_11hx6Q.webp 828w, /_astro/02_02_05.DiJ1Hgka_9sNsR.webp 1080w, /_astro/02_02_05.DiJ1Hgka_29fuwl.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;途中で、胞子花がいるゾーンの横を通ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_06.D3Lh5gWO_26Mjnu.webp&quot; srcset=&quot;/_astro/02_02_06.D3Lh5gWO_17PCqr.webp 640w, /_astro/02_02_06.D3Lh5gWO_ZbSXoJ.webp 750w, /_astro/02_02_06.D3Lh5gWO_Z1ASyKK.webp 828w, /_astro/02_02_06.D3Lh5gWO_70Ck1.webp 1080w, /_astro/02_02_06.D3Lh5gWO_26Mjnu.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;進みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_07.BrXGFzWV_ZerDqa.webp&quot; srcset=&quot;/_astro/02_02_07.BrXGFzWV_IcXzo.webp 640w, /_astro/02_02_07.BrXGFzWV_ZAwCfM.webp 750w, /_astro/02_02_07.BrXGFzWV_Z20wdBN.webp 828w, /_astro/02_02_07.BrXGFzWV_Z2eektD.webp 1080w, /_astro/02_02_07.BrXGFzWV_ZerDqa.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;正面ちょい右の方に目的の洞窟があります。川を挟んだ対岸へ渡ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_08.fia9TZi1_ZUJibw.webp&quot; srcset=&quot;/_astro/02_02_08.fia9TZi1_2kTFsm.webp 640w, /_astro/02_02_08.fia9TZi1_11a4Cb.webp 750w, /_astro/02_02_08.fia9TZi1_ZnOvIP.webp 828w, /_astro/02_02_08.fia9TZi1_29F9yV.webp 1080w, /_astro/02_02_08.fia9TZi1_ZUJibw.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あの洞窟の中の採鉱機がSAM鉱床のものです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_09.Btpj1tsA_1Wlcyz.webp&quot; srcset=&quot;/_astro/02_02_09.Btpj1tsA_Zlvthd.webp 640w, /_astro/02_02_09.Btpj1tsA_Z1Fg57o.webp 750w, /_astro/02_02_09.Btpj1tsA_1YVskw.webp 828w, /_astro/02_02_09.Btpj1tsA_Z2qttT.webp 1080w, /_astro/02_02_09.Btpj1tsA_1Wlcyz.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;SAM鉱床に到着です。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_02_10.vYTWaQ1b_1zsftN.webp&quot; srcset=&quot;/_astro/02_02_10.vYTWaQ1b_Z2eIm1.webp 640w, /_astro/02_02_10.vYTWaQ1b_Z1lYkcc.webp 750w, /_astro/02_02_10.vYTWaQ1b_2jddfI.webp 828w, /_astro/02_02_10.vYTWaQ1b_ZpjqyF.webp 1080w, /_astro/02_02_10.vYTWaQ1b_1zsftN.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：東の湿地の近くの小さい洞窟&lt;a href=&quot;#その3東の湿地の近くの小さい洞窟&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;東の湿地の近くにSAM鉱床があります。この赤丸の付近にあります。
&lt;img loading=&quot;lazy&quot; width=&quot;2059&quot; height=&quot;983&quot; src=&quot;/_astro/02_03_01.B3VT-JSG_Z1PXUY0.webp&quot; srcset=&quot;/_astro/02_03_01.B3VT-JSG_ZquiKg.webp 640w, /_astro/02_03_01.B3VT-JSG_Z1GxhKG.webp 750w, /_astro/02_03_01.B3VT-JSG_ZOLjDL.webp 828w, /_astro/02_03_01.B3VT-JSG_Z2lcNcg.webp 1080w, /_astro/02_03_01.B3VT-JSG_1JfYol.webp 1280w, /_astro/02_03_01.B3VT-JSG_ZGr4I5.webp 1668w, /_astro/02_03_01.B3VT-JSG_1pDRib.webp 2048w, /_astro/02_03_01.B3VT-JSG_Z1PXUY0.webp 2059w&quot; /&gt;&lt;/p&gt;&lt;p&gt;SAM鉱床がある付近の地形はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_03_02.B9KrGmSZ_Z6dhJU.webp&quot; srcset=&quot;/_astro/02_03_02.B9KrGmSZ_Z5xLos.webp 640w, /_astro/02_03_02.B9KrGmSZ_Z1pineD.webp 750w, /_astro/02_03_02.B9KrGmSZ_2fTadh.webp 828w, /_astro/02_03_02.B9KrGmSZ_Z25YXNo.webp 1080w, /_astro/02_03_02.B9KrGmSZ_Z6dhJU.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この鉱床への入り口は、全て大きな岩で密閉されています。&lt;/p&gt;&lt;p&gt;この画面では右手に岩がありましたが、既に破壊しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_03_03.BcwEshZV_mY62N.webp&quot; srcset=&quot;/_astro/02_03_03.BcwEshZV_Z1xEP9P.webp 640w, /_astro/02_03_03.BcwEshZV_2cLGNU.webp 750w, /_astro/02_03_03.BcwEshZV_MM6rT.webp 828w, /_astro/02_03_03.BcwEshZV_Z1BMA0F.webp 1080w, /_astro/02_03_03.BcwEshZV_mY62N.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;洞窟に入るとすぐSAM鉱床が見つかります。&lt;/p&gt;&lt;p&gt;洞窟に初めて入るときは霧の濃度が凄まじいので、視界がものすごく悪いです。ライトを付けても意味がありません。&lt;/p&gt;&lt;p&gt;しかし、こういう場合に限って強めのスティンガーがいるので、気合でやっつけましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_03_04.LLTWz_F4_1gD5Uj.webp&quot; srcset=&quot;/_astro/02_03_04.LLTWz_F4_79CfR.webp 640w, /_astro/02_03_04.LLTWz_F4_Z1czXzj.webp 750w, /_astro/02_03_04.LLTWz_F4_2sByRB.webp 828w, /_astro/02_03_04.LLTWz_F4_ZI8A8a.webp 1080w, /_astro/02_03_04.LLTWz_F4_1gD5Uj.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;鉱床に到着しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_03_05.DV5VjUy6_1h2px6.webp&quot; srcset=&quot;/_astro/02_03_05.DV5VjUy6_2pfSFB.webp 640w, /_astro/02_03_05.DV5VjUy6_15vhPq.webp 750w, /_astro/02_03_05.DV5VjUy6_ZjtivA.webp 828w, /_astro/02_03_05.DV5VjUy6_ZHJgvn.webp 1080w, /_astro/02_03_05.DV5VjUy6_1h2px6.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：中部の南の高地&lt;a href=&quot;#その4中部の南の高地&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このSAM鉱床は、陸の孤島のような場所にあります。&lt;/p&gt;&lt;p&gt;この場所は行き方ではなく、鉱床の周辺の眺めなどを紹介します。（基本的に、土台を空中に伸ばしていって行きます。）&lt;/p&gt;&lt;p&gt;鉱床がある場所は、以下の地図の現在位置らへんになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2052&quot; height=&quot;981&quot; src=&quot;/_astro/02_04_01.CsiuQSpR_ZRoaH4.webp&quot; srcset=&quot;/_astro/02_04_01.CsiuQSpR_ZGKAN1.webp 640w, /_astro/02_04_01.CsiuQSpR_24fao5.webp 750w, /_astro/02_04_01.CsiuQSpR_Z29b0iV.webp 828w, /_astro/02_04_01.CsiuQSpR_Zr5FWL.webp 1080w, /_astro/02_04_01.CsiuQSpR_1yiXwJ.webp 1280w, /_astro/02_04_01.CsiuQSpR_ZRo5zG.webp 1668w, /_astro/02_04_01.CsiuQSpR_1eGQqz.webp 2048w, /_astro/02_04_01.CsiuQSpR_ZRoaH4.webp 2052w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう少し地図を拡大するとこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;2067&quot; height=&quot;983&quot; src=&quot;/_astro/02_04_02.BF3gvvKT_wqfij.webp&quot; srcset=&quot;/_astro/02_04_02.BF3gvvKT_6kRxy.webp 640w, /_astro/02_04_02.BF3gvvKT_Z2cPu4h.webp 750w, /_astro/02_04_02.BF3gvvKT_Z1l4vWm.webp 828w, /_astro/02_04_02.BF3gvvKT_ZTMu5E.webp 1080w, /_astro/02_04_02.BF3gvvKT_19iMeB.webp 1280w, /_astro/02_04_02.BF3gvvKT_Z2g9Lkj.webp 1668w, /_astro/02_04_02.BF3gvvKT_1V0iM3.webp 2048w, /_astro/02_04_02.BF3gvvKT_wqfij.webp 2067w&quot; /&gt;&lt;/p&gt;&lt;p&gt;SAM鉱床はこんな場所になっています。南を向いています。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_04_03.DedVG7PM_cwxcj.webp&quot; srcset=&quot;/_astro/02_04_03.DedVG7PM_238d2i.webp 640w, /_astro/02_04_03.DedVG7PM_InBc7.webp 750w, /_astro/02_04_03.DedVG7PM_ZFAY9T.webp 828w, /_astro/02_04_03.DedVG7PM_Z1Mf8Qa.webp 1080w, /_astro/02_04_03.DedVG7PM_cwxcj.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その立ち位置から、東を向いたときの眺めです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_04_04.CmKHMoDh_PHGYM.webp&quot; srcset=&quot;/_astro/02_04_04.CmKHMoDh_Z1cIvG8.webp 640w, /_astro/02_04_04.CmKHMoDh_Z2wt7wj.webp 750w, /_astro/02_04_04.CmKHMoDh_18IpUB.webp 828w, /_astro/02_04_04.CmKHMoDh_Z193Y3G.webp 1080w, /_astro/02_04_04.CmKHMoDh_PHGYM.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その立ち位置から、北を向いたときの眺めです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_04_05.DEXRuiU6_Z2kHcSv.webp&quot; srcset=&quot;/_astro/02_04_05.DEXRuiU6_1j6apb.webp 640w, /_astro/02_04_05.DEXRuiU6_ZDqq0.webp 750w, /_astro/02_04_05.DEXRuiU6_Z1pD1M1.webp 828w, /_astro/02_04_05.DEXRuiU6_JHeQW.webp 1080w, /_astro/02_04_05.DEXRuiU6_Z2kHcSv.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その立ち位置から、西を向いたときの眺めです。
&lt;img loading=&quot;lazy&quot; width=&quot;1152&quot; height=&quot;648&quot; src=&quot;/_astro/02_04_06.CcztoRUw_Z1c4GXa.webp&quot; srcset=&quot;/_astro/02_04_06.CcztoRUw_Z2fMqkf.webp 640w, /_astro/02_04_06.CcztoRUw_1uE6Dv.webp 750w, /_astro/02_04_06.CcztoRUw_5Evhu.webp 828w, /_astro/02_04_06.CcztoRUw_1SkJMi.webp 1080w, /_astro/02_04_06.CcztoRUw_Z1c4GXa.webp 1152w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Satisfactoryを快適に&lt;a href=&quot;#satisfactoryを快適に&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;マウスその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ATK ワイヤレス ゲーミングマウス VXE Dragonfly R1 Pro Black 軽量48グラム Pixart PAW3395搭載 最大75時間 冷感コーティング 4Kポーリングレート対応 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crwsW6&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Razer Orochi V2 ゲーミングマウス ワイヤレス 超軽量60g HyperSpeed Bluetooth 2つの無線モード 最大950時間バッテリー持続 5G 高性能 18000 DPI オプティカルセンサー 【日本正規代理店保証品】 RZ01-03730100-R3A1&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4crzb26&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;マウスその3&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Logicool G PRO X SUPERLIGHT ワイヤレス ゲーミングマウス G-PPD-003WL-WH 軽量 63g未満 LIGHTSPEED HERO 25Kセンサー POWERPLAY 無線 充電 対応 ゲーミング マウス ホワイト PC windows 国内正規品&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/3QfO5AY&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその1&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;ベンキュージャパン BenQ MOBIUZ EX2710Q ゲーミングモニター (27インチ/165Hz/IPS/WQHD/1ms/HDRi/HDR400/FreeSync Premium 2.1ch treVoloスピーカー/高機能スタンド/ゲームモード(FPS/RPG/レーシング)&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4dLlygo&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;モニターその2&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;アイ・オー・データ IODATA ゲーミングモニター 27インチ GigaCrysta WQHD 180Hz AHVAパネル ブラック(HDMI×2/DisplayPort/VESA対応/高さ調整/縦横回転/土日サポート/日本メーカー) EX-GDQ271JA&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4tcBgpv&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こりゃ、製造が捗るわ〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、現場からペンギンでした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Mac】頻繁に使う便利なショートカットキー16選の一覧</title><link>https://endorphinbath.com/posts/mac-shortcutkey-frequently-using-16/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mac-shortcutkey-frequently-using-16/</guid><description>Macでショートカットキーを使っていますか？　あまり使っていないのであれば、今回紹介するものをぜひ試してみて下さい。Macの操作が爆速になります。</description><pubDate>Mon, 19 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Macでショートカットキーを使ってますか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は問いかけるスタイルだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あまり、ショートカットキーを使っていない方は、これから僕が頻繁に使っているショートカットキーを紹介するので、ぜひ使ってみて下さい。作業がめちゃくちゃ速くなるので。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;利用している環境&lt;a href=&quot;#利用している環境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕がいつも利用している環境は以下の通りになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;macOS Monterey&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ショートカットキー一覧&lt;a href=&quot;#ショートカットキー一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介するショートカットキーの一覧になります。&lt;/p&gt;








































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;アプリを切り替え&lt;/td&gt;&lt;td&gt;command + tab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アプリを終了する&lt;/td&gt;&lt;td&gt;command + Q&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;使用中のアプリ内の次のウインドウに移動&lt;/td&gt;&lt;td&gt;command + @&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを上に移動&lt;/td&gt;&lt;td&gt;control + P&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを下に移動&lt;/td&gt;&lt;td&gt;control + N&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを左に移動&lt;/td&gt;&lt;td&gt;control + B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを右に移動&lt;/td&gt;&lt;td&gt;control + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを先頭に移動&lt;/td&gt;&lt;td&gt;control + A、fn + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カーソルを末尾に移動&lt;/td&gt;&lt;td&gt;control + E、fn + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画面全体をスクリーンショット&lt;/td&gt;&lt;td&gt;command + Shift + 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画面を一部選んでスクリーンショット&lt;/td&gt;&lt;td&gt;command + Shift + 4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画面を一部選んでスクリーン録画&lt;/td&gt;&lt;td&gt;command + Shift + 5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フォルダ/ファイルをドロップした場所にコピー&lt;/td&gt;&lt;td&gt;optionを押しながら、フォルダ/ファイルをドラッグ&amp;amp;ドロップ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画面をロック&lt;/td&gt;&lt;td&gt;command + L&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ファイルを開く&lt;/td&gt;&lt;td&gt;command + O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ファイルの情報を表示する&lt;/td&gt;&lt;td&gt;command + I&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ショートカットキーの紹介&lt;a href=&quot;#ショートカットキーの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下にショートカットキーをさらっと個別に紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;アプリを切り替える&lt;a href=&quot;#アプリを切り替える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自分が使いたいアプリの方にカーソルを持っていって選択する作業は、もう終わりです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;command + tab&lt;/code&gt;を押して、使いたいアプリにフォーカスした状態で&lt;code&gt;command&lt;/code&gt;ボタンを離せば、そのアプリに切り替わってくれます。&lt;/p&gt;&lt;p&gt;Windowsで似た機能だと&lt;code&gt;Alt + Tab&lt;/code&gt;がありますね。Windowsだと「ウインドウ」単位で選択しますが、Macだと「アプリ」単位で選択します。&lt;/p&gt;&lt;p&gt;Macでウインドウを切り替えたい場合は、&lt;code&gt;command + @&lt;/code&gt;があります。後ほど紹介します。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;233&quot; src=&quot;/_astro/01.CQOz0fQ7_Z1OPOX4.webp&quot; srcset=&quot;/_astro/01.CQOz0fQ7_Z1OPOX4.webp 360w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アプリを終了する&lt;a href=&quot;#アプリを終了する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「アプリを切り替える」際に、もう使わないであろうアプリが表示されるのが鬱陶しくありませんか？&lt;/p&gt;&lt;p&gt;その場合は、アプリ自体を終了させる必要があります。&lt;code&gt;command + Q&lt;/code&gt;を押してみましょう。&lt;/p&gt;&lt;p&gt;ちなみに、&lt;code&gt;command + W&lt;/code&gt;などを使ってアプリを「閉じる」だけではアプリを終了したことにはならないので、&lt;code&gt;command + Q&lt;/code&gt;を使ってアプリを終了させてしましょう。&lt;/p&gt;&lt;p&gt;さらに、Google Chromeの場合だと、&lt;code&gt;command + Q&lt;/code&gt;を1度押しただけではChromeが終了しません。「終了するには ⌘Qキーを押します。」というメッセージが出ている状態で再度&lt;code&gt;command + Q&lt;/code&gt;を押す必要があります。（この機能は事故防止のためにありますので、僕としてはものすごく助かっています。）
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;233&quot; src=&quot;/_astro/02.CFr7mYh-_YM271.webp&quot; srcset=&quot;/_astro/02.CFr7mYh-_YM271.webp 360w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;使用中のアプリ内の次のウインドウに移動&lt;a href=&quot;#使用中のアプリ内の次のウインドウに移動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;command + tab&lt;/code&gt;ではアプリは切り替わりますが、ウインドウを切り替えることは出来ません。&lt;/p&gt;&lt;p&gt;1つのアプリ内で複数のウインドウを開いている時、&lt;code&gt;command + tab&lt;/code&gt;で目当てのウインドウが開かれず、再び、トラックパッドやマウスに手を移動してウインドウを切り替えるのは、効率的ではありません。&lt;/p&gt;&lt;p&gt;そこで、ウインドウを切り替える時に&lt;code&gt;command + @&lt;/code&gt;キーを押してみて下さい。現在使用しているアプリ内でウインドウを切り替えてくれます。（その後、&lt;code&gt;command + tab&lt;/code&gt;でアプリを切り替えたときも、その切り替えたウインドウが最初に開いてくれます。）&lt;/p&gt;&lt;p&gt;特にGoogle Chromeでは複数のウインドウを開くことはありがちかと思います。その際は、&lt;code&gt;command + @&lt;/code&gt;で作業を効率化してみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;233&quot; src=&quot;/_astro/03.h69CHIgF_Z1X0HjO.webp&quot; srcset=&quot;/_astro/03.h69CHIgF_Z1X0HjO.webp 360w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カーソルを上、下、左、右に移動&lt;a href=&quot;#カーソルを上下左右に移動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カーソルを上、下、左、右に移動する場合は、&lt;/p&gt;&lt;p&gt;それぞれ、&lt;code&gt;control + P&lt;/code&gt;、&lt;code&gt;control + N&lt;/code&gt;、&lt;code&gt;control + B&lt;/code&gt;、&lt;code&gt;control + F&lt;/code&gt; が対応しています。&lt;/p&gt;&lt;p&gt;覚え方としては、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;上: 「前」の行（Previous line）に移動するので、&lt;code&gt;P&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;下: 「次」の行（Next line）に移動するので、&lt;code&gt;N&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;左: テキストの進行方向の「後方」（Back）に移動するので、&lt;code&gt;B&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;右: テキストの進行方向の「前方」（Forward）に移動するので、&lt;code&gt;F&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;この操作方法を覚えることによって、両手の位置を変えずにテキストの編集位置を移動することが出来ます。ぜひお役立て下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カーソルを先頭、末尾に移動&lt;a href=&quot;#カーソルを先頭末尾に移動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カーソルを先頭、末尾に移動する場合は、&lt;/p&gt;&lt;p&gt;先頭には、&lt;code&gt;control + A&lt;/code&gt;、&lt;code&gt;fn + ←&lt;/code&gt;、&lt;/p&gt;&lt;p&gt;末尾には、&lt;code&gt;control + E&lt;/code&gt;、&lt;code&gt;fn + →&lt;/code&gt; が対応しています。&lt;/p&gt;&lt;p&gt;覚え方としては、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;先頭・・・アルファベットの「A」は最初の文字。なので、&lt;code&gt;A&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;末尾・・・最後（End）なので、&lt;code&gt;E&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これも覚えることによって、両手の位置を変えずにテキストの編集位置を移動することが出来ます。ぜひお役立て下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;スクリーンショット・スクリーン録画&lt;a href=&quot;#スクリーンショットスクリーン録画&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在、操作している画面の様子を画像や動画として残したいときはありませんか？&lt;/p&gt;&lt;p&gt;その場合は、以下のショートカットキーでスクリーンショットもしくはスクリーン録画をすることが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command + Shift + 3&lt;/code&gt;: 画面全体をスクリーンショット&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command + Shift + 4&lt;/code&gt;: 画面を一部選んでスクリーンショット&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command + Shift + 5&lt;/code&gt;: 画面を一部選んでスクリーン録画&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;保存したスクショと録画は、デフォルトでデスクトップ上に保存されます。&lt;/p&gt;&lt;p&gt;保存した直後は、画面右下の方で実際に保存されたファイルを確認できます。&lt;/p&gt;&lt;p&gt;記事の執筆などにとても役立つ機能になっていますので、ぜひご賞味下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フォルダ/ファイルをドロップした場所にコピー&lt;a href=&quot;#フォルダファイルをドロップした場所にコピー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;MacのFinder上で、フォルダ/ファイルをドラッグ&amp;amp;ドロップすると、ドロップした場所にフォルダ/ファイルが移動されます。&lt;/p&gt;&lt;p&gt;しかし、ファイルを移動するのではなくコピーしたい時には、少し機能として物足りません。&lt;/p&gt;&lt;p&gt;そんなコピーしたい状況では、「optionを押しながら」フォルダ/ファイルをドラッグ&amp;amp;ドロップすると、ドロップした場所にコピーすることが出来ます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;command + C&lt;/code&gt;→コピーしたいフォルダにフォーカス。→&lt;code&gt;command + V&lt;/code&gt;の操作でも出来ないことはないですが、「optionを押しながら、フォルダ/ファイルをドラッグ&amp;amp;ドロップ」した方が、操作として直感的ですし、手数も減ります。&lt;/p&gt;&lt;p&gt;ですので、この操作方法をぜひお試し下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;161&quot; src=&quot;/_astro/04.jrCGjpHe_sMmcs.webp&quot; srcset=&quot;/_astro/04.jrCGjpHe_sMmcs.webp 360w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画面をロック&lt;a href=&quot;#画面をロック&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Macを操作している途中で離席したいときがあるかと思います。&lt;/p&gt;&lt;p&gt;その時は、&lt;code&gt;command + L&lt;/code&gt;でMacの画面をロックすることが出来ます。そこから復帰するためにパスワードを入力させる状態にすることが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ファイルを開く、ファイルの情報を表示する&lt;a href=&quot;#ファイルを開くファイルの情報を表示する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ファイルの中身を開いたり、ファイルの情報を表示したりするときに、トラックパッドから行っていませんか？&lt;/p&gt;&lt;p&gt;ファイルの情報を表示するときに、わざわざファイルを右クリックして「情報を見る」をクリックしていませんか？&lt;/p&gt;&lt;p&gt;ファイルを方向キーで選んだ後にトラックパッドに手を移動する手間を省略したくありませんか？&lt;/p&gt;&lt;p&gt;そういった手間を無くすために、以下のショートカットキーでFinderの操作を効率化出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command + O&lt;/code&gt;: ファイルを開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command + I&lt;/code&gt;: ファイルの情報を表示する&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ぜひ試してみて下さい。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;Invalid directive. (&quot;speech-bubble&quot; requires &quot;avatar&quot;, &quot;name&quot;, and &quot;comment&quot; attributes)&lt;/div&gt;&lt;div&gt;Invalid directive. (&quot;speech-bubble&quot; requires &quot;avatar&quot;, &quot;name&quot;, and &quot;comment&quot; attributes)&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】GoogleドライブにあるフォルダとファイルがGoogle Apps Scriptに使用されているかどうかを確認する</title><link>https://endorphinbath.com/posts/gas-files-are-used-in-script/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-files-are-used-in-script/</guid><description>IDを入力して、そのGoogleドライブにあるフォルダとファイルがGASスクリプト上で使用されているかどうかを確認できるツールを作りました。これで、フォルダやファイルを削除したことが原因でスクリプトが動かなくなる事故を防ぎます。</description><pubDate>Sun, 18 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Googleドライブにあるファイルを消そうとした時に、そのファイルがスクリプトで使用されていないかどうか気になったことはないですか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん・・・ありませんね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうかそうか、やっぱりあるよな。そこで今回は、指定したIDがスクリプトの中で使用されているかどうかを確認するツールを作りました。紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・よろしくね&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;前回、自分がGoogle Apps Scriptで使用しているIDを管理するライブラリを作りました。&lt;/p&gt;&lt;p&gt;その過去の紹介記事は以下になります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-management-of-id-frequently-used/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん&lt;/div&gt;&lt;div&gt;Google Apps Scriptで記述したフォルダやファイルのIDを一括管理するためのアイデアを掲載します。これで、どのフォルダとファイルがスクリプトで使用されているかどうかを管理できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/09/20220305_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、今回はそのライブラリを使って、スクリプト内で指定したIDが各々のスクリプトの中で使用されているかどうかを確認するツールを作りました。&lt;/p&gt;&lt;p&gt;本ツールを実行して、指定したIDが使われている場合は、「ID: ‘XXXXXXXXXXXX’ is used.」といった具合にIDが使用されていることを知らせてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;2574&quot; height=&quot;1596&quot; src=&quot;/_astro/01.C3Xr2hjy_Z1OQamE.webp&quot; srcset=&quot;/_astro/01.C3Xr2hjy_Z22rgd1.webp 640w, /_astro/01.C3Xr2hjy_Z1SDq0r.webp 750w, /_astro/01.C3Xr2hjy_Z1Nt1JW.webp 828w, /_astro/01.C3Xr2hjy_FxTAR.webp 1080w, /_astro/01.C3Xr2hjy_1g5dSI.webp 1280w, /_astro/01.C3Xr2hjy_Z3G0td.webp 1668w, /_astro/01.C3Xr2hjy_Z1U2re2.webp 2048w, /_astro/01.C3Xr2hjy_ZQzCVW.webp 2560w, /_astro/01.C3Xr2hjy_Z1OQamE.webp 2574w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;作る過程&lt;a href=&quot;#作る過程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;それでは、本ツールの制作過程を紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;IDの受け渡し部分の変更&lt;a href=&quot;#idの受け渡し部分の変更&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、前回作った各スクリプトへのIDの受け渡し部分なのですが、返り値をObject型になるように変更します。各スクリプトでIDを取得する場合は、属性を指定して取得してもらうように変更します。&lt;/p&gt;&lt;p&gt;この属性名は、以前作成した関数名と揃えてソースの改編を楽にします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;idObjForFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;FOLDER_ID&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;SHEET_ID&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnObj&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;それに伴い、IDを受け取る部分も、以下のようにソースを変更します。
&lt;img loading=&quot;lazy&quot; width=&quot;2274&quot; height=&quot;464&quot; src=&quot;/_astro/02.D2c51pF-_DvSQJ.webp&quot; srcset=&quot;/_astro/02.D2c51pF-_Z25ySXH.webp 640w, /_astro/02.D2c51pF-_Z29zO3u.webp 750w, /_astro/02.D2c51pF-_Z26gAOQ.webp 828w, /_astro/02.D2c51pF-_Z1fVTH8.webp 1080w, /_astro/02.D2c51pF-_Z1P80R7.webp 1280w, /_astro/02.D2c51pF-_1kaLPL.webp 1668w, /_astro/02.D2c51pF-_19tVET.webp 2048w, /_astro/02.D2c51pF-_DvSQJ.webp 2274w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;指定したIDがスクリプトの中で使用されているかどうかを確認する機能&lt;a href=&quot;#指定したidがスクリプトの中で使用されているかどうかを確認する機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1つのライブラリの中で各々のスクリプトで使用するIDを宣言する状態になりましたので、このライブラリ内で、指定したIDがスクリプトの中で使用されているかどうかを確認する機能を実装します。&lt;/p&gt;&lt;p&gt;ソース全体はこんな感じになっています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkIdIsUsed&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;idObjForWebClipManager&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;idObjForImageCroppingSheet&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;idObjForLandmasterLibraryGas&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnedId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resultOfUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isIdUsedArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`checkIdIsUsed: print objsInTarget&apos;s elements: start --------------------------------------------------------`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`checkIdIsUsed: print objsInTarget&apos;s elements: end --------------------------------------------------------`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;resultOfUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnedId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objsInTarget&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;]];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnedId&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;resultOfUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resultOfUsed&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isIdUsedArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resultOfUsed&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isIdUsedArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;ID1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;ID2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isIdUsedArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkIdIsUsed&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;strIdUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; NOT&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;strIdUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; NOT&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isIdUsedArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;strIdUsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`ID: &apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;checkIdArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos; is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;strIdUsed&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; used.`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;objsInTarget&lt;/code&gt;で、各スクリプトで使用するIDを宣言したオブジェクトを配列形式でリストアップします。&lt;/p&gt;&lt;p&gt;そして、引数で渡した&lt;code&gt;checkIdArray&lt;/code&gt;にファイルIDやフォルダIDが指定されているので、&lt;code&gt;objsInTarget&lt;/code&gt;内のオブジェクトのキーを全て走査し、指定したIDが&lt;code&gt;objsInTarget&lt;/code&gt;の中にあるかどうかを探索します。&lt;/p&gt;&lt;p&gt;IDが見つかったら、&lt;code&gt;checkIdArray&lt;/code&gt;と同じインデックスにtrueが格納されて、IDが無かったら、falseが格納されます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;IDが使用されているかどうかを表示&lt;a href=&quot;#idが使用されているかどうかを表示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;main()&lt;/code&gt;の&lt;code&gt;isIdUsedArray&lt;/code&gt;に、trueかfalseを保持した配列が返ってきたので、そのboolean値によって、&lt;code&gt;checkIdArray&lt;/code&gt;内で同じインデックスにあるIDが使用されているかどうかを&lt;code&gt;console.log&lt;/code&gt;で表示します。&lt;/p&gt;&lt;p&gt;これで、本ツールの紹介は以上になります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;なぜ、この方法にしたのか&lt;a href=&quot;#なぜこの方法にしたのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前の記事では、本ライブラリのスクリプトファイルを指定して、それらをgrepしてIDを探索する方法を思いつきました。&lt;/p&gt;&lt;p&gt;しかし、なぜその方法を採用しなかったのかと言うと、
この機能を動かす動機としては、Googleドライブを操作しているときに発生します。&lt;/p&gt;&lt;p&gt;そのため、Googleドライブから本機能の実行までの動線を単純にするためには、grepの実行による方法を取るよりも、Google Apps Scriptのコンソールを開いて実行した方が確認作業が楽になるのではないかと考えました。&lt;/p&gt;&lt;p&gt;GitHub Actionsなどにいちいち移動するよりは、同じGoogle内のサービスで完結するほうが単純です。
&lt;img loading=&quot;lazy&quot; width=&quot;2908&quot; height=&quot;1336&quot; src=&quot;/_astro/03.DZv34Bpl_Z1WFGX2.webp&quot; srcset=&quot;/_astro/03.DZv34Bpl_FQStG.webp 640w, /_astro/03.DZv34Bpl_Z1DvUTh.webp 750w, /_astro/03.DZv34Bpl_1I7tfc.webp 828w, /_astro/03.DZv34Bpl_Z1ME23B.webp 1080w, /_astro/03.DZv34Bpl_Zy8E6l.webp 1280w, /_astro/03.DZv34Bpl_23AXhm.webp 1668w, /_astro/03.DZv34Bpl_Z182cWM.webp 2048w, /_astro/03.DZv34Bpl_Z1nax22.webp 2560w, /_astro/03.DZv34Bpl_Z1WFGX2.webp 2908w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上、今回の方法を採用した理由でした。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_012.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、フォルダやファイルを削除したことが原因でスクリプトが動かなくなる、みたいなことが無くなるね！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うむ。今回の大目的がまさしくそれだった！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Android、アプリ】スマホで撮った写真を保存・管理する時にいつも使っている「re.*(Renamer)」を紹介する</title><link>https://endorphinbath.com/posts/android-app-rename-files/</link><guid isPermaLink="true">https://endorphinbath.com/posts/android-app-rename-files/</guid><description>僕がいつも写真を管理するために利用しているアプリ「re.*(Renamer)」を紹介します。これはファイルをリネームしてくれるアプリです。その使用方法を概要レベルで載せておきます。</description><pubDate>Sat, 17 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふっふっふ・・・、今回は、僕が写真を管理するために常用しているアプリを紹介しましょう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何をしてくれるアプリなのか？&lt;a href=&quot;#何をしてくれるアプリなのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「re.*(Renamer)」は、一言で言うと、「ファイル名を変える」ためのアプリになります。&lt;/p&gt;&lt;p&gt;利用できるスマホは、Androidになります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ファイル名がごちゃごちゃなのは嫌だ&lt;a href=&quot;#ファイル名がごちゃごちゃなのは嫌だ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;あなたは、画像ファイルを管理する際に、同じ命名規則で並んでいてほしいと思うことはないでしょうか？&lt;/p&gt;&lt;p&gt;例えば、スマホのカメラで撮影した画像のファイル名は「20220916_123456.jpg」となっていて、&lt;/p&gt;&lt;p&gt;スマホのスクリーンショットの画像ファイル名は「Screeshot_20220916-012345_Discord.jpg」だったり、&lt;/p&gt;&lt;p&gt;はたまた、LINE上で保存した画像のファイル名が「166443671142.jpg」となっていたり・・・&lt;/p&gt;&lt;p&gt;「同じフォルダの中で順序付けて管理したいのに写真の時系列がめちゃくちゃじゃないか！」と、僕はよく思っています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;お、画像を時系列で並べられそうだぞ&lt;a href=&quot;#お画像を時系列で並べられそうだぞ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そう思っていた僕が昔に見つけたアプリが、この「re.*(Renamer)」になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/01.DfskV2Za_Ziyj5b.webp&quot; srcset=&quot;/_astro/01.DfskV2Za_G4jql.webp 640w, /_astro/01.DfskV2Za_27Ih0b.webp 750w, /_astro/01.DfskV2Za_Z1pn8Xo.webp 828w, /_astro/01.DfskV2Za_Ziyj5b.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「こんなまっさらな画面で何をするの？」かと言うと、&lt;/p&gt;&lt;p&gt;リネームしたい画像ファイルが入っているフォルダに移動して、「src」と「dist」のところに正規表現などを打ち込みます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/02.D3UfAdvd_Z29dTJQ.webp&quot; srcset=&quot;/_astro/02.D3UfAdvd_1hsbvt.webp 640w, /_astro/02.D3UfAdvd_Z2m4YIC.webp 750w, /_astro/02.D3UfAdvd_ZNYgSg.webp 828w, /_astro/02.D3UfAdvd_Z29dTJQ.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、以下のようにチェックボックスにチェックを入れて、「confirm」ボタンを押すと、こんな風にファイル名がリネームされるよと赤字で教えてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/03.BaAN9Hea_ZOlAVn.webp&quot; srcset=&quot;/_astro/03.BaAN9Hea_ZX19yJ.webp 640w, /_astro/03.BaAN9Hea_sCN06.webp 750w, /_astro/03.BaAN9Hea_20IvPs.webp 828w, /_astro/03.BaAN9Hea_ZOlAVn.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その赤字のとおりにリネームして良ければ、「replace」ボタンを押します。&lt;/p&gt;&lt;p&gt;すると、ファイル名がリネームされます！
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/04.4HNQFjJG_1TecRK.webp&quot; srcset=&quot;/_astro/04.4HNQFjJG_15ql1W.webp 640w, /_astro/04.4HNQFjJG_2w5iAM.webp 750w, /_astro/04.4HNQFjJG_Z1117mM.webp 828w, /_astro/04.4HNQFjJG_1TecRK.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕は、よく使うリネーム用の正規表現をIMEの辞書に保存しているので、「src」と「dist」が空っぽの時にそれで打ち込んでいます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ん？ IMEって何だって？&lt;a href=&quot;#ん-imeって何だって&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;IMEというのは、「Input Method Editor」の略で、どうやってキーボードから文字を入力するのかを設定できる機能のことです。&lt;/p&gt;&lt;p&gt;AndroidのIMEとなると、「Google日本語入力」や「Atok」はもうお亡くなりになったので・・・&lt;/p&gt;&lt;p&gt;「Gboard」、「Simeji」が著名なIMEになるかと思います。以下に、AndroidとiPhone用のリンクを載せておきます。&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/36/9c/fa/369cfa1c-232c-5ba0-8589-3c82e9bf6852/AppIcon-0-0-1x_U007emarketing-0-0-0-9-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/512x512bb.jpg&quot; alt=&quot;Gboard - Google キーボード&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;p&gt;Gboard - Google キーボード&lt;/p&gt;&lt;p&gt;&lt;span&gt;Google&lt;/span&gt;&lt;span&gt;無料&lt;/span&gt;&lt;span&gt;posted with&lt;a href=&quot;https://mama-hack.com/app-reach/&quot; target=&quot;_blank&quot;&gt;アプリーチ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://apps.apple.com/jp/app/gboard-google-%25E3%2582%25AD%25E3%2583%25BC%25E3%2583%259C%25E3%2583%25BC%25E3%2583%2589/id1091700242?uo=4&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-itune-ja.webp&quot; alt=&quot;Gboard - Google キーボード on iTunes&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-gplay-ja.webp&quot; alt=&quot;Gboard - Google キーボード on Google Play&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/05/6f/a5/056fa56b-8217-4c2c-581c-f0a4dd67271e/AppIcon-0-0-1x_U007epad-0-1-0-85-220.png/512x512bb.jpg&quot; alt=&quot;Simeji日本語入力キーボード｜顔文字・絵文字・フォント&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;p&gt;Simeji日本語入力キーボード｜顔文字・絵文字・フォント&lt;/p&gt;&lt;p&gt;&lt;span&gt;Baidu Japan Inc.&lt;/span&gt;&lt;span&gt;無料&lt;/span&gt;&lt;span&gt;posted with&lt;a href=&quot;https://mama-hack.com/app-reach/&quot; target=&quot;_blank&quot;&gt;アプリーチ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://apps.apple.com/jp/app/simeji%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%25E5%2585%25A5%25E5%258A%259B%25E3%2582%25AD%25E3%2583%25BC%25E3%2583%259C%25E3%2583%25BC%25E3%2583%2589-%25E9%25A1%2594%25E6%2596%2587%25E5%25AD%2597-%25E7%25B5%25B5%25E6%2596%2587%25E5%25AD%2597-%25E3%2583%2595%25E3%2582%25A9%25E3%2583%25B3%25E3%2583%2588/id899997582?uo=4&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-itune-ja.webp&quot; alt=&quot;Simeji日本語入力キーボード｜顔文字・絵文字・フォント on iTunes&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.adamrocker.android.input.simeji&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-gplay-ja.webp&quot; alt=&quot;Simeji日本語入力キーボード｜顔文字・絵文字・フォント on Google Play&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、色々な方法でゲットした画像ファイルを一括管理しやすくなると思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;使ってみるか・・・アレ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Note&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;2026-04-11時点で、「re.*(Renamer)」は Google Play Store から消えました。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・・・・あらまあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今度AIに作らせるか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Mac、アプリ】画像の容量を圧縮してくれるアプリを比較してみた。</title><link>https://endorphinbath.com/posts/mac-app-squeezing-image/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mac-app-squeezing-image/</guid><description>5つの画像圧縮ツール（JPEGmini Pro、ImageOptim、Image Tools、TinyPNG、Squoosh）の性能を比べてみました。ツールの選定の一助になるかも？</description><pubDate>Fri, 16 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Googleドライブの容量が足りなああい！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・なんてこと、ありませんか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・それでは、今回は画像を最適化するツールの比較をやってみましょうか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はい！ やってしまって下さい！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;今回比較する画像圧縮ツールたち&lt;a href=&quot;#今回比較する画像圧縮ツールたち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;比較対象は以下になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;JPEGmini Pro&lt;/li&gt;
&lt;li&gt;ImageOptim&lt;/li&gt;
&lt;li&gt;Image Tools&lt;/li&gt;
&lt;li&gt;TinyPNG&lt;/li&gt;
&lt;li&gt;Squoosh&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;簡単に各ソフトの紹介をします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JPEGmini Pro&lt;a href=&quot;#jpegmini-pro&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;.jpg画像を圧縮するソフトとしては「JPEGmini」は古参なものになるかと思います。以前は、「JPEGmini」をApp Storeからダウンロードできたのですが、App Storeから無くなってしまいましたね。残念。&lt;/p&gt;&lt;p&gt;圧縮時にExif情報を保持するので、圧縮後でもGoogleフォトにアップロードしたときに撮影日時がちゃんと反映されてくれます。これがかなり助かる。&lt;/p&gt;&lt;p&gt;まだ僕は試していませんが、どうやら現在のJPEGmini Proは、動画の圧縮まで出来るようです。&lt;/p&gt;&lt;p&gt;しかし、無料版は、1度のインストールにつき200ファイルまでの制限があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1584&quot; height=&quot;1270&quot; src=&quot;/_astro/01.21Z7gsC3_Z1FvxNl.webp&quot; srcset=&quot;/_astro/01.21Z7gsC3_2r6JOD.webp 640w, /_astro/01.21Z7gsC3_2vN3Kq.webp 750w, /_astro/01.21Z7gsC3_IBsTS.webp 828w, /_astro/01.21Z7gsC3_2nBGPy.webp 1080w, /_astro/01.21Z7gsC3_1jg8Iw.webp 1280w, /_astro/01.21Z7gsC3_Z1FvxNl.webp 1584w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ImageOptim&lt;a href=&quot;#imageoptim&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;.png&lt;/code&gt;、&lt;code&gt;.jpg&lt;/code&gt;、&lt;code&gt;.bmp&lt;/code&gt;、&lt;code&gt;.tiff&lt;/code&gt;、&lt;code&gt;.heic&lt;/code&gt;の画像ファイルを圧縮できるツールです。&lt;/p&gt;&lt;p&gt;こちらはApp Storeからダウンロードできます。&lt;/p&gt;&lt;p&gt;無料版は1日20ファイルまでの制限がありますが、有料版を買うことで無制限になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1224&quot; height=&quot;1226&quot; src=&quot;/_astro/02.7Z1gcOIa_Z1q55cR.webp&quot; srcset=&quot;/_astro/02.7Z1gcOIa_PCWa2.webp 640w, /_astro/02.7Z1gcOIa_Q5DPs.webp 750w, /_astro/02.7Z1gcOIa_Qu6Vi.webp 828w, /_astro/02.7Z1gcOIa_ZGcUcA.webp 1080w, /_astro/02.7Z1gcOIa_Z1q55cR.webp 1224w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Image Tools&lt;a href=&quot;#image-tools&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;.png&lt;/code&gt;、&lt;code&gt;.jpg&lt;/code&gt;、&lt;code&gt;.bmp&lt;/code&gt;、&lt;code&gt;.tiff&lt;/code&gt;の画像ファイルを圧縮できるツールです。&lt;/p&gt;&lt;p&gt;こちらもApp Storeからダウンロード出来ます。&lt;/p&gt;&lt;p&gt;無料で枚数制限なしで、画像を圧縮出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1348&quot; height=&quot;1200&quot; src=&quot;/_astro/03.DU9XM3JW_Zu3Puj.webp&quot; srcset=&quot;/_astro/03.DU9XM3JW_th60c.webp 640w, /_astro/03.DU9XM3JW_xj037.webp 750w, /_astro/03.DU9XM3JW_Z1XMeQV.webp 828w, /_astro/03.DU9XM3JW_ZCcDDn.webp 1080w, /_astro/03.DU9XM3JW_ZsxrHM.webp 1280w, /_astro/03.DU9XM3JW_Zu3Puj.webp 1348w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;TinyPNG&lt;a href=&quot;#tinypng&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;.webp&lt;/code&gt;、&lt;code&gt;.png&lt;/code&gt;、&lt;code&gt;.jpg&lt;/code&gt;の画像ファイルを圧縮できるWebツールです。&lt;/p&gt;&lt;p&gt;1度の圧縮では20ファイルまでが上限のようです。あと、1ファイル当たりの容量の上限が5MBまでとなっています。&lt;/p&gt;&lt;p&gt;こちらもPro版（有料）で無制限になり、1ファイル当たりの上限が75MBになるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;3020&quot; height=&quot;1608&quot; src=&quot;/_astro/04.S4uIIRDk_Z1d6ETt.webp&quot; srcset=&quot;/_astro/04.S4uIIRDk_ZTCtYA.webp 640w, /_astro/04.S4uIIRDk_2wP5T8.webp 750w, /_astro/04.S4uIIRDk_Z2rMoIA.webp 828w, /_astro/04.S4uIIRDk_Z195zpj.webp 1080w, /_astro/04.S4uIIRDk_HsM6u.webp 1280w, /_astro/04.S4uIIRDk_XsSQE.webp 1668w, /_astro/04.S4uIIRDk_1fGu2M.webp 2048w, /_astro/04.S4uIIRDk_1wN17i.webp 2560w, /_astro/04.S4uIIRDk_Z1d6ETt.webp 3020w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Squoosh&lt;a href=&quot;#squoosh&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google製の画像圧縮ツールです。Web上で動きます。&lt;/p&gt;&lt;p&gt;ファイル拡張子の種類は、&lt;/p&gt;&lt;p&gt;色々と設定をいじって圧縮できるツールになっています。枚数制限はないみたい？
&lt;img loading=&quot;lazy&quot; width=&quot;3012&quot; height=&quot;1606&quot; src=&quot;/_astro/05.vZNiHtyO_21sPGP.webp&quot; srcset=&quot;/_astro/05.vZNiHtyO_Z1ClV1W.webp 640w, /_astro/05.vZNiHtyO_Z1ryRaL.webp 750w, /_astro/05.vZNiHtyO_1TFi2Y.webp 828w, /_astro/05.vZNiHtyO_ZvOV4b.webp 1080w, /_astro/05.vZNiHtyO_Z1ajmNW.webp 1280w, /_astro/05.vZNiHtyO_1AIxcM.webp 1668w, /_astro/05.vZNiHtyO_ZGcc9r.webp 2048w, /_astro/05.vZNiHtyO_Zp5F4V.webp 2560w, /_astro/05.vZNiHtyO_21sPGP.webp 3012w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;実際に、比較してみた（風景）&lt;a href=&quot;#実際に比較してみた風景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;それでは、比較していきます。&lt;/p&gt;&lt;p&gt;まずは、この風景の写真（Samusung Galaxy S10のカメラで撮影）から試してみます。オリジナルの容量は、5.9MBになります。お、重い・・・
&lt;img loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/06.DkKMcttX_ZvbpRp.webp&quot; srcset=&quot;/_astro/06.DkKMcttX_Z2qHxb4.webp 640w, /_astro/06.DkKMcttX_hmzsp.webp 750w, /_astro/06.DkKMcttX_ZTUD8Y.webp 828w, /_astro/06.DkKMcttX_Zg5ADR.webp 1080w, /_astro/06.DkKMcttX_Z17dTC5.webp 1280w, /_astro/06.DkKMcttX_ZobXkd.webp 1668w, /_astro/06.DkKMcttX_Z1mhanR.webp 2048w, /_astro/06.DkKMcttX_Zj7R6R.webp 2560w, /_astro/06.DkKMcttX_ZvbpRp.webp 4032w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JPEGmini Pro&lt;a href=&quot;#jpegmini-pro-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、JPEGmini Proからですが、アプリ画面上に画像ファイルをドラッグ&amp;amp;ドロップすればそのファイルを圧縮してくれます。簡単。
&lt;img loading=&quot;lazy&quot; width=&quot;1596&quot; height=&quot;1276&quot; src=&quot;/_astro/07.BqEEOL27_cCPhp.webp&quot; srcset=&quot;/_astro/07.BqEEOL27_ZFTkKe.webp 640w, /_astro/07.BqEEOL27_ZBd1Or.webp 750w, /_astro/07.BqEEOL27_8KudL.webp 828w, /_astro/07.BqEEOL27_1YW8ra.webp 1080w, /_astro/07.BqEEOL27_UAzk8.webp 1280w, /_astro/07.BqEEOL27_cCPhp.webp 1596w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は3.3MBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/08.CRQjWcNa_Z1fQbvi.webp&quot; srcset=&quot;/_astro/08.CRQjWcNa_ZY7RL1.webp 640w, /_astro/08.CRQjWcNa_1IWeRs.webp 750w, /_astro/08.CRQjWcNa_wE1g4.webp 828w, /_astro/08.CRQjWcNa_Z10KmhK.webp 1080w, /_astro/08.CRQjWcNa_Z1QSFfX.webp 1280w, /_astro/08.CRQjWcNa_Z18QIX6.webp 1668w, /_astro/08.CRQjWcNa_Z26VV1K.webp 2048w, /_astro/08.CRQjWcNa_Z13MCJK.webp 2560w, /_astro/08.CRQjWcNa_Z1fQbvi.webp 4032w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ImageOptim&lt;a href=&quot;#imageoptim-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらも、アプリ画面上に画像ファイルをドラッグ&amp;amp;ドロップすればそのファイルを圧縮してくれます。簡単。
&lt;img loading=&quot;lazy&quot; width=&quot;1228&quot; height=&quot;1226&quot; src=&quot;/_astro/09.CsCsVWJ0_ZfbaHc.webp&quot; srcset=&quot;/_astro/09.CsCsVWJ0_1jtOrD.webp 640w, /_astro/09.CsCsVWJ0_1jVw84.webp 750w, /_astro/09.CsCsVWJ0_Z1e8VqA.webp 828w, /_astro/09.CsCsVWJ0_Z1dkJqN.webp 1080w, /_astro/09.CsCsVWJ0_ZfbaHc.webp 1228w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は1.7MBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/10.KdRBpdKN_Z2uSST9.webp&quot; srcset=&quot;/_astro/10.KdRBpdKN_1xq2Vh.webp 640w, /_astro/10.KdRBpdKN_1F6vJG.webp 750w, /_astro/10.KdRBpdKN_25HErg.webp 828w, /_astro/10.KdRBpdKN_yqseK.webp 1080w, /_astro/10.KdRBpdKN_Z2rW4Ra.webp 1280w, /_astro/10.KdRBpdKN_Z15kmp1.webp 1668w, /_astro/10.KdRBpdKN_ZJ2BNM.webp 2048w, /_astro/10.KdRBpdKN_fK2uK.webp 2560w, /_astro/10.KdRBpdKN_Z2uSST9.webp 4032w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Image Tools&lt;a href=&quot;#image-tools-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらはアプリ画面上にドラッグ&amp;amp;ドロップした後に、どれぐらいの圧縮するかどうかを設定する必要があります。&lt;/p&gt;&lt;p&gt;今回は、「ImageOptim」の圧縮後のファイルサイズと合わせるために、29%の圧縮率で圧縮します。
&lt;img loading=&quot;lazy&quot; width=&quot;1892&quot; height=&quot;1282&quot; src=&quot;/_astro/11.8pn1oA0o_Z1Ot8by.webp&quot; srcset=&quot;/_astro/11.8pn1oA0o_Z1tWE3i.webp 640w, /_astro/11.8pn1oA0o_Z1ly3Lr.webp 750w, /_astro/11.8pn1oA0o_1W6T4O.webp 828w, /_astro/11.8pn1oA0o_Z2lFqwT.webp 1080w, /_astro/11.8pn1oA0o_2ekyai.webp 1280w, /_astro/11.8pn1oA0o_Z1Y2q2t.webp 1668w, /_astro/11.8pn1oA0o_Z1Ot8by.webp 1892w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は予定通り1.7MBになりました。仕上がりはこんな感じ。&lt;/p&gt;&lt;p&gt;ボケてしまっていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1169&quot; height=&quot;877&quot; src=&quot;/_astro/12.ByaagKhg_1VUE6q.webp&quot; srcset=&quot;/_astro/12.ByaagKhg_ZHg44Y.webp 640w, /_astro/12.ByaagKhg_ZX27t8.webp 750w, /_astro/12.ByaagKhg_ZPGsCt.webp 828w, /_astro/12.ByaagKhg_Z1GOaPt.webp 1080w, /_astro/12.ByaagKhg_1VUE6q.webp 1169w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;TinyPNG&lt;a href=&quot;#tinypng-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TinyPNG無料版の1ファイル当たりの上限のことをすっかり忘れていました・・・
今回、Pro版は検証しません。そして、最近のカメラで風景を撮影したら、大体5MBは超えますよね・・・（高性能になったもんだなあ。）&lt;/p&gt;&lt;p&gt;なので、不戦敗にします。カメラで撮った画像ファイルには向いていません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Squoosh&lt;a href=&quot;#squoosh-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらはSquooshのページを開いた状態で、圧縮したい画像ファイルをドラッグ&amp;amp;ドロップしたときの画面になります。
かなり細かく設定できるのが分かるかと思います。圧縮方式とかも選べます。&lt;/p&gt;&lt;p&gt;今回はデフォルト設定にして、サイズだけ「ImageOptim」のものと同じぐらいになるように圧縮しました。
&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1610&quot; src=&quot;/_astro/13.CnVfyIJ8_1ERSOO.webp&quot; srcset=&quot;/_astro/13.CnVfyIJ8_1OEw6o.webp 640w, /_astro/13.CnVfyIJ8_20rzWz.webp 750w, /_astro/13.CnVfyIJ8_huBmo.webp 828w, /_astro/13.CnVfyIJ8_Z4gF18.webp 1080w, /_astro/13.CnVfyIJ8_1MhGuF.webp 1280w, /_astro/13.CnVfyIJ8_1j6Yeb.webp 1668w, /_astro/13.CnVfyIJ8_2goRab.webp 2048w, /_astro/13.CnVfyIJ8_Z2wFJzf.webp 2560w, /_astro/13.CnVfyIJ8_1ERSOO.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は予定通り1.7MBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/14.Djyr92z6_Zgd5IC.webp&quot; srcset=&quot;/_astro/14.Djyr92z6_2qQX4F.webp 640w, /_astro/14.Djyr92z6_Z2vDGUQ.webp 750w, /_astro/14.Djyr92z6_Z262yeh.webp 828w, /_astro/14.Djyr92z6_Z2h4RoE.webp 1080w, /_astro/14.Djyr92z6_ZdggGD.webp 1280w, /_astro/14.Djyr92z6_19lqKv.webp 1668w, /_astro/14.Djyr92z6_1uDblJ.webp 2048w, /_astro/14.Djyr92z6_2uqPFh.webp 2560w, /_astro/14.Djyr92z6_Zgd5IC.webp 4032w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;実際に、比較してみた（スクリーンショット）&lt;a href=&quot;#実際に比較してみたスクリーンショット&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;次は、スクリーンショットした画像（.pngファイル）がどうなるかを試してみます。&lt;/p&gt;&lt;p&gt;今回、こちらの画像を使います。オリジナルサイズは、1.5MBです。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1406&quot; src=&quot;/_astro/15.KoptvnDG_Zy1wSp.webp&quot; srcset=&quot;/_astro/15.KoptvnDG_1pVRcY.webp 640w, /_astro/15.KoptvnDG_1629fA.webp 750w, /_astro/15.KoptvnDG_1cDFde.webp 828w, /_astro/15.KoptvnDG_2d0Vd7.webp 1080w, /_astro/15.KoptvnDG_ZwzqF3.webp 1280w, /_astro/15.KoptvnDG_Z26Y69N.webp 1668w, /_astro/15.KoptvnDG_jrPSL.webp 2048w, /_astro/15.KoptvnDG_Zt1y9b.webp 2560w, /_astro/15.KoptvnDG_Zy1wSp.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JPEGmini Pro&lt;a href=&quot;#jpegmini-pro-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PNG画像は圧縮できないようです・・・&lt;/p&gt;&lt;p&gt;そのため、不戦敗です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ImageOptim&lt;a href=&quot;#imageoptim-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;圧縮後は、335KBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1406&quot; src=&quot;/_astro/16.DBIzqHH6_W9fl3.webp&quot; srcset=&quot;/_astro/16.DBIzqHH6_DShUy.webp 640w, /_astro/16.DBIzqHH6_jXyXa.webp 750w, /_astro/16.DBIzqHH6_qA5UN.webp 828w, /_astro/16.DBIzqHH6_Z1m0pmm.webp 1080w, /_astro/16.DBIzqHH6_XAlyp.webp 1280w, /_astro/16.DBIzqHH6_ZANiUl.webp 1668w, /_astro/16.DBIzqHH6_1OCD8e.webp 2048w, /_astro/16.DBIzqHH6_129e5h.webp 2560w, /_astro/16.DBIzqHH6_W9fl3.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Image Tools&lt;a href=&quot;#image-tools-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ImageOptimの容量に近づけようとしましたが、刻みきれず。&lt;/p&gt;&lt;p&gt;圧縮後は、353KBになりました。仕上がりはこんな感じ。&lt;/p&gt;&lt;p&gt;ボケてしまっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1146&quot; height=&quot;534&quot; src=&quot;/_astro/17.C09wsw4P_Z13moXt.webp&quot; srcset=&quot;/_astro/17.C09wsw4P_1wxRga.webp 640w, /_astro/17.C09wsw4P_19Afgh.webp 750w, /_astro/17.C09wsw4P_Z1Tv2bb.webp 828w, /_astro/17.C09wsw4P_Zooixc.webp 1080w, /_astro/17.C09wsw4P_Z13moXt.webp 1146w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;TinyPNG&lt;a href=&quot;#tinypng-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TinyPNGで圧縮するのは、今回初めてです。&lt;/p&gt;&lt;p&gt;圧縮が成功するとパンダがバンザイをします。Dropboxに圧縮した画像を共有することも出来るようです。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1612&quot; src=&quot;/_astro/18.Bl3DRxR7_ZScfKJ.webp&quot; srcset=&quot;/_astro/18.Bl3DRxR7_Z1Vnmu6.webp 640w, /_astro/18.Bl3DRxR7_Z1KAiCU.webp 750w, /_astro/18.Bl3DRxR7_1ADQzP.webp 828w, /_astro/18.Bl3DRxR7_Z1a5IS.webp 1080w, /_astro/18.Bl3DRxR7_ZEDwtE.webp 1280w, /_astro/18.Bl3DRxR7_26onx5.webp 1668w, /_astro/18.Bl3DRxR7_ZbwlO9.webp 2048w, /_astro/18.Bl3DRxR7_5zafm.webp 2560w, /_astro/18.Bl3DRxR7_ZScfKJ.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は、335KBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1406&quot; src=&quot;/_astro/16.DBIzqHH6_W9fl3.webp&quot; srcset=&quot;/_astro/16.DBIzqHH6_DShUy.webp 640w, /_astro/16.DBIzqHH6_jXyXa.webp 750w, /_astro/16.DBIzqHH6_qA5UN.webp 828w, /_astro/16.DBIzqHH6_Z1m0pmm.webp 1080w, /_astro/16.DBIzqHH6_XAlyp.webp 1280w, /_astro/16.DBIzqHH6_ZANiUl.webp 1668w, /_astro/16.DBIzqHH6_1OCD8e.webp 2048w, /_astro/16.DBIzqHH6_129e5h.webp 2560w, /_astro/16.DBIzqHH6_W9fl3.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Squoosh&lt;a href=&quot;#squoosh-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「ImageOptim」と容量を合わせに行きます。
今回は、&lt;code&gt;Resize：50%&lt;/code&gt;と&lt;code&gt;Compress：OxiPNG&lt;/code&gt;&lt;/p&gt;&lt;p&gt;圧縮後は、393KBになりました。仕上がりはこんな感じ。&lt;/p&gt;&lt;p&gt;ほんのりボケてしまっていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;1508&quot; height=&quot;703&quot; src=&quot;/_astro/20.B3WiClFx_o5g7f.webp&quot; srcset=&quot;/_astro/20.B3WiClFx_ThcYm.webp 640w, /_astro/20.B3WiClFx_26Fnzq.webp 750w, /_astro/20.B3WiClFx_Z2wLGrY.webp 828w, /_astro/20.B3WiClFx_tUNbD.webp 1080w, /_astro/20.B3WiClFx_Z1YzJAu.webp 1280w, /_astro/20.B3WiClFx_o5g7f.webp 1508w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画質の比較&lt;a href=&quot;#画質の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕の感覚だと、画質が低い順に、
Image Tools ＜ Squoosh ＜ ImageOptim ＝ TinyPNG
という感じがします。&lt;/p&gt;&lt;p&gt;ImageOptim（左）とTinyPNG（右）を文字のレベルまで画質を比較してみましたが、どちらも同じくらいの画質に見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1448&quot; src=&quot;/_astro/21.C3GAoZW3_ZbTWv6.webp&quot; srcset=&quot;/_astro/21.C3GAoZW3_aT6DP.webp 640w, /_astro/21.C3GAoZW3_Z1jihAr.webp 750w, /_astro/21.C3GAoZW3_28t64T.webp 828w, /_astro/21.C3GAoZW3_Z18ChH0.webp 1080w, /_astro/21.C3GAoZW3_Fvror.webp 1280w, /_astro/21.C3GAoZW3_Z1cvMno.webp 1668w, /_astro/21.C3GAoZW3_1xRxJ0.webp 2048w, /_astro/21.C3GAoZW3_Z1j5DSq.webp 2560w, /_astro/21.C3GAoZW3_ZbTWv6.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;実際に、比較してみた（ロゴ）&lt;a href=&quot;#実際に比較してみたロゴ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;次は、ロゴ画像（&lt;code&gt;.png&lt;/code&gt;ファイル）がどうなるかを試してみます。&lt;/p&gt;&lt;p&gt;今回、こちらの画像を使います。オリジナル容量は、45KBです。
&lt;img loading=&quot;lazy&quot; width=&quot;1147&quot; height=&quot;1028&quot; src=&quot;/_astro/22.CLN2_eQu_26ogTD.webp&quot; srcset=&quot;/_astro/22.CLN2_eQu_1Mmk4j.webp 640w, /_astro/22.CLN2_eQu_2BqCi.webp 750w, /_astro/22.CLN2_eQu_aW1m2.webp 828w, /_astro/22.CLN2_eQu_KPLcE.webp 1080w, /_astro/22.CLN2_eQu_26ogTD.webp 1147w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;JPEGmini Pro&lt;a href=&quot;#jpegmini-pro-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PNGは圧縮できない不戦敗。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ImageOptim&lt;a href=&quot;#imageoptim-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;圧縮後は、16KBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1147&quot; height=&quot;1028&quot; src=&quot;/_astro/23.G7uY3bM__21ED8P.webp&quot; srcset=&quot;/_astro/23.G7uY3bM__Z1XUYwh.webp 640w, /_astro/23.G7uY3bM__1lvfPD.webp 750w, /_astro/23.G7uY3bM__1tPPzn.webp 828w, /_astro/23.G7uY3bM__G78qQ.webp 1080w, /_astro/23.G7uY3bM__21ED8P.webp 1147w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Image Tools&lt;a href=&quot;#image-tools-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ImageOptimと同じサイズになるように設定を揃えます。&lt;/p&gt;&lt;p&gt;圧縮後は、16KBになりました。仕上がりはこんな感じ。ボケてしまっていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;275&quot; height=&quot;247&quot; src=&quot;/_astro/24.CYJYjEys_Z2apsVp.webp&quot; srcset=&quot;/_astro/24.CYJYjEys_Z2apsVp.webp 275w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;TinyPNG&lt;a href=&quot;#tinypng-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;圧縮後は、16KBになりました。仕上がりはこんな感じ。
&lt;img loading=&quot;lazy&quot; width=&quot;1147&quot; height=&quot;1028&quot; src=&quot;/_astro/23.G7uY3bM__21ED8P.webp&quot; srcset=&quot;/_astro/23.G7uY3bM__Z1XUYwh.webp 640w, /_astro/23.G7uY3bM__1lvfPD.webp 750w, /_astro/23.G7uY3bM__1tPPzn.webp 828w, /_astro/23.G7uY3bM__G78qQ.webp 1080w, /_astro/23.G7uY3bM__21ED8P.webp 1147w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Squoosh&lt;a href=&quot;#squoosh-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;圧縮中の様子です。「ImageOptim」に圧縮率を近づけていくと、ボケていっているのが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1486&quot; src=&quot;/_astro/26.CNbpxNtK_29bgYH.webp&quot; srcset=&quot;/_astro/26.CNbpxNtK_Z1R3aWg.webp 640w, /_astro/26.CNbpxNtK_ZWtx09.webp 750w, /_astro/26.CNbpxNtK_1GPbMH.webp 828w, /_astro/26.CNbpxNtK_W50Tp.webp 1080w, /_astro/26.CNbpxNtK_1YgN2j.webp 1280w, /_astro/26.CNbpxNtK_cXNrp.webp 1668w, /_astro/26.CNbpxNtK_Bke5E.webp 2048w, /_astro/26.CNbpxNtK_Zul4FA.webp 2560w, /_astro/26.CNbpxNtK_29bgYH.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;圧縮後は、29KBになりました。仕上がりはこんな感じ。少しボケてしまっていますね。
&lt;img loading=&quot;lazy&quot; width=&quot;382&quot; height=&quot;343&quot; src=&quot;/_astro/27.D-Viwj8n_1de77D.webp&quot; srcset=&quot;/_astro/27.D-Viwj8n_1de77D.webp 382w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;画質の比較&lt;a href=&quot;#画質の比較-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕の感覚だと、画質が低い順に、
Image Tools ＜ Squoosh ＜ ImageOptim ＝ TinyPNG
という感じがします。（スクリーンショットのときと同じ。）&lt;/p&gt;&lt;p&gt;ImageOptim（左）とTinyPNG（右）で、画質を細かく比較してみましたが、どちらも同じくらいの画質に見えます。
&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1650&quot; src=&quot;/_astro/28.ts_UtorC_Z1w6sLg.webp&quot; srcset=&quot;/_astro/28.ts_UtorC_BlrjA.webp 640w, /_astro/28.ts_UtorC_1rruRj.webp 750w, /_astro/28.ts_UtorC_xp6MU.webp 828w, /_astro/28.ts_UtorC_ZpqguO.webp 1080w, /_astro/28.ts_UtorC_ZTPqv9.webp 1280w, /_astro/28.ts_UtorC_ZwmDDp.webp 1668w, /_astro/28.ts_UtorC_1KShvN.webp 2048w, /_astro/28.ts_UtorC_ZDkK5a.webp 2560w, /_astro/28.ts_UtorC_Z1w6sLg.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;風景.jpgの調査結果まとめです。&lt;/p&gt;
































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;アプリ&lt;/th&gt;&lt;th&gt;枚数上限&lt;/th&gt;&lt;th&gt;ファイルサイズ上限&lt;/th&gt;&lt;th&gt;操作の単純さ&lt;/th&gt;&lt;th&gt;機能の豊富さ&lt;/th&gt;&lt;th&gt;Exif情報の保持&lt;/th&gt;&lt;th&gt;容量の圧縮率（風景.jpg）&lt;/th&gt;&lt;th&gt;画質（風景.jpg）&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;JPEGmini Pro&lt;/td&gt;&lt;td&gt;200枚/インストール（有料版はなし）&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;あり&lt;/td&gt;&lt;td&gt;△ (3.3MB)&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ImageOptim&lt;/td&gt;&lt;td&gt;20枚/日（有料版はなし）&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;○ (1.7MB)&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Image Tools&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;○ (1.7MB)&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TinyPNG&lt;/td&gt;&lt;td&gt;20枚/日?（有料版はなし）&lt;/td&gt;&lt;td&gt;5MB（有料版は75MB）&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;あり&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Squoosh&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;○ (1.7MB)&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;スクショ.pngとロゴ.pngの調査結果まとめです。&lt;/p&gt;


























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;アプリ&lt;/th&gt;&lt;th&gt;枚数上限&lt;/th&gt;&lt;th&gt;ファイルサイズ上限&lt;/th&gt;&lt;th&gt;容量の圧縮率（スクショ.png）&lt;/th&gt;&lt;th&gt;画質（スクショ.png）&lt;/th&gt;&lt;th&gt;容量の圧縮率（ロゴ.png）&lt;/th&gt;&lt;th&gt;画質（ロゴ.png）&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;JPEGmini Pro&lt;/td&gt;&lt;td&gt;200枚/インストール（有料版はなし）&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ImageOptim&lt;/td&gt;&lt;td&gt;20枚/日（有料版はなし）&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;◎ (335KB)&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;○ (16KB)&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Image Tools&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;○ (353KB)&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;○ (16KB)&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TinyPNG&lt;/td&gt;&lt;td&gt;20枚/日?（有料版はなし）&lt;/td&gt;&lt;td&gt;5MB（有料版は75MB）&lt;/td&gt;&lt;td&gt;◎ (335KB)&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;td&gt;○ (16KB)&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Squoosh&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;なし&lt;/td&gt;&lt;td&gt;△ (393KB)&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;△ (29KB)&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;結論としては、「TinyPNG」の有料版（2800円/年：※2022/9/16時点）を利用すれば、事足りそうです。&lt;/p&gt;&lt;p&gt;しかし、「サブスクは嫌だ！」という場合は、1つに絞るのは難しそうです。併用するのが良いかと思います。&lt;/p&gt;&lt;p&gt;性能面の観点から、以下の組み合わせ方が良いかなと。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;カメラで撮った写真を圧縮する場合は、「JPEGmini Pro」を使う。&lt;/li&gt;
&lt;li&gt;ブログの画像など、制作物の素材として利用する画像を圧縮する場合は、「ImageOptim」を使う。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;使い分ける理由としては、「Exif情報を保持するかどうか」です。&lt;/p&gt;&lt;p&gt;現在、Googleフォトで写真をバックアップおよび管理しているので、画像ファイルがExif情報を保持してくれていると、管理コストが安く済みます。&lt;/p&gt;&lt;p&gt;そのため、カメラ写真の圧縮率が物足りないですが、JPEGmini ProをGoogleフォトでバックアップする写真に使用する感じですかね。
（JPEGmini Proも、8300円/買い切り：※2022/9/16時点&lt;/p&gt;&lt;p&gt;ですが・・・、TinyPNGよりはランニングコストが掛からない・・・PCを3年以上使う前提ですが。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、クラウド社会となってしまった今となっては、サブスク加入も必死なのかな・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_007.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Google Oneに入っちゃう？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Google Oneに入るのは時間の問題だね。それまで無料枠の残容量でやりくりできる間は、TinyPNGに加入するのもアリかな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_007.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;アルバムを刷本するかあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ブログの素材は変わらず、Googleドライブで管理するから根本的には解決しないんだよなあ・・・もうデジタル経済からは逃れられんなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【報告、マンガ】おれは会社をとうとう辞めたぞ～！！ジョジョ～！！</title><link>https://endorphinbath.com/posts/retire-company/</link><guid isPermaLink="true">https://endorphinbath.com/posts/retire-company/</guid><description>ジョジョ、おれはとうとう会社を辞めたぞ。辞めようと思ってから本当に長かった。今の空いた時間は凄まじいぜ。在職中に出来なかったことがあれやこれやと取り組めるんだ。まあ、少し話でも聞いてみてくれよ。</description><pubDate>Thu, 15 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よしよし・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・・・・・・たぞ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おれは会社をとうとう辞めたぞ～！！ ジョジョ～！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;辞めようと思ってからが長かった・・・&lt;a href=&quot;#辞めようと思ってからが長かった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さて、実際の最終出社となった日にちは2022年8月31日でしたが、
辞めようと思ったのは結構前からでした。2021年10月くらいには「もう良いかな。」と思っていました。&lt;/p&gt;&lt;p&gt;しかし、参画していたプロジェクトで開発していたシステムが本番に稼働してからがとても忙しく、とてもじゃないがあ、辞めづらい・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/01.BLpNr068_1MUdhR.webp&quot; srcset=&quot;/_astro/01.BLpNr068_ZxJaCy.webp 640w, /_astro/01.BLpNr068_2szn6u.webp 750w, /_astro/01.BLpNr068_20aoxE.webp 828w, /_astro/01.BLpNr068_Z2gpyOP.webp 1080w, /_astro/01.BLpNr068_1MUdhR.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、少し落ち着いてきた頃に、そのプロジェクトのメンバーが休職に入ってしまい、とてもじゃないがあ、辞めづらい・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/02.CUJ1634K_fpHbO.webp&quot; srcset=&quot;/_astro/02.CUJ1634K_Z1TPfRB.webp 640w, /_astro/02.CUJ1634K_16thQr.webp 750w, /_astro/02.CUJ1634K_D4jiB.webp 828w, /_astro/02.CUJ1634K_1gh3S3.webp 1080w, /_astro/02.CUJ1634K_fpHbO.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;特にその頃から明らかに稼働時間が増えて、場当たり的な作業に時間を取られたり・・・（開発の頃とほとんど稼働時間が変わらないじゃないか！）
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/03.7OIndV7m_Z2qxjDa.webp&quot; srcset=&quot;/_astro/03.7OIndV7m_1r0jxF.webp 640w, /_astro/03.7OIndV7m_ZBRgwd.webp 750w, /_astro/03.7OIndV7m_Z15hf53.webp 828w, /_astro/03.7OIndV7m_Z1pFWVV.webp 1080w, /_astro/03.7OIndV7m_Z2qxjDa.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;本格的に顧客への要件定義を担当したときには、「ああ、要件定義ってとんでもなくつまらないんだな。はい、僕はそう思います。」と思い、毎日の業務に嫌気が差す毎日でした。
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/04.DXEGRKbT_Z2e6dQv.webp&quot; srcset=&quot;/_astro/04.DXEGRKbT_Z1EHCMw.webp 640w, /_astro/04.DXEGRKbT_1lATVw.webp 750w, /_astro/04.DXEGRKbT_SbVnG.webp 828w, /_astro/04.DXEGRKbT_Z1deRah.webp 1080w, /_astro/04.DXEGRKbT_Z2e6dQv.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、そのメンバーが8月に帰ってくるとのことだったので、引き継げられるように8月に最終出社を迎える手筈となるように、6月に退職の旨を伝えました。
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/05.BJR8ffXv_xeDqA.webp&quot; srcset=&quot;/_astro/05.BJR8ffXv_Z1JfNac.webp 640w, /_astro/05.BJR8ffXv_1h3JyQ.webp 750w, /_astro/05.BJR8ffXv_NDL11.webp 828w, /_astro/05.BJR8ffXv_1y607O.webp 1080w, /_astro/05.BJR8ffXv_xeDqA.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;辞めようと思ってから、結局会社に伝えたのは8ヶ月後となってしまいました・・・&lt;/p&gt;&lt;p&gt;はあ、長かった長かった・・・&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;これでいい・・・！&lt;a href=&quot;#これでいい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;辞められて良かったです！&lt;/p&gt;&lt;p&gt;僕が最近まで会社に通う理由としては、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ちょっとした確認を同僚に取りやすい：1割&lt;/li&gt;
&lt;li&gt;普段家で食べないものを食べる：2割&lt;/li&gt;
&lt;li&gt;懸垂をする：7割&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;平日にこんなことがしたかった毎日でした・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/06.DDdp_DBb_Z1Ei2Bu.webp&quot; srcset=&quot;/_astro/06.DDdp_DBb_1CwG1S.webp 640w, /_astro/06.DDdp_DBb_ZqkT30.webp 750w, /_astro/06.DDdp_DBb_ZSJRAP.webp 828w, /_astro/06.DDdp_DBb_ZDqFUg.webp 1080w, /_astro/06.DDdp_DBb_Z1Ei2Bu.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;基本的に僕は朝に弱いので、
夜中、おもろいゲームにハマってしまえば、そりゃあコアタイム前に打刻なんて出来るはずがないし、
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/07.7AwHe-aN_ZMRoy7.webp&quot; srcset=&quot;/_astro/07.7AwHe-aN_FbtLq.webp 640w, /_astro/07.7AwHe-aN_Z1nG6is.webp 750w, /_astro/07.7AwHe-aN_Z1Q64Qi.webp 828w, /_astro/07.7AwHe-aN_cXW87.webp 1080w, /_astro/07.7AwHe-aN_ZMRoy7.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;特に原因がなくても寝坊して、公共交通機関の乗り継ぎをダッシュすることだってあったし、
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/08.zLxjNM-r_1tA1Dz.webp&quot; srcset=&quot;/_astro/08.zLxjNM-r_fEJvc.webp 640w, /_astro/08.zLxjNM-r_Z1NcPyG.webp 750w, /_astro/08.zLxjNM-r_Z2gBO7w.webp 828w, /_astro/08.zLxjNM-r_2urnkN.webp 1080w, /_astro/08.zLxjNM-r_1tA1Dz.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サラリーマンに向いていないんですよね・・・&lt;/p&gt;&lt;p&gt;あと、自分の寝坊助とは関係ないところとしては、サラリーマンは基本的に、量をこなすよりもミスをしない方が評価されます。
その点が自分のライフスタイルというか趣向・性質に合っていなかった・・・&lt;/p&gt;&lt;p&gt;いくら一所懸命に働いても１つミスをすれば、「ちゃんとして下さい！こっちは金払ってるんだから！」と言われるし、
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/09.tPF66d3Y_Z1KSbvR.webp&quot; srcset=&quot;/_astro/09.tPF66d3Y_1WkuuR.webp 640w, /_astro/09.tPF66d3Y_Z6x5z1.webp 750w, /_astro/09.tPF66d3Y_ZyW47Q.webp 828w, /_astro/09.tPF66d3Y_ZK1OOD.webp 1080w, /_astro/09.tPF66d3Y_Z1KSbvR.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのくせ、あちらが提示した要件が誤っていて、苦労して消化した作業が無駄になったり、
&lt;img loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;891&quot; src=&quot;/_astro/10.Cj_XdgA7_ZzinQx.webp&quot; srcset=&quot;/_astro/10.Cj_XdgA7_Z1Vt4gk.webp 640w, /_astro/10.Cj_XdgA7_14PtsI.webp 750w, /_astro/10.Cj_XdgA7_BquTS.webp 828w, /_astro/10.Cj_XdgA7_qxWOG.webp 1080w, /_astro/10.Cj_XdgA7_ZzinQx.webp 1201w&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう・・・、だから、これでいい！&lt;/p&gt;&lt;section&gt;&lt;h2&gt;これからやってみたいこと&lt;a href=&quot;#これからやってみたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;え？
さっきから貼られている絵は何なんだって？&lt;/p&gt;&lt;p&gt;一旦、僕はサラリーマン活動は終了して、個人で色々と興味あることに取り組んでみたいと思っています。
その興味あることの一つとして、イラスト活動があります。&lt;/p&gt;&lt;p&gt;さっきから貼られているイラストは、ちょうど最終出社日の100日前から毎日継続投稿していた、マンガの絵になります。
一応100話ありますので、興味がありましたら覗いてみて下さい。（pixivに飛びます。）&lt;/p&gt;&lt;a href=&quot;https://www.pixiv.net/user/67888191/series/157923&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://s.pximg.net/common/images/apple-touch-icon.png?20250206&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;pixiv&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&quot;INTPなワイは、100話で3年勤めたサラリーマンを辞める&quot;/&quot;きびさんご&quot; Series [pixiv]&lt;/div&gt;&lt;div&gt;INTPなワイは、100話で3年勤めたサラリーマンを辞める by きびさんご&lt;/div&gt;&lt;div&gt;www.pixiv.net&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://i.pximg.net/c/782x410_80_a2_g5/illust-series-cover-original/img/2022/09/16/01/02/32/0Ls8X3wUYoYpAVvzZ2pxphVY7oor9Kdf.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このマンガを始めた目的は、「絵を描くことに慣れる」ことであり、やってみなきゃ分からない精神で断行しました。&lt;/p&gt;&lt;p&gt;やってみた結果としては、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;自分はマンガを描くのはあまり好きではない。&lt;/li&gt;
&lt;li&gt;とりあえず描いていれば絵は上手くなる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ということが分かりました。&lt;/p&gt;&lt;p&gt;そして、全くバズっていませんが、何と言っても100話続けたという達成感がジワジワと身体に染みています。これからもイラストは描いていきたいと思います。
他には、ゲームのゆっくり実況、楽曲制作なども取り組んでみたいので、その制作物を公開する上でイラストは必要になると構想しています。&lt;/p&gt;&lt;p&gt;あー、色々と楽しみです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;最後には花パチもやってもらえたよ&lt;a href=&quot;#最後には花パチもやってもらえたよ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「花パチ」という言葉をご存知ですか？&lt;/p&gt;&lt;p&gt;「花を渡してパチパチ・・・」の略らしいのですが、あまり一般的なものではないらしい・・・（ドラマとかでは寿退社した人とかに対して、花束を渡してパチパチするシーンがたまにありますよね。一般的にはどう言うんだろう。）&lt;/p&gt;&lt;p&gt;僕の場合は、円満に退職できた方だと思うので、「花パチ」も円滑に進み、多分それなりに盛り上がり、やっぱり自分はサラリーマンというよりはアイデアを出す方が向いているんだなあと改めて感じました。&lt;/p&gt;&lt;p&gt;今までの在職中の経験も活かしながら、これからの活動に精を出していきたいと思います。頑張るっちゃ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ジョジョ～！！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;2000&quot; src=&quot;/_astro/11.DeYBRLWm_ZfWItX.webp&quot; srcset=&quot;/_astro/11.DeYBRLWm_ZgIBJa.webp 640w, /_astro/11.DeYBRLWm_Z1emiCD.webp 750w, /_astro/11.DeYBRLWm_Z1pK6rR.webp 828w, /_astro/11.DeYBRLWm_25iyWf.webp 1080w, /_astro/11.DeYBRLWm_ZfWItX.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Spreadsheet】まとめ：Googleスプレッドシートで使用できるショートカットキー（Mac版）</title><link>https://endorphinbath.com/posts/gss-shortcutkey-for-mac/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gss-shortcutkey-for-mac/</guid><description>MacでGoogle Chrome上でGoogle スプレッドシートを操作する際に使用できるショートカットキーをまとめました。一部キーに関しては、スプレッドシートでは反応せず他の機能を呼ぶこともあるので、その機能もまとめました。</description><pubDate>Wed, 14 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スプレッドシートの編集をもう少し速くできんかのお・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;では、今回は、ショートカットキーを紹介しましょう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;かたじけない・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試した環境&lt;a href=&quot;#試した環境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OS：macOS Monterey&lt;/li&gt;
&lt;li&gt;ブラウザ：Google Chrome&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ショートカットキー一覧&lt;a href=&quot;#ショートカットキー一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、ショートカットキー一覧になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;commandキー系&lt;a href=&quot;#commandキー系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;選択中のセルを1つ上の内容で貼り付ける&lt;/td&gt;&lt;td&gt;command + D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中のセルを1つ左の内容で貼り付ける&lt;/td&gt;&lt;td&gt;command + R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;太字にする&lt;/td&gt;&lt;td&gt;command + B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キーボードショートカットキーのチートシートをポップアップ表示する&lt;/td&gt;&lt;td&gt;command + /&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在日付を「yyyy/mm/dd」形式で入力する&lt;/td&gt;&lt;td&gt;command + ;、command + :&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから左方向にデータが続いている範囲まで移動する&lt;/td&gt;&lt;td&gt;command + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから下方向にデータが続いている範囲まで移動する&lt;/td&gt;&lt;td&gt;command + ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから上方向にデータが続いている範囲まで移動する&lt;/td&gt;&lt;td&gt;command + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから右方向にデータが続いている範囲まで移動する&lt;/td&gt;&lt;td&gt;command + →&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;command + Shiftキー系&lt;a href=&quot;#command--shiftキー系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;やり直す&lt;/td&gt;&lt;td&gt;command + Shift + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;打消し線を入れる&lt;/td&gt;&lt;td&gt;command + Shift + X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;値のみ貼り付ける&lt;/td&gt;&lt;td&gt;command + Shift + V&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シート内検索&lt;/td&gt;&lt;td&gt;command + Shift + G、command + G、command + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スプレッドシートん内検索および置換&lt;/td&gt;&lt;td&gt;command + Shift + H&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キーボードで入力中の文字が大きく表示されるようになる&lt;/td&gt;&lt;td&gt;command + Shift + K&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を左揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + L&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を中央揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + E&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を右揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在時刻を「hh:MM」表記で入力する&lt;/td&gt;&lt;td&gt;command + Shift + ;、command + Shift + :&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;行を再表示する&lt;/td&gt;&lt;td&gt;command + Shift + 9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;列を再表示する&lt;/td&gt;&lt;td&gt;command + Shift + 0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スプレッドシートのコンテキストメニューを表示する&lt;/td&gt;&lt;td&gt;command + Shift + ¥&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから左方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから下方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから上方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから右方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから全方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + Space、command + A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;command + Shiftキー系&lt;a href=&quot;#command--shiftキー系-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;やり直す&lt;/td&gt;&lt;td&gt;command + Shift + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;打消し線を入れる&lt;/td&gt;&lt;td&gt;command + Shift + X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;値のみ貼り付ける&lt;/td&gt;&lt;td&gt;command + Shift + V&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シート内検索&lt;/td&gt;&lt;td&gt;command + Shift + G、command + G、command + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スプレッドシートん内検索および置換&lt;/td&gt;&lt;td&gt;command + Shift + H&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キーボードで入力中の文字が大きく表示されるようになる&lt;/td&gt;&lt;td&gt;command + Shift + K&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を左揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + L&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を中央揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + E&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字を右揃えにする&lt;/td&gt;&lt;td&gt;command + Shift + R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在時刻を「hh:MM」表記で入力する&lt;/td&gt;&lt;td&gt;command + Shift + ;、command + Shift + :&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;行を再表示する&lt;/td&gt;&lt;td&gt;command + Shift + 9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;列を再表示する&lt;/td&gt;&lt;td&gt;command + Shift + 0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スプレッドシートのコンテキストメニューを表示する&lt;/td&gt;&lt;td&gt;command + Shift + ¥&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから左方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから下方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから上方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから右方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のセルから全方向にデータが続いている範囲まで選択する&lt;/td&gt;&lt;td&gt;command + Shift + Space、command + A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;command + Shiftキー系（スプレッドシート上では反応しない。Chrome上での反応の一覧です。）&lt;a href=&quot;#command--shiftキー系スプレッドシート上では反応しないchrome上での反応の一覧です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;












































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;デベロッパーツールを開いて要素を選択するモードになる&lt;/td&gt;&lt;td&gt;command + Shift + C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ブックマークバーを常に表示する&lt;/td&gt;&lt;td&gt;command + Shift + B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シークレットウインドウを新規で開く&lt;/td&gt;&lt;td&gt;command + Shift + N&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在Chromeにログイン中のGoogleアカウントのポップアップを開く&lt;/td&gt;&lt;td&gt;command + Shift + M&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在開いているすべてのタブをブックマークに追加する&lt;/td&gt;&lt;td&gt;command + Shift + D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;全画面表示でツールバーを常に表示する&lt;/td&gt;&lt;td&gt;command + Shift + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chromeでのダウンロード履歴を表示する&lt;/td&gt;&lt;td&gt;command + Shift + J&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のタブの左のタブに遷移する&lt;/td&gt;&lt;td&gt;command + Shift + [&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在のタブの右のタブに遷移する&lt;/td&gt;&lt;td&gt;command + Shift + ]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）現在macOSにログインしているユーザーをログアウトする&lt;/td&gt;&lt;td&gt;command + Shift + Q&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;現在開いているChromeのウインドウを閉じる&lt;/td&gt;&lt;td&gt;command + Shift + W&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最近閉じたタブを1つ復活させる&lt;/td&gt;&lt;td&gt;command + Shift + T&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;リンクをメールで送信する&lt;/td&gt;&lt;td&gt;command + Shift + I&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）現在macOSでアクティブなアプリのウインドウを切り替える&lt;/td&gt;&lt;td&gt;command + Shift + @&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）画面全体をスクリーンショット&lt;/td&gt;&lt;td&gt;command + Shift + 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）画面を一部選んでスクリーンショット&lt;/td&gt;&lt;td&gt;command + Shift + 4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）画面を一部選んでスクリーン録画&lt;/td&gt;&lt;td&gt;command + Shift + 5&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;fnキー系&lt;a href=&quot;#fnキー系&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;左端のセルに移動&lt;/td&gt;&lt;td&gt;fn + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;右端のセルに移動&lt;/td&gt;&lt;td&gt;fn + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;先頭のセルに移動&lt;/td&gt;&lt;td&gt;fn + command + ←&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;末端のセルに移動&lt;/td&gt;&lt;td&gt;fn + command + →&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シートを上にページ送り&lt;/td&gt;&lt;td&gt;fn + ↑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シートを下にページ送り&lt;/td&gt;&lt;td&gt;fn + ↓&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;fnキー系（スプレッドシート上では反応しない。Chrome上での反応の一覧です。）&lt;a href=&quot;#fnキー系スプレッドシート上では反応しないchrome上での反応の一覧です&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）各々の機能を使用&lt;/td&gt;&lt;td&gt;fn + F1〜F12&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）メモアプリを開く&lt;/td&gt;&lt;td&gt;fn + Q&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）絵文字入力ツールを開く&lt;/td&gt;&lt;td&gt;fn + E&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）Dockにフォーカスする&lt;/td&gt;&lt;td&gt;fn + A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）音声入力を有効にする&lt;/td&gt;&lt;td&gt;fn + D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フルスクリーンのONとOFF&lt;/td&gt;&lt;td&gt;fn + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）デスクトップの表示のONとOFF&lt;/td&gt;&lt;td&gt;fn + H&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）コントロールセンターを開く&lt;/td&gt;&lt;td&gt;fn + C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;（macOSの操作）カレンダーと時計のウィジェットを開く&lt;/td&gt;&lt;td&gt;fn + N&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上になりました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;日頃使って覚えますよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他にも色々とショートカットキーはあるので、「command + /」と下記をご参考までに。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://support.google.com/docs/answer/181110?hl=ja&amp;amp;co=GENIE.Platform%3DDesktop&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.google.com/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;support.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google スプレッドシートのキーボード ショートカット - パソコン - Google ドキュメント エディタ ヘルプ&lt;/div&gt;&lt;div&gt;Google スプレッドシートのキーボード ショートカットを使用して、スプレッドシート内を移動したり、書式を設定したり、数式を使用したりできます。 注: 言語やキーボードの形式によっては、一部のショートカットを使用できない場合があります。 Google スプレッドシートでキーボード ショートカットのリストを表示するには、Ctrl&lt;/div&gt;&lt;div&gt;support.google.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん</title><link>https://endorphinbath.com/posts/gas-management-of-id-frequently-used/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-management-of-id-frequently-used/</guid><description>Google Apps Scriptで記述したフォルダやファイルのIDを一括管理するためのアイデアを掲載します。これで、どのフォルダとファイルがスクリプトで使用されているかどうかを管理できます。</description><pubDate>Tue, 13 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作業にGoogle Apps Scriptを使うことが多いのだが、そのスクリプトで書いたGoogleスプレッドシートやGoogleドライブのIDがどのファイルのことを書いたか忘れちゃうんだよなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お困りですか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うむ、フォルダIDとかファイルIDを一括で管理できれば良いんだけど・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そんな時は、自分がGoogle Apps Scriptで使うファイルIDとかフォルダIDを管理するライブラリを作ればいいじゃん。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GASで書いたファイルIDとかフォルダIDが点在していませんか？&lt;a href=&quot;#gasで書いたファイルidとかフォルダidが点在していませんか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Google Apps Scriptでは、例えば以下のようなメソッドや関数を使う時に、ファイルIDやフォルダIDを記述すると思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Google Drive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Google Docs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DocumentApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;openById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Google Spreadsheet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;openById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Google Slides&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;slide&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SlidesApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;openById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ID&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;コードの中にIDを直書きしてしまうと、後々見返した時に、どこのスクリプトにIDを記述されているのかが追えなくなるという事態が、僕の中で問題の1つとしてありました。&lt;/p&gt;&lt;p&gt;この状態だと、例えば、その記述されているフォルダやファイルを消してしまった時に、そのスクリプトが気づかぬ間に動かなくなってしまう危険性があります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そこで、IDを一括管理するためのライブラリを作った&lt;a href=&quot;#そこでidを一括管理するためのライブラリを作った&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、初期段階として、1つライブラリを作りました。&lt;/p&gt;&lt;p&gt;以下、そのライブラリを「ID一括管理ライブラリ」と呼びます。
どんなものかと言うと、僕は普段スクリプトを書く時に、そのスクリプトに使うIDとかの定数をスクリプトの特定のファイルに一括で管理しています。&lt;/p&gt;&lt;p&gt;そこの定数の宣言時にID一括管理ライブラリ内の関数を読み込ませます。
&lt;img loading=&quot;lazy&quot; width=&quot;1968&quot; height=&quot;520&quot; src=&quot;/_astro/01.CTEutjC0_aC8NH.webp&quot; srcset=&quot;/_astro/01.CTEutjC0_1vPXEr.webp 640w, /_astro/01.CTEutjC0_CJrsf.webp 750w, /_astro/01.CTEutjC0_Z1xsQTM.webp 828w, /_astro/01.CTEutjC0_Z1d8uKV.webp 1080w, /_astro/01.CTEutjC0_Z2wCuV9.webp 1280w, /_astro/01.CTEutjC0_Z20bk6G.webp 1668w, /_astro/01.CTEutjC0_aC8NH.webp 1968w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、読み込まれる方のID一括管理ライブラリでは、各々のスクリプトで使用するフォルダやファイルのIDを関数の返り値として記述します。
こうすることで、ファイルIDやフォルダIDの定数を保持しているのは、ID一括管理ライブラリのみとなります。
&lt;img loading=&quot;lazy&quot; width=&quot;1768&quot; height=&quot;1302&quot; src=&quot;/_astro/02.DhLp58LC_2fpctu.webp&quot; srcset=&quot;/_astro/02.DhLp58LC_2gDPzq.webp 640w, /_astro/02.DhLp58LC_2ncibf.webp 750w, /_astro/02.DhLp58LC_Z6LD6C.webp 828w, /_astro/02.DhLp58LC_alWL9.webp 1080w, /_astro/02.DhLp58LC_1knKBj.webp 1280w, /_astro/02.DhLp58LC_Z1Mbw6p.webp 1668w, /_astro/02.DhLp58LC_2fpctu.webp 1768w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このライブラリには、Google Workspace利用するフォルダIDとファイルIDだけではなく、スクリプト内でリクエストしたいURLを書くのもアリですし、OAuth tokenを記述するのもアリかと思います。&lt;/p&gt;&lt;p&gt;まあ、OAuth tokenとかを書くのであれば、そのライブラリは間違いなくPrivateにするべきですが・・・。まあ、基本的にこの「ID一括管理ライブラリ」は自分だけ閲覧できる状態にするべきだと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ライブラリを読ませる方法&lt;a href=&quot;#ライブラリを読ませる方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さて、この「ID一括管理ライブラリ」を利用する方法です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;「ID一括管理ライブラリ」のスクリプトIDをコピーする&lt;a href=&quot;#id一括管理ライブラリのスクリプトidをコピーする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、スクリプトIDをコピーします。
スクリプトエディターの画面の左側の歯車をクリックすると、スクリプトの設定画面になります。&lt;/p&gt;&lt;p&gt;その画面で、「ID一括管理ライブラリ」のスクリプトIDが表示されますので、「コピー」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2102&quot; height=&quot;1388&quot; src=&quot;/_astro/03.CwpY73oz_ZjobrB.webp&quot; srcset=&quot;/_astro/03.CwpY73oz_1dfs8J.webp 640w, /_astro/03.CwpY73oz_Ztbn7x.webp 750w, /_astro/03.CwpY73oz_Zoh8Oc.webp 828w, /_astro/03.CwpY73oz_Z1jJtVo.webp 1080w, /_astro/03.CwpY73oz_OkdL1.webp 1280w, /_astro/03.CwpY73oz_Z2rxlzJ.webp 1668w, /_astro/03.CwpY73oz_ZqCasM.webp 2048w, /_astro/03.CwpY73oz_ZjobrB.webp 2102w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「ID一括管理ライブラリ」を読み込ませるスクリプトにインポートする&lt;a href=&quot;#id一括管理ライブラリを読み込ませるスクリプトにインポートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「ID一括管理ライブラリ」を読み込ませられるように設定します。&lt;/p&gt;&lt;p&gt;スクリプトエディタ上の「ライブラリ」一覧の「＋」ボタンをクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1048&quot; height=&quot;1096&quot; src=&quot;/_astro/04.DIXxT7op_Z5o4oV.webp&quot; srcset=&quot;/_astro/04.DIXxT7op_ZohJbt.webp 640w, /_astro/04.DIXxT7op_Zpy6cv.webp 750w, /_astro/04.DIXxT7op_26hp5C.webp 828w, /_astro/04.DIXxT7op_Z5o4oV.webp 1048w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、インポートするスクリプトIDを入力するポップアップが表示されますので、先程コピーした「ID一括管理ライブラリ」のスクリプトIDを貼り付けます。&lt;/p&gt;&lt;p&gt;そうすると、「ID一括管理ライブラリ」を読み込めます。今回は、自分だけが利用するライブラリになりますので、「HEAD（開発モード）」を選択して「追加」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1020&quot; height=&quot;972&quot; src=&quot;/_astro/05.9DK1x0As_Z2pyJAL.webp&quot; srcset=&quot;/_astro/05.9DK1x0As_Z4Mxdp.webp 640w, /_astro/05.9DK1x0As_DhUaB.webp 750w, /_astro/05.9DK1x0As_1PfSDK.webp 828w, /_astro/05.9DK1x0As_Z2pyJAL.webp 1020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、スクリプトに「ID一括管理ライブラリ」を導入することが出来ました！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、「HEAD（開発モード）」を利用するので、Google Cloud Platform（GCP）プロジェクトの設定を行う必要はないかと思います。&lt;/p&gt;&lt;p&gt;おそらく、Google Apps Scriptのホーム画面にある、この「Google Apps Script API」もオフのままでいけるのではないでしょうか。（ちょっと自信ないです。インポートできなかったらオンにしてみて下さい。）
&lt;img loading=&quot;lazy&quot; width=&quot;1828&quot; height=&quot;412&quot; src=&quot;/_astro/06.B33sjrhG_2cynQQ.webp&quot; srcset=&quot;/_astro/06.B33sjrhG_Z1KU4T4.webp 640w, /_astro/06.B33sjrhG_1wbD3J.webp 750w, /_astro/06.B33sjrhG_Z1rEnGo.webp 828w, /_astro/06.B33sjrhG_13V3ho.webp 1080w, /_astro/06.B33sjrhG_ttMag.webp 1280w, /_astro/06.B33sjrhG_Z1snLzo.webp 1668w, /_astro/06.B33sjrhG_2cynQQ.webp 1828w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;これからの構想&lt;a href=&quot;#これからの構想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これで、Googleドライブにあるフォルダ/ファイルのIDを一括管理することが出来ました。&lt;/p&gt;&lt;p&gt;そして、次の段階としては、Googleドライブ上のフォルダ/ファイルを削除しようと思った時に、
このライブラリのスクリプトファイルの中身を読み取って、自分が作成したスクリプトにそのIDが使用されていないかどうかをチェックするツールを作れれば良いかなと思っています。&lt;/p&gt;&lt;p&gt;これで行けそうな気がしますね。まあ、今度取り組んでみたいと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ID&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、GASライブラリ上でやってみましたが、他にDBとかで管理する手もあるかと思います。やりやすい方法で一括管理してみましょう。おそらく、スクリプトの手直しや管理がしやすくなるはず。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一目で見渡せる。って良いよね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>DaVinci Resolve 18でゆっくり動画っぽいものをPythonで効率的に作ろうとしたけど断念した話</title><link>https://endorphinbath.com/posts/davinciresolve-yukkuri-giveup/</link><guid isPermaLink="true">https://endorphinbath.com/posts/davinciresolve-yukkuri-giveup/</guid><description>DaVinci Resolve 18で、音声と字幕を自動で配置するPythonスクリプトを作ろうとしたのですが、試行錯誤の末に断念したという体験談になります。まだ試したことがない方は時間を無駄にしないように一読いただければと思います。</description><pubDate>Mon, 12 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぬぬ〜・・・悔しい〜・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうしたんだい？ 悔しいのかい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、さっき試していたDaVinci Resolve編集の効率化ツールが、役に立たなそうなことが分かって、開発を断念したのだよ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この悔しさを記事にぶつけるぜえ〜・・・！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;効率化のツールの概要&lt;a href=&quot;#効率化のツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ゆっくり動画のテンプレを作ります。&lt;/p&gt;&lt;p&gt;テンプレの構成は以下の感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;左下と右下にキャラクターの画像を配置して、&lt;/li&gt;
&lt;li&gt;キャラクターの音声を再生すると同時に、&lt;/li&gt;
&lt;li&gt;キャラクターの画像および字幕を切り替えます。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1842&quot; src=&quot;/_astro/01.JKhfeaTO_Z2wIg37.webp&quot; srcset=&quot;/_astro/01.JKhfeaTO_Z21qChw.webp 640w, /_astro/01.JKhfeaTO_Z1QaSkD.webp 750w, /_astro/01.JKhfeaTO_Z1L0u59.webp 828w, /_astro/01.JKhfeaTO_ZuRKE1.webp 1080w, /_astro/01.JKhfeaTO_Z2qofCJ.webp 1280w, /_astro/01.JKhfeaTO_Z16TCbw.webp 1668w, /_astro/01.JKhfeaTO_Z29XHCT.webp 2048w, /_astro/01.JKhfeaTO_1wIWsk.webp 2560w, /_astro/01.JKhfeaTO_Z2wIg37.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このテンプレで、1.は制作者がそのフレームの状況を鑑みて画像を選択すれば良いのですが、&lt;/p&gt;&lt;p&gt;2.と3.に関しては、どこでその音声を流して、字幕を表示させるかどうかは一意に決まっています。&lt;/p&gt;&lt;p&gt;そのため、2.で音声ファイル（.wavファイル）を設置する処理を、&lt;/p&gt;&lt;p&gt;3.でテキストを自動で設置してその内容を自動入力する試みを、今回行いました。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1374&quot; src=&quot;/_astro/02.BqAFpROs_Z2dA5AF.webp&quot; srcset=&quot;/_astro/02.BqAFpROs_ZA5HU2.webp 640w, /_astro/02.BqAFpROs_ZpiE3Q.webp 750w, /_astro/02.BqAFpROs_Z28fCE2.webp 828w, /_astro/02.BqAFpROs_n22v1.webp 1080w, /_astro/02.BqAFpROs_oBSv7.webp 1280w, /_astro/02.BqAFpROs_2qtYvc.webp 1668w, /_astro/02.BqAFpROs_NCwSP.webp 2048w, /_astro/02.BqAFpROs_Z2dA5AF.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試したこと&lt;a href=&quot;#試したこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、自動化を試みた環境は以下のとおりです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;DaVinci Resolve 18（DaVinci Resolve Studio 18 ではない。）&lt;/li&gt;
&lt;li&gt;macOS Monterey&lt;/li&gt;
&lt;li&gt;Python3&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;DaVinci ResolveでのPythonの実行方法&lt;a href=&quot;#davinci-resolveでのpythonの実行方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、DaVinci Resolve Studio 18ではないので、外部ファイルからのResolve向けのスクリプトの実行ができません。そのため、DaVinci Resolve画面上のConsoleからPythonを実行します。
&lt;img loading=&quot;lazy&quot; width=&quot;1014&quot; height=&quot;1260&quot; src=&quot;/_astro/03.DSArh-D__Z2ldKbH.webp&quot; srcset=&quot;/_astro/03.DSArh-D__Z20pmMh.webp 640w, /_astro/03.DSArh-D__ZfVOwX.webp 750w, /_astro/03.DSArh-D__Z1OQoxn.webp 828w, /_astro/03.DSArh-D__Z2ldKbH.webp 1014w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ConsoleからPy3を選んだときに「Python not found」的なメッセージが出たら、Python3を&lt;a href=&quot;https://www.python.org/downloads/&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;からインストールします。（僕は既にanacondaが入っているときにその「Python not found」的なメッセージ食らったのですが、Resolveがどの環境変数を読み取っているのかよく分からなかったので、渋々新しくPythonをインストールしました。）
&lt;img loading=&quot;lazy&quot; width=&quot;1290&quot; height=&quot;1014&quot; src=&quot;/_astro/04.DRmPpfnC_1cmWjd.webp&quot; srcset=&quot;/_astro/04.DRmPpfnC_1VER99.webp 640w, /_astro/04.DRmPpfnC_Z2lDmlW.webp 750w, /_astro/04.DRmPpfnC_Z2iIlHd.webp 828w, /_astro/04.DRmPpfnC_Z1X8RJN.webp 1080w, /_astro/04.DRmPpfnC_Zoez2G.webp 1280w, /_astro/04.DRmPpfnC_1cmWjd.webp 1290w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Python3がResolve上で使えるようになったら早速スクリプトを組んでいきます。&lt;/p&gt;&lt;p&gt;参考にした資料は、以下になります。&lt;/p&gt;&lt;a href=&quot;https://resolvedevdoc.readthedocs.io/en/latest/API_basic.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resolvedevdoc.readthedocs.io&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Basic Resolve API — ResolveDevDoc 0.1 documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;resolvedevdoc.readthedocs.io&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;音声メディアをインポートする。&lt;a href=&quot;#音声メディアをインポートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、2.のwavファイルをタイムラインに配置する自動化を試しました。&lt;/p&gt;&lt;p&gt;Console上では、&lt;code&gt;resolve = GetResolve()&lt;/code&gt;は記述する必要はなく、既に&lt;code&gt;resolve&lt;/code&gt;はクラスとして使える状態になっています。&lt;/p&gt;&lt;p&gt;そして、以下のような記述をして、1つのフォルダに格納されている音声メディア達をメディアプールに入れます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;project_manager &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; resolve.&lt;/span&gt;&lt;span&gt;GetProjectManager&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;current_project &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; project_manager.&lt;/span&gt;&lt;span&gt;GetCurrentProject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;voice_path&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/Users/hogehoge/Downloads/20220912_ghostoftsushima_02/voices&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;media_storage&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; resolve.&lt;/span&gt;&lt;span&gt;GetMediaStorage&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;clips_added&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; media_storage.&lt;/span&gt;&lt;span&gt;AddItemListToMediaPool&lt;/span&gt;&lt;span&gt;(voice_path)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、そのメディアプールに入れた音声メディアをタイムライン上にマーカーで印を付けたところにインポート出来ないかどうかを試しました。&lt;/p&gt;&lt;p&gt;すると、マーカーの取得自体は可能で、返り値のdict型オブジェクトのキーが、frame値になっているので、そのframeをタイムコードに変換してあげれば、音声ファイルの配置箇所の指定は可能そうです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;current_timeline &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; current_project.&lt;/span&gt;&lt;span&gt;GetCurrentTimeline&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;markers &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; current_timeline.&lt;/span&gt;&lt;span&gt;GetMarkers&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;次に、音声メディアを指定した場所に配置することが出来るかどうかを試してみました。&lt;/p&gt;&lt;p&gt;結論から言うと、この部分が出来なさそうでした・・・
以下のようなスクリプトを実行してみましたが、なぜか音声メディアを既にタイムライン上にある最後のメディアの直後に置いてしまうようで、これだとあまり効率化にはなりません・・・&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_VALUE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;time_unit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(time_unit) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;time_unit must be str.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FRAME_OF_SEC&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FRAME_OF_MINUTE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_OF_SEC&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;FRAME_OF_HOUR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_OF_MINUTE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; time_unit &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;sec&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_OF_SEC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; time_unit &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;minute&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_OF_MINUTE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; time_unit &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;hour&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return_value &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_OF_HOUR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;time_unit must be &apos;sec&apos;, &apos;minute&apos; or &apos;hour&apos;.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; return_value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timecode_to_frame&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;timecode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start_frame&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;COLON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(timecode) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;timecode must be str.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(start_frame) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;start_frame must be int.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COLON&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; timecode:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;timecode must contain colon.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; timecode.&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;COLON&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(time_list) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;timecode must be &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;hour : minute : second : frame&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frame &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sum&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(time_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_VALUE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;hour&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(time_list[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_VALUE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;minute&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(time_list[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FRAME_VALUE&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;sec&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(time_list[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frame &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; frame &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; start_frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(clips_added), &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_duration &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; clips_added[i].&lt;/span&gt;&lt;span&gt;GetClipProperty&lt;/span&gt;&lt;span&gt;()[&lt;/span&gt;&lt;span&gt;&quot;Duration&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;current_timeline.&lt;/span&gt;&lt;span&gt;SetCurrentTimecode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;01:18:29:13&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;current_timeline.&lt;/span&gt;&lt;span&gt;SetCurrentTimecode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;01:18:33:13&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start_frame &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_frame &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; start_frame &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;timecode_to_frame&lt;/span&gt;&lt;span&gt;(tmp_duration)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;print_log&lt;/span&gt;&lt;span&gt;(tmp_duration)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;print_log&lt;/span&gt;&lt;span&gt;(end_frame)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;media_pool.&lt;/span&gt;&lt;span&gt;AppendToTimeline&lt;/span&gt;&lt;span&gt;([{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;mediaPoolItem&quot;&lt;/span&gt;&lt;span&gt;: clips_added[i]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;startFrame&quot;&lt;/span&gt;&lt;span&gt;: start_frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;endFrame&quot;&lt;/span&gt;&lt;span&gt;: end_frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;AppendToTimeline()&lt;/code&gt;関数は、引数に開始フレーム位置および開始タイムコードを取りません。&lt;/p&gt;&lt;p&gt;Wiki上では、&lt;code&gt;&quot;startFrame&quot;&lt;/code&gt;と記述がありますが、これは「メディア内の」開始フレーム位置なので、タイムライン上の開始フレーム位置を指定することは、この関数上では出来ません。&lt;/p&gt;&lt;p&gt;そのため、&lt;code&gt;SetCurrentTimecode()&lt;/code&gt;関数で開始タイムコードが指定できるのかと思い試しましたが、どうやら違うようです。（右下の方に音声メディアが配置できるかなあ？）
&lt;img loading=&quot;lazy&quot; width=&quot;2980&quot; height=&quot;1692&quot; src=&quot;/_astro/05.Bk2pHsMM_Z1KL97s.webp&quot; srcset=&quot;/_astro/05.Bk2pHsMM_Z2aR2IS.webp 640w, /_astro/05.Bk2pHsMM_Z20l8OQ.webp 750w, /_astro/05.Bk2pHsMM_1kj2F1.webp 828w, /_astro/05.Bk2pHsMM_ZGVtKe.webp 1080w, /_astro/05.Bk2pHsMM_Z1BQ2B9.webp 1280w, /_astro/05.Bk2pHsMM_1PlofU.webp 1668w, /_astro/05.Bk2pHsMM_Z1AokLG.webp 2048w, /_astro/05.Bk2pHsMM_1JGrQ9.webp 2560w, /_astro/05.Bk2pHsMM_Z1KL97s.webp 2980w&quot; /&gt;&lt;/p&gt;&lt;p&gt;既にタイムライン上にある最後のメディアの直後に置いてしまっています・・・失敗・・・（右下ではなく、その左の方に置かれてしまっている。）
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1770&quot; src=&quot;/_astro/06.CpR8OUng_Z1viVpl.webp&quot; srcset=&quot;/_astro/06.CpR8OUng_NRiQ2.webp 640w, /_astro/06.CpR8OUng_Z1xKT8G.webp 750w, /_astro/06.CpR8OUng_1LKcnB.webp 828w, /_astro/06.CpR8OUng_ZiXw5B.webp 1080w, /_astro/06.CpR8OUng_1d3c3g.webp 1280w, /_astro/06.CpR8OUng_Z1lqTJC.webp 1668w, /_astro/06.CpR8OUng_Z2tsql1.webp 2048w, /_astro/06.CpR8OUng_2qaKHn.webp 2560w, /_astro/06.CpR8OUng_Z1viVpl.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上を試して、他にタイムライン上に音声メディアを指定した位置に配置する術が他に見つからず、断念しました・・・&lt;/p&gt;&lt;p&gt;（&lt;code&gt;ImportIntoTimeline()&lt;/code&gt;という関数もあるのですが、この関数はどうやらAAF拡張子のファイルのみが対象になるようで、wavファイルを使って実行したところ、何も配置されませんでした。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テキストをタイムラインに配置する。&lt;a href=&quot;#テキストをタイムラインに配置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3.のテキストの配置の自動化ですが、こちらは試しませんでした！&lt;/p&gt;&lt;p&gt;2.が出来ないと分かった時点で、効率化の美味みが半分くらい消失していましたし、テキストも音声メディアと同じ理由で配置する場所を指定できるかどうかが疑わしかったため、調査も行っていません。&lt;/p&gt;&lt;p&gt;テキストのプロパティを変える手段としては、以下のような記述になるかと思います。
SetProperty()で編集できるプロパティは、&lt;a href=&quot;https://resolvedevdoc.readthedocs.io/en/latest/API_timeline_items.html&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;に載っていたので試してみたい方はご参考までに。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;timeline_items &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; current_timeline.&lt;/span&gt;&lt;span&gt;GetItemListInTrack&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;video&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;timeline_items[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;SetProperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ZoomX&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2.0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くっそ〜、DaVinciだから簡単に動くと思ったんだがな〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、そういうこともあるよねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】1つのファイル内における関数の依存関係をMermaidの書式で出力する</title><link>https://endorphinbath.com/posts/python-mermaid-print-dependencies/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-mermaid-print-dependencies/</guid><description>1つのファイル内のクラス図の依存関係を描画するために、MarkdownのMermaid書式で出力するPythonスクリプトを作りました。</description><pubDate>Sun, 11 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、出来たぜえ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、何か作ったんかい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、昨日作ったスクリプトの関数の依存関係を示すクラス図を作りたかったんだが、その時短になるスクリプトが出来たんだぜ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの概要&lt;a href=&quot;#スクリプトの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こういうツールを作ったら便利なんじゃないかと思って、あったらあったで便利だったという話です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;何をするのか&lt;a href=&quot;#何をするのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ざっくり言うと、ソースの中を読み取って、どの関数がどの関数を参照しているかどうかをクラスダイアグラムとして、出力してくれます。&lt;/p&gt;&lt;p&gt;スクリプトを実行すると、ターミナル上にMermaidの文が出力されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;============ depends list on Markdown: start ============&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Mermaidの中身&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;============ depends list on Markdown: end ============&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Mermaidの中身は例えばこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;classDiagram&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSpreadsheet &amp;lt;|-- getSheet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheet &amp;lt;|-- getSheet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheet &amp;lt;|-- getIssuesFromGss&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isPostedIssue &amp;lt;|-- getIssuesFromGss&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesByRecords &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesByRecords &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesByRecords &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesByRecords &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesNotExist &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesNotExist &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesNotExist &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesNotExist &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFolderByDates &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFolderByDates &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFolderByDates &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFolderByDates &amp;lt;|-- makeFoldersYetExist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getIssuesFromGss &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getIssuesFromGss &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getIssuesFromGss &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getIssuesFromGss &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- getPartsOfIssues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfIssues &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfIssues &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfIssues &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfIssues &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeFoldersYetExist &amp;lt;|-- makeFoldersIntoDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- getFolderMovingInfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- getFolderMovingInfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersForYoutube &amp;lt;|-- moveFoldersForYoutube&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDatesAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderMovingInfo &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersForYoutube &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersForYoutube &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersForYoutube &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersForYoutube &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- moveFoldersAlreadyPosted&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfIssues &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getPartsOfRecords &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;moveFoldersAlreadyPosted &amp;lt;|-- manageFoldersInDrive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getSpreadsheet{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getSheet{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class isPostedIssue{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getIssuesFromGss{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getPartsOfRecords{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getDatesByRecords{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getDatesNotExist{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class makeFolderByDates{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class makeFoldersYetExist{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getPartsOfIssues{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class makeFoldersIntoDrive{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getDatesAlreadyPosted{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class getFolderMovingInfo{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class moveFoldersForYoutube{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class moveFoldersAlreadyPosted{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;class manageFoldersInDrive{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力されたMermaidをREADME.mdに記述して、GitHubで表示するとこんな感じになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2500&quot; height=&quot;792&quot; src=&quot;/_astro/01.BBklDMvV_Z1znc4v.webp&quot; srcset=&quot;/_astro/01.BBklDMvV_15Vn8G.webp 640w, /_astro/01.BBklDMvV_1PRYcJ.webp 750w, /_astro/01.BBklDMvV_Z1n294G.webp 828w, /_astro/01.BBklDMvV_Z1JclAC.webp 1080w, /_astro/01.BBklDMvV_1YntpU.webp 1280w, /_astro/01.BBklDMvV_2tb1HT.webp 1668w, /_astro/01.BBklDMvV_28G9gz.webp 2048w, /_astro/01.BBklDMvV_Z1znc4v.webp 2500w&quot; /&gt;&lt;/p&gt;&lt;p&gt;一旦上記のスクリプトを作ってクラス図にすることで、久しぶりにスクリプトを直すときに参照関係が一目で分かるようになったので、直すのが楽になりました。
&lt;img loading=&quot;lazy&quot; width=&quot;848&quot; height=&quot;865&quot; src=&quot;/_astro/02.B7NmOo-k_1nY75V.webp&quot; srcset=&quot;/_astro/02.B7NmOo-k_ZqkQLv.webp 640w, /_astro/02.B7NmOo-k_Z2aBmy5.webp 750w, /_astro/02.B7NmOo-k_2sSQot.webp 828w, /_astro/02.B7NmOo-k_1nY75V.webp 848w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何をやっているのか&lt;a href=&quot;#何をやっているのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;処理の流れは以下の流れになっています:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ファイルから関数を取得する。（Pythonだと&lt;code&gt;&apos;def &apos;&lt;/code&gt;、JavaScriptだと&lt;code&gt;&apos;function &apos;&lt;/code&gt;を目印にして取得する。）&lt;/li&gt;
&lt;li&gt;その関数の中から、ファイルの中の関数がないかどうかを探す。&lt;/li&gt;
&lt;li&gt;依存関係を保持した辞書型オブジェクトを出力する。（ex. &lt;code&gt;{ &apos;参照元&apos;: [&apos;参照先A&apos;, &apos;参照先B&apos;, ...] }&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;辞書型オブジェクトからMermaid表記に出力する。（ex. &lt;code&gt;参照先 &amp;lt;|-- 参照元&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;最も煩雑だったところは、2〜3の部分でした。
いつから参照元の関数を切り替えるか、関数の記述ではないところを判断する部分はどこになるかなどを少し長めに考えました。&lt;/p&gt;&lt;p&gt;宣言部分は関数を探さないことにしたら、コードが綺麗になりました。（予約語&lt;code&gt;&apos;continue&apos;&lt;/code&gt;はすごい便利ですよね。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトで悩ましいところ&lt;a href=&quot;#スクリプトで悩ましいところ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ひとまずの目的は満たせたので良かったのですが、このスクリプトにおいて、以下の点が悩ましい・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;コメントや文字列の中にある関数名も拾ってきてしまう。&lt;/li&gt;
&lt;li&gt;自分の関数も取ってきてしまう。&lt;/li&gt;
&lt;li&gt;関数の中で複数回呼び出される場合、その回数分だけ参照関係を出力する。&lt;/li&gt;
&lt;li&gt;他のファイルとの参照関係は取れない。&lt;/li&gt;
&lt;li&gt;モックやフィクスチャが入っていた場合を対応していない。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;コメントや文字列の中にある関数名も拾ってきてしまう。&lt;a href=&quot;#コメントや文字列の中にある関数名も拾ってきてしまう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;処理として、&lt;code&gt;hogehoge(fuga)&lt;/code&gt;みたいに関数内で使用されている場合は、参照先として捕捉して良いのですが、下記のように記述されていたり、ロングテキストによるコメントの中などで関数名を使用されていた場合は、その関数を無視していいかどうかが一概には言えません。例えば、目印として関数名を記述しておきたいので参照しているとみなしたいこともあるかと思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;hogehoge&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fuga&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ロングテキストによるコメントによると、改行されていると前後の行のクォーテーションを読まなければならなくなるので、実装するのがかなり大変になります・・・&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自分の関数も取ってきてしまう。&lt;a href=&quot;#自分の関数も取ってきてしまう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これに関しても一概には言えず、ログ取得の際に自分の関数名を取得する意図があるかもしれませんし、再帰関数である可能性もあります。
そのため、自分を参照している場合は参照先から外すということも考えましたが、やめておきました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;関数の中で複数回呼び出される場合、その回数分だけ参照関係を出力する。&lt;a href=&quot;#関数の中で複数回呼び出される場合その回数分だけ参照関係を出力する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;概要で出力したクラス図をご覧の通り、いくつかの関数から同じ関数に向けて複数本の矢印が伸びているのが確認できるかと思います。
この場合に、矢印の本数を1本にするようにした方が良いのかどうか悩みましたが、矢印の本数を複数本見せることで修正箇所が何箇所あるかどうかも確認できるようになっているので、そのまま、複数本の矢印を描画する状態にしておきました。&lt;/p&gt;&lt;p&gt;これは、先程挙げた「コメントや文字列の中にある関数名も拾ってきてしまう。」の点とも絡むところになります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;他のファイルとの参照関係は取れない。&lt;a href=&quot;#他のファイルとの参照関係は取れない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;あくまで、今回のスクリプトの実装範囲としては、「1つの」ファイル内の参照関係なので、他のファイルからインポートした関数の参照関係は描画できません。
出来たら更に便利なんですけどね・・・&lt;/p&gt;&lt;p&gt;しかし、実装にとても手間がかかりますね。コードの静的解析ツールを作るのってなかなか骨が折れるということが今回分かりました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;モックやフィクスチャが入っていた場合を対応していない。&lt;a href=&quot;#モックやフィクスチャが入っていた場合を対応していない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;主にテストコードが記述されているファイルに使用した場合、モックやフィクスチャが沢山入っていると思うので、そこに対応していないんですよね・・・&lt;/p&gt;&lt;p&gt;参照元の関数を切り替えたら、その宣言部分の行の前後を見ることになるのかな。実装が険しいですねえ・・・&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ある程度だけでも可視化されていれば役立つなという話でした。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほほう&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年8月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202208/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202208/</guid><description>2022年8月に読んだ本になります。今月は働く系のジャンルのものが多かったですね。</description><pubDate>Wed, 07 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;8月の読書メーター&lt;a href=&quot;#8月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：3&lt;/li&gt;
&lt;li&gt;読んだページ数：957&lt;/li&gt;
&lt;li&gt;ナイス数：4&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;アマゾンの最強の働き方──Working Backwards の 感想&lt;a href=&quot;#アマゾンの最強の働き方working-backwards-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;アマゾンの最強の働き方──Working Backwards&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.CjeVpoCg_Z6TWIi.webp&quot; srcset=&quot;/_astro/01.CjeVpoCg_Z6TWIi.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;個人的に「超長期視点」が印象に残りました。現在働いている職場には「長期視点」すら薄いので・・・。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：08月20日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B3%E3%83%AA%E3%83%B3%E3%83%BB%E3%83%96%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%BC%2C%E3%83%93%E3%83%AB%E3%83%BB%E3%82%AB%E3%83%BC&quot; target=&quot;_blank&quot;&gt;コリン・ブライアー,ビル・カー&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;AI分析でわかった トップ5%社員の習慣 の 感想&lt;a href=&quot;#ai分析でわかった-トップ5社員の習慣-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;AI分析でわかった トップ5%社員の習慣&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/02.1vMpmdkm_Zguzgr.webp&quot; srcset=&quot;/_astro/02.1vMpmdkm_Zguzgr.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;1人ランチ辞めます・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：08月06日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E8%B6%8A%E5%B7%9D+%E6%85%8E%E5%8F%B8&quot; target=&quot;_blank&quot;&gt;越川 慎司&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;0秒で動け　「わかってはいるけど動けない」人のための の 感想&lt;a href=&quot;#0秒で動けわかってはいるけど動けない人のための-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;0秒で動け　「わかってはいるけど動けない」人のための&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/03.Pfu8U5ti_220slD.webp&quot; srcset=&quot;/_astro/03.Pfu8U5ti_220slD.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;社会で行動していくために、ロジカルシンキングなども大事ですが、感情面の配慮や根回しも必要なんですねえ。自分を動かすときは論理的に、他人を動かすときは感情的に。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：08月02日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E4%BC%8A%E8%97%A4+%E7%BE%8A%E4%B8%80&quot; target=&quot;_blank&quot;&gt;伊藤 羊一&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、3冊か。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年7月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202207/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202207/</guid><description>2022年7月に読んだ本になります。今月はボリューミーな本が多かったです。</description><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7月の読書メーター&lt;a href=&quot;#7月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：3&lt;/li&gt;
&lt;li&gt;読んだページ数：1467&lt;/li&gt;
&lt;li&gt;ナイス数：3&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;世界の「頭のいい人」がやっていることを1冊にまとめてみた の 感想&lt;a href=&quot;#世界の頭のいい人がやっていることを1冊にまとめてみた-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;世界の「頭のいい人」がやっていることを1冊にまとめてみた&quot; loading=&quot;lazy&quot; width=&quot;49&quot; height=&quot;75&quot; src=&quot;/_astro/01.DGpI2rMa_Z25FjMB.webp&quot; srcset=&quot;/_astro/01.DGpI2rMa_Z25FjMB.webp 49w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;さらっと読めます。自分の思考を改善する参考になればよいかと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：07月26日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E4%B8%AD%E9%87%8E+%E4%BF%A1%E5%AD%90&quot; target=&quot;_blank&quot;&gt;中野 信子&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;最高の脳で働く方法　Your Brain at Work の 感想&lt;a href=&quot;#最高の脳で働く方法your-brain-at-work-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;最高の脳で働く方法　Your Brain at Work&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/02.BtVs_jqh_1IccBO.webp&quot; srcset=&quot;/_astro/02.BtVs_jqh_1IccBO.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;脳を予測マシンだと考える視点が興味深かったです。人間の視界として認識したものは、視覚から得た情報を元に脳が修正されているという考え方です。以前に、今日のスマホはレンズによって得た情報を、AIチップによって修正して画面に表示している記事を見ました。その記事にも驚きましたが、人間の脳もそのような動きになっている考え方が、科学技術の中では一般的ということなのですかね。なるほど、人によって色覚に差が生まれたりしますが、それは視覚だけでなく脳によっても行われているということですか。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：07月22日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%87%E3%82%A4%E3%83%93%E3%83%83%E3%83%89%E3%83%BB%E3%83%AD%E3%83%83%E3%82%AF&quot; target=&quot;_blank&quot;&gt;デイビッド・ロック&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「死」とは何か　イェール大学で23年連続の人気講義　完全翻訳版 の 感想&lt;a href=&quot;#死とは何かイェール大学で23年連続の人気講義完全翻訳版-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;「死」とは何か　イェール大学で23年連続の人気講義　完全翻訳版&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/03.f7jmwMA0_2tRbL5.webp&quot; srcset=&quot;/_astro/03.f7jmwMA0_2tRbL5.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;哲学的な本で、ハマる人にはハマるかもです。死について考えてもしょうがないと思ってしまう僕からすると、あまり楽しめない内容でした。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：07月01日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B7%E3%82%A7%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%B1%E3%83%BC%E3%82%AC%E3%83%B3&quot; target=&quot;_blank&quot;&gt;シェリー・ケーガン&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、3冊か。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年6月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202206/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202206/</guid><description>2022年6月に読んだ本になります。今月は働き方の本が多めで、活かせそうなことは試していきたいと思います。</description><pubDate>Mon, 18 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;6月の読書メーター&lt;a href=&quot;#6月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：7&lt;/li&gt;
&lt;li&gt;読んだページ数：1599&lt;/li&gt;
&lt;li&gt;ナイス数：2&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;世界一やさしい 株の教科書 1年生 の 感想&lt;a href=&quot;#世界一やさしい-株の教科書-1年生-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;世界一やさしい 株の教科書 1年生&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.BytJessj_2vGBfH.webp&quot; srcset=&quot;/_astro/01.BytJessj_2vGBfH.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;株による資産運用に使う指標だったりツールだったりが分かりやすく解説されています。とりあえずこれを読んだら、後は自分で株の銘柄を選んで買って売って、株の知識と経験を積み上げて行くだけだと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月22日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B8%E3%83%A7%E3%83%B3%EF%BD%A5%E3%82%B7%E3%83%A5%E3%82%A6%E3%82%AE%E3%83%A7%E3%82%A6&quot; target=&quot;_blank&quot;&gt;ジョン･シュウギョウ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;描くだけで毎日がハッピーになる　ふだん使いのマインドマップ の 感想&lt;a href=&quot;#描くだけで毎日がハッピーになるふだん使いのマインドマップ-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;描くだけで毎日がハッピーになる　ふだん使いのマインドマップ&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/02.CpLfHDjr_2bWXVv.webp&quot; srcset=&quot;/_astro/02.CpLfHDjr_2bWXVv.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;思考を可視化するためのツールとしてマインドマップは有用。色々サンプルが掲載されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E7%9F%A2%E5%B3%B6+%E7%BE%8E%E7%94%B1%E5%B8%8C&quot; target=&quot;_blank&quot;&gt;矢島 美由希&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;実践！　ふだん使いのマインドマップ の 感想&lt;a href=&quot;#実践ふだん使いのマインドマップ-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;実践！　ふだん使いのマインドマップ&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/03.CBiz-u7o_Z2f0JIk.webp&quot; srcset=&quot;/_astro/03.CBiz-u7o_Z2f0JIk.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;一口にマインドマップと言っても個性が出るんですね。本書には様々なマインドマップの書き方の参考例が紹介されていました。画一化されず個性的なものになるフォーマットであるため、個人的には少し見難い図式だなと感じましたが、いつか使う機会が来るまで頭の片隅に置いておこうと思います。自分の思考を整理する目的だったらイケてるかも。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E7%9F%A2%E5%B3%B6+%E7%BE%8E%E7%94%B1%E5%B8%8C&quot; target=&quot;_blank&quot;&gt;矢島 美由希&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方 の 感想&lt;a href=&quot;#ユニコーン企業のひみつ-spotifyで学んだソフトウェアづくりと働き方-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/04.BSBY-aWk_Z1tQQN0.webp&quot; srcset=&quot;/_astro/04.BSBY-aWk_Z1tQQN0.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;SI業界に勤めている身として、ユニコーン企業は働き方が根本的に違いますね。業務の進め方として、プロジェクトで考えず、スクワッド、トライブ、チャプター、ギルドを作って取り組むそう。他にも、管理者権限の申請が不要で、変にアクセス制御を設けず、社員の裁量が広い。あとは、テスト自動化やCIを取り入れて、定型作業の自動化がされ、生産性が高い。自社開発だと文化も醸成しやすいですね。…これらをすぐに取り入れるのは難しいと思うので、まずはヤンテの掟を心掛けるところから、働き方改革を始めてハッピーに働けるようにしたい。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月11日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=Jonathan+Rasmusson&quot; target=&quot;_blank&quot;&gt;Jonathan Rasmusson&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アフターデジタル　オフラインのない時代に生き残る の 感想&lt;a href=&quot;#アフターデジタルオフラインのない時代に生き残る-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;アフターデジタル　オフラインのない時代に生き残る&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/05.C9VWWSxm_Z1prWl0.webp&quot; srcset=&quot;/_astro/05.C9VWWSxm_Z1prWl0.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;オンライン社会になったことで、プロダクトだけでなく、体験をデザインすることが可能になったわけですね。それによって、経済の回転はますます速くなっていくのだと感じました。&lt;/p&gt;&lt;p&gt;主に、中国のサービスが取り上げられており、Hema、DiDiやPing Anなど、面白い話ばかりでした。OMOになっていくんですね、産業構造の考え方は。&lt;/p&gt;&lt;p&gt;しかし、日本はまだ体験のデザインをするためのプラットフォームを作る技術力に乏しいため、中国などのサービスに対して、2、3周くらい周回遅れしているように思えます・・・&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E8%97%A4%E4%BA%95+%E4%BF%9D%E6%96%87%2C%E5%B0%BE%E5%8E%9F+%E5%92%8C%E5%95%93&quot; target=&quot;_blank&quot;&gt;藤井 保文,尾原 和啓&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;教養（インテリ）悪口本 の 感想&lt;a href=&quot;#教養インテリ悪口本-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;教養（インテリ）悪口本&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/06.Dmw4sKdk_ZfVhid.webp&quot; srcset=&quot;/_astro/06.Dmw4sKdk_ZfVhid.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;本書で紹介されている悪口が日常生活で使えるものなのかどうかはさておき、小説や歴史に関する教養が分かりやすくまとめられているため、教養は間違いなく身に付くと思います。&lt;/p&gt;&lt;p&gt;また、各々の悪口の章に、以前に登場した悪口が使われていることもあるため、記憶に定着しやすい構成にもなっています。&lt;/p&gt;&lt;p&gt;論理療法で論駁されないようなスタンスで読んで楽しめれば良いかと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月04日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E5%A0%80%E5%85%83+%E8%A6%8B&quot; target=&quot;_blank&quot;&gt;堀元 見&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Team Geek ―Googleのギークたちはいかにしてチームを作るのか の 感想&lt;a href=&quot;#team-geek-googleのギークたちはいかにしてチームを作るのか-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Team Geek ―Googleのギークたちはいかにしてチームを作るのか&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/07.DIKZ6Qva_2inQ54.webp&quot; srcset=&quot;/_astro/07.DIKZ6Qva_2inQ54.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;チームビルディングの考え方が載っています。&lt;/p&gt;&lt;p&gt;コミュニティでプロダクトを作る際に、参考になると思います。&lt;/p&gt;&lt;p&gt;最も印象的だったのは、「有害な人に対処する」の章で、(Apache?) Subversionに関するIRCが引用されている部分でした。エゴではなくチームのための振る舞いが行えている典型例でした。短期的には手間を惜しむより、長期的な利益を優先させるべきだと再認識しました。&lt;/p&gt;&lt;p&gt;後半には、プロダクトに対する考え方も少し載っています。Less is More.&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：06月03日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=Brian+W.+Fitzpatrick%2CBen+Collins-Sussman&quot; target=&quot;_blank&quot;&gt;Brian W. Fitzpatrick,Ben Collins-Sussman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、7冊か。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年5月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202205/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202205/</guid><description>2022年5月に読んだ本になります。今月は哲学や仏教の本を読んで、より図太くなれた気がします。</description><pubDate>Wed, 01 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;5月の読書メーター&lt;a href=&quot;#5月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：6&lt;/li&gt;
&lt;li&gt;読んだページ数：1588&lt;/li&gt;
&lt;li&gt;ナイス数：3&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;Visual Studio Code完全入門　Webクリエイター&amp;amp;エンジニアの作業がはかどる新世代エディターの操り方&lt;a href=&quot;#visual-studio-code完全入門webクリエイターエンジニアの作業がはかどる新世代エディターの操り方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Visual Studio Code完全入門　Webクリエイター&amp;amp;#x26;エンジニアの作業がはかどる新世代エディターの操り方&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.BLY6aRDj_1fV8rO.webp&quot; srcset=&quot;/_astro/01.BLY6aRDj_1fV8rO.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月19日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%AA%E3%83%96%E3%83%AD%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9&quot; target=&quot;_blank&quot;&gt;リブロワークス&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;パッと書けてすぐに売れる稼ぐ人の「超速」文章術 の 感想&lt;a href=&quot;#パッと書けてすぐに売れる稼ぐ人の超速文章術-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;パッと書けてすぐに売れる稼ぐ人の「超速」文章術&quot; loading=&quot;lazy&quot; width=&quot;58&quot; height=&quot;75&quot; src=&quot;/_astro/02.GIUH614u_ZPAri8.webp&quot; srcset=&quot;/_astro/02.GIUH614u_ZPAri8.webp 58w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;個人的に感情と時間のグラフが最もなるほどと思いました。「感情の変化の波を作る文章を書くこと。」を心掛けたいと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月19日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E4%B8%AD%E9%87%8E%E5%B7%A7&quot; target=&quot;_blank&quot;&gt;中野巧&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;傷つきやすい人のための　図太くなれる禅思考 の 感想&lt;a href=&quot;#傷つきやすい人のための図太くなれる禅思考-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;傷つきやすい人のための　図太くなれる禅思考&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/03.i6u0-Du4_npVmJ.webp&quot; srcset=&quot;/_astro/03.i6u0-Du4_npVmJ.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;ボーっと読書したい時に読む本。&lt;/p&gt;&lt;p&gt;考え方が如何にも仏教って感じです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E6%9E%A1%E9%87%8E%E4%BF%8A%E6%98%8E&quot; target=&quot;_blank&quot;&gt;枡野俊明&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2050年の世界 英『エコノミスト』誌は予測する の 感想&lt;a href=&quot;#2050年の世界-英エコノミスト誌は予測する-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;2050年の世界 英『エコノミスト』誌は予測する&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/04.Wx9GgPbD_ZVcu8q.webp&quot; srcset=&quot;/_astro/04.Wx9GgPbD_ZVcu8q.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;同じ質のモノの価値は下がり続けるので、本来ならば10年前に比べて生活に必要なお金は減って生活が楽になるはずなのですが、相変わらず人々は心身の限界まで働き続けるのですよね・・・。不思議だなあと思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E8%8B%B1%E3%80%8E%E3%82%A8%E3%82%B3%E3%83%8E%E3%83%9F%E3%82%B9%E3%83%88%E3%80%8F%E7%B7%A8%E9%9B%86%E9%83%A8&quot; target=&quot;_blank&quot;&gt;英『エコノミスト』編集部&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2050年の世界　英『エコノミスト』誌は予測する (文春文庫)&lt;a href=&quot;#2050年の世界英エコノミスト誌は予測する-文春文庫&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;2050年の世界　英『エコノミスト』誌は予測する (文春文庫)&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/05.B8koB8Dq_Z1hlYNP.webp&quot; srcset=&quot;/_astro/05.B8koB8Dq_Z1hlYNP.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E8%8B%B1%E3%80%8E%E3%82%A8%E3%82%B3%E3%83%8E%E3%83%9F%E3%82%B9%E3%83%88%E3%80%8F%E7%B7%A8%E9%9B%86%E9%83%A8&quot; target=&quot;_blank&quot;&gt;英『エコノミスト』編集部&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践&lt;a href=&quot;#体系的に学ぶ-安全なwebアプリケーションの作り方-第2版-脆弱性が生まれる原理と対策の実践&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践&quot; loading=&quot;lazy&quot; width=&quot;59&quot; height=&quot;75&quot; src=&quot;/_astro/06.DIlalsy0_Z2mIxJb.webp&quot; srcset=&quot;/_astro/06.DIlalsy0_Z2mIxJb.webp 59w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：05月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E5%BE%B3%E4%B8%B8+%E6%B5%A9&quot; target=&quot;_blank&quot;&gt;徳丸 浩&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、6・・・5冊か。（あれ？もっと読んだはずなんだけど、読書メーターで集計されてない・・・）&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Google Apps Scriptで書いたコードをGiitHubで公開するための段取り</title><link>https://endorphinbath.com/posts/gas-setup-to-publish-github/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-setup-to-publish-github/</guid><description>Google Apps Scriptを、Gitで管理して公開するための方法を紹介します。PublicリポジトリでTokenやIDを公開せずにソースとして管理できる方法になっています。</description><pubDate>Sat, 14 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Google Apps Scriptって、Gitで簡単に管理して公開できないのかなあ？ 毎回編集してGitHubに貼り付けるのもメンドイしなあ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお〜、じゃあ、GitHubを使って簡単に公開できる方法を紹介するかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;YO・RO・SHI・KU！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前提&lt;a href=&quot;#前提&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、今回紹介する方法の前提になります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Google Apps Scriptのエディタを使う。&lt;/li&gt;
&lt;li&gt;Google Chromeの拡張機能を使う。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順1：GitHubにpushできる拡張機能を入れる&lt;a href=&quot;#手順1githubにpushできる拡張機能を入れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Google Apps ScriptのエディタからソースをGitHubにpushできる拡張機能をインストールします。&lt;/p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/google-apps-script-github/lfjcgcmkmjjlieihflfhjopckgpelofo&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_48px.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;chromewebstore.google.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google Apps Script GitHub アシスタント - Chrome ウェブストア&lt;/div&gt;&lt;div&gt;GitHub/GitHub Enterprise/Bitbucket/GitLabでGASのインラインコードを管理&lt;/div&gt;&lt;div&gt;chromewebstore.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://lh3.googleusercontent.com/JQyTyCU3aXSfpzGXEYZDelP5ybdWSGiUk9ji6YW512-z3rHuyqaLizFmvf82tfGK3yNNtNmEagNnestoBypiYfWg=s128-rj-sc0x00ffffff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、Chromeにインストールするとオプションから、Google Apps Script GitHub アシスタントにGitHubアカウントでログインします。
&lt;img loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;280&quot; src=&quot;/_astro/01.Dz2lYXp6_Z2owemR.webp&quot; srcset=&quot;/_astro/01.Dz2lYXp6_1SUYrk.webp 640w, /_astro/01.Dz2lYXp6_Ztd7dT.webp 750w, /_astro/01.Dz2lYXp6_Zn4XUH.webp 828w, /_astro/01.Dz2lYXp6_Z2owemR.webp 994w&quot; /&gt;&lt;/p&gt;&lt;p&gt;usernameと、GitHubのAccess Tokenを入力する必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1122&quot; height=&quot;1052&quot; src=&quot;/_astro/03.BmQo2cHy_46biO.webp&quot; srcset=&quot;/_astro/03.BmQo2cHy_12zMWV.webp 640w, /_astro/03.BmQo2cHy_14SDjo.webp 750w, /_astro/03.BmQo2cHy_1MJQJq.webp 828w, /_astro/03.BmQo2cHy_NKfVg.webp 1080w, /_astro/03.BmQo2cHy_46biO.webp 1122w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ログインするために、GitHubでPersonal Access Tokenを発行します。&lt;/p&gt;&lt;p&gt;repoとgistにチェックを付けるを忘れないように気を付けます。
&lt;img loading=&quot;lazy&quot; width=&quot;2992&quot; height=&quot;1378&quot; src=&quot;/_astro/02.BpmPsdU8_1ePql9.webp&quot; srcset=&quot;/_astro/02.BpmPsdU8_Z1WeVPe.webp 640w, /_astro/02.BpmPsdU8_Z1JsEkr.webp 750w, /_astro/02.BpmPsdU8_ZTYm4I.webp 828w, /_astro/02.BpmPsdU8_Z2iVN57.webp 1080w, /_astro/02.BpmPsdU8_Z1NBf9v.webp 1280w, /_astro/02.BpmPsdU8_Z11P8hv.webp 1668w, /_astro/02.BpmPsdU8_QHOhh.webp 2048w, /_astro/02.BpmPsdU8_Z1WyPkk.webp 2560w, /_astro/02.BpmPsdU8_1ePql9.webp 2992w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、ユーザーネームと発行したAccess Tokenを入力して、ログインします。成功すると、こんな画面が表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;770&quot; src=&quot;/_astro/04.DT32xczn_2a2kMD.webp&quot; srcset=&quot;/_astro/04.DT32xczn_2ju6mj.webp 640w, /_astro/04.DT32xczn_1qvE8G.webp 750w, /_astro/04.DT32xczn_ZsGgii.webp 828w, /_astro/04.DT32xczn_2a2kMD.webp 942w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Please make sure you have enabled Script API」と書いてあるので、Google Apps Script APIを利用できるようにします。&lt;/p&gt;&lt;p&gt;自分のGASのトップページから、設定メニューからGoogle Apps Script APIをオンにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1828&quot; height=&quot;1198&quot; src=&quot;/_astro/05.DhgJ_vDt_27IUUv.webp&quot; srcset=&quot;/_astro/05.DhgJ_vDt_Zf4LTt.webp 640w, /_astro/05.DhgJ_vDt_Z1WXvU4.webp 750w, /_astro/05.DhgJ_vDt_E5Oh2.webp 828w, /_astro/05.DhgJ_vDt_1BTukL.webp 1080w, /_astro/05.DhgJ_vDt_1fVoLB.webp 1280w, /_astro/05.DhgJ_vDt_2aj4p0.webp 1668w, /_astro/05.DhgJ_vDt_27IUUv.webp 1828w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これらの設定をすると、Google Apps ScriptのエディタからGitHub Assistantの拡張機能が利用できるようになります。&lt;/p&gt;&lt;p&gt;この画面から、リポジトリを新規作成できたり、既存のリポジトリとブランチを選んで、pullおよびpushできるようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2668&quot; height=&quot;418&quot; src=&quot;/_astro/06.B8jATQRO_2kplaY.webp&quot; srcset=&quot;/_astro/06.B8jATQRO_ZVwT86.webp 640w, /_astro/06.B8jATQRO_Z1TwHQO.webp 750w, /_astro/06.B8jATQRO_Z1reJ4g.webp 828w, /_astro/06.B8jATQRO_ZsH3Mi.webp 1080w, /_astro/06.B8jATQRO_Z1Jplrs.webp 1280w, /_astro/06.B8jATQRO_2c3tVG.webp 1668w, /_astro/06.B8jATQRO_Zt8OAs.webp 2048w, /_astro/06.B8jATQRO_1jij3H.webp 2560w, /_astro/06.B8jATQRO_2kplaY.webp 2668w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順2：TokenやID管理用のGASライブラリを作る&lt;a href=&quot;#手順2tokenやid管理用のgasライブラリを作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Gitリポジトリを公開する場合、TokenやIDをコードに載せるわけにはいきません。しかし、GASソースを実行する際には、TokenとかIDをソースに貼る必要がありますし、それをGitの監視外にするのも何か微妙です・・・。&lt;/p&gt;&lt;p&gt;そこで、以下の流れで、GASのソースをGitHubリポジトリで管理します。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;TokenやIDだけを別のGASライブラリで作って、そのリポジトリも手順1の方法でPrivateリポジトリにプッシュする。&lt;/li&gt;
&lt;li&gt;そして、Publicリポジトリで公開しているGASライブラリで、1のGASライブラリのTokenやIDを参照する。&lt;/li&gt;
&lt;li&gt;TokenやIDはハードコードでGitに載らず、1のGASライブラリを参照しているソースが公開される。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;こうすることで、Publicリポジトリで公開しているGASライブラリではTokenやIDがGitに載らず、そのGASライブラリを参照している形でソースが公開されます。&lt;/p&gt;&lt;p&gt;例えば僕は、1.のGASライブラリ（Privateリポジトリで管理する方）でただTokenやIDを返すだけの関数を作ります。
&lt;img loading=&quot;lazy&quot; width=&quot;1286&quot; height=&quot;462&quot; src=&quot;/_astro/07.nlQAOPMh_ZuNg0R.webp&quot; srcset=&quot;/_astro/07.nlQAOPMh_1ldSon.webp 640w, /_astro/07.nlQAOPMh_ZbUuT2.webp 750w, /_astro/07.nlQAOPMh_ZCJuIY.webp 828w, /_astro/07.nlQAOPMh_SPK1j.webp 1080w, /_astro/07.nlQAOPMh_Zv4Abq.webp 1280w, /_astro/07.nlQAOPMh_ZuNg0R.webp 1286w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Folder ID of blog draft files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BMS_DRAFT_FOLDER_ID&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、Publicリポジトリで公開するGASソースでは、先程作った関数を取得するようにします。&lt;/p&gt;&lt;p&gt;このライブラリのところから、「＋」ボタンをクリックして、1.のGASライブラリ（Privateリポジトリで管理する方）のスクリプトIDを入力して、参照できるようにします。&lt;/p&gt;&lt;p&gt;この時点だと、まだParserのライブラリしか参照していません。
&lt;img loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;176&quot; src=&quot;/_astro/08.D5pTRwj8_A137O.webp&quot; srcset=&quot;/_astro/08.D5pTRwj8_A137O.webp 484w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、先程作ったGASライブラリの名前が「TokenManager」だったら、TokenManagerからTokenやIDを返す関数を読み取ります。これで別のライブラリにあるTokenやIDを定数として利用できます。
&lt;img loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;268&quot; src=&quot;/_astro/09.BQ4KcwkH_1xHBNg.webp&quot; srcset=&quot;/_astro/09.BQ4KcwkH_Z1MBTy.webp 640w, /_astro/09.BQ4KcwkH_2wmVpv.webp 750w, /_astro/09.BQ4KcwkH_2tCAT4.webp 828w, /_astro/09.BQ4KcwkH_1xHBNg.webp 976w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DRAFT_FOLDER_ID&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TokenManager&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;BMS_DRAFT_FOLDER_ID&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順3：Git履歴からTokenがあった記録を消す&lt;a href=&quot;#手順3git履歴からtokenがあった記録を消す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;手順2をやる前に、既にTokenやIDをGitに上げた事がある場合は、以下のどちらかの方法でを消しましょう。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;新しくリポジトリを作り直す。&lt;/li&gt;
&lt;li&gt;Git historyからTokenやIDがあったファイルを消す。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;この章では、GIt historyからTokenやIDがあったファイルを消す方法を紹介します。&lt;/p&gt;&lt;p&gt;まず、GitHubからコミット履歴の中にTokenやIDが、直打ちされていないかどうかを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;1792&quot; height=&quot;684&quot; src=&quot;/_astro/10.DRKwxJl4_zmRRr.webp&quot; srcset=&quot;/_astro/10.DRKwxJl4_1w8Oik.webp 640w, /_astro/10.DRKwxJl4_1rYOeX.webp 750w, /_astro/10.DRKwxJl4_2nP2ne.webp 828w, /_astro/10.DRKwxJl4_Z1VAdyi.webp 1080w, /_astro/10.DRKwxJl4_Z5ehEd.webp 1280w, /_astro/10.DRKwxJl4_ZorUHw.webp 1668w, /_astro/10.DRKwxJl4_zmRRr.webp 1792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直打ちされているのを発見しました・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2394&quot; height=&quot;344&quot; src=&quot;/_astro/11._LwBcOyD_ciSrV.webp&quot; srcset=&quot;/_astro/11._LwBcOyD_Z1hp5rn.webp 640w, /_astro/11._LwBcOyD_iyD8f.webp 750w, /_astro/11._LwBcOyD_Z1QbLut.webp 828w, /_astro/11._LwBcOyD_25coxJ.webp 1080w, /_astro/11._LwBcOyD_ZYSpTf.webp 1280w, /_astro/11._LwBcOyD_Zin2Qb.webp 1668w, /_astro/11._LwBcOyD_Z2eEHjO.webp 2048w, /_astro/11._LwBcOyD_ciSrV.webp 2394w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この直打ちされているファイルを一旦、Git historyから消します。&lt;/p&gt;&lt;p&gt;今回は、VSCodeでリポジトリをcloneして、Git historyを消したいと思います。&lt;/p&gt;&lt;p&gt;Cloneした状態で、ターミナルから以下のコマンドでGitのログを確認します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--all&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name-status&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--pretty=short&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--graph&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると、先程TokenやIDが載っていたファイルがあることを確認できます。（qでログの表示を終了。）
&lt;img loading=&quot;lazy&quot; width=&quot;1834&quot; height=&quot;602&quot; src=&quot;/_astro/12.BtCFFe1W_1eh7VW.webp&quot; srcset=&quot;/_astro/12.BtCFFe1W_1AqBRw.webp 640w, /_astro/12.BtCFFe1W_1LlIls.webp 750w, /_astro/12.BtCFFe1W_2tzIGJ.webp 828w, /_astro/12.BtCFFe1W_Z1uOxce.webp 1080w, /_astro/12.BtCFFe1W_2cio50.webp 1280w, /_astro/12.BtCFFe1W_Z2ourmF.webp 1668w, /_astro/12.BtCFFe1W_1eh7VW.webp 1834w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、以下のコマンドでGit historyを消します。今回は、「constants.gs」というファイルを消したいのでこうなります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filter-branch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--tree-filter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;rm -f constants.gs&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HEAD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;今回のリポジトリで3箇所あったcommit履歴が消えたことを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;1582&quot; height=&quot;392&quot; src=&quot;/_astro/13.uDBMA5nT_Z1AA1ap.webp&quot; srcset=&quot;/_astro/13.uDBMA5nT_Z1zbaOn.webp 640w, /_astro/13.uDBMA5nT_Z1jeGPl.webp 750w, /_astro/13.uDBMA5nT_Z2lp129.webp 828w, /_astro/13.uDBMA5nT_ZCAqGy.webp 1080w, /_astro/13.uDBMA5nT_Z1VOgTC.webp 1280w, /_astro/13.uDBMA5nT_Z1AA1ap.webp 1582w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回の変更をpushします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--all&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--force&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;pushしたことで、リモートリポジトリにも反映されたことを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;1132&quot; height=&quot;284&quot; src=&quot;/_astro/14.Dw342RZf_J02Jq.webp&quot; srcset=&quot;/_astro/14.Dw342RZf_1iWG8I.webp 640w, /_astro/14.Dw342RZf_Z1CaISD.webp 750w, /_astro/14.Dw342RZf_1POA8n.webp 828w, /_astro/14.Dw342RZf_Z6D5t9.webp 1080w, /_astro/14.Dw342RZf_J02Jq.webp 1132w&quot; /&gt;&lt;/p&gt;&lt;p&gt;念の為、GitHubで先程TokenやIDがあったファイルが消えていることを確認します。なくなっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2696&quot; height=&quot;726&quot; src=&quot;/_astro/15.IBmSk6Nt_14j6UP.webp&quot; srcset=&quot;/_astro/15.IBmSk6Nt_1jBJPG.webp 640w, /_astro/15.IBmSk6Nt_2nbVcO.webp 750w, /_astro/15.IBmSk6Nt_Z2jIAjE.webp 828w, /_astro/15.IBmSk6Nt_bIyHe.webp 1080w, /_astro/15.IBmSk6Nt_1pgAsc.webp 1280w, /_astro/15.IBmSk6Nt_1X2A3o.webp 1668w, /_astro/15.IBmSk6Nt_ZQWKKd.webp 2048w, /_astro/15.IBmSk6Nt_JJKMt.webp 2560w, /_astro/15.IBmSk6Nt_14j6UP.webp 2696w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで、手順1の拡張機能でpushすればソースを管理できて、TokenやIDを公開せずにロジックだけ公開できるようになります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあああ、GitHubにあるリポジトリを公開できるようになったぜえええ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Twitter APIやSlack APIのTokenなどを貼らずに自分のソースを公開したい場合は、今回の方法をお試し下さい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Markdown】AniListのAbout欄を編集する</title><link>https://endorphinbath.com/posts/markdown-anilist-about-space/</link><guid isPermaLink="true">https://endorphinbath.com/posts/markdown-anilist-about-space/</guid><description>AniLIstっていう自分のお気に入りのアニメとかマンガを紹介したり採点できるサイトがあります。そのサイトはUIもイケているので、そこでイイ感じにデコるための何とやらを紹介します。</description><pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;AniLIstっていう自分のお気に入りのアニメとかマンガを紹介したり採点できるサイトがあるんだけどさ。そこのUIが良くて、自分の拙いマイページでもかなり良い見栄えになったから紹介しますね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おー、そんなに？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どんなものが出来るかと言うと&lt;a href=&quot;#どんなものが出来るかと言うと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こんな感じのマイページが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;3020&quot; height=&quot;1610&quot; src=&quot;/_astro/05.ByQuyyCK_1PKMPq.webp&quot; srcset=&quot;/_astro/05.ByQuyyCK_15YFgN.webp 640w, /_astro/05.ByQuyyCK_1gLJ7Y.webp 750w, /_astro/05.ByQuyyCK_Zraesc.webp 828w, /_astro/05.ByQuyyCK_Z2qeqrG.webp 1080w, /_astro/05.ByQuyyCK_20tgBt.webp 1280w, /_astro/05.ByQuyyCK_ZiEWaI.webp 1668w, /_astro/05.ByQuyyCK_2tArgY.webp 2048w, /_astro/05.ByQuyyCK_Z2juasr.webp 2560w, /_astro/05.ByQuyyCK_1PKMPq.webp 3020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;UI的にかなりイケているサイトなので、少しデコっただけでそれなりに見応えがあるマイページになったと思っています。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1604&quot; src=&quot;/_astro/06.CKM617zv_ZCByjY.webp&quot; srcset=&quot;/_astro/06.CKM617zv_Z18H5ye.webp 640w, /_astro/06.CKM617zv_1zf5bH.webp 750w, /_astro/06.CKM617zv_2ok8vH.webp 828w, /_astro/06.CKM617zv_1QX7BJ.webp 1080w, /_astro/06.CKM617zv_Z1lEDFo.webp 1280w, /_astro/06.CKM617zv_Z1OPlVS.webp 1668w, /_astro/06.CKM617zv_ZRxt0S.webp 2048w, /_astro/06.CKM617zv_ZAqVVn.webp 2560w, /_astro/06.CKM617zv_ZCByjY.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;編集開始&lt;a href=&quot;#編集開始&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下に、AniListのAboutを編集する上での留意事項を並べます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;要素を並べて表示したい場合は改行しない。&lt;a href=&quot;#要素を並べて表示したい場合は改行しない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;AniLIstのMarkdownですと、このようにタグを改行してしまうと、レンダリング結果も改行されたものになってしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1896&quot; height=&quot;1598&quot; src=&quot;/_astro/01.HugcIlqU_Z1sMAt0.webp&quot; srcset=&quot;/_astro/01.HugcIlqU_1McUKX.webp 640w, /_astro/01.HugcIlqU_1Pbb0i.webp 750w, /_astro/01.HugcIlqU_Z2uiAHz.webp 828w, /_astro/01.HugcIlqU_Z1POebN.webp 1080w, /_astro/01.HugcIlqU_Z1DBweY.webp 1280w, /_astro/01.HugcIlqU_2x0CX7.webp 1668w, /_astro/01.HugcIlqU_Z1sMAt0.webp 1896w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、タグの改行を消して並べると、&lt;code&gt;&amp;lt;p align=&quot;left&quot;&amp;gt;&lt;/code&gt;が効いて横並びに表示されます。&lt;/p&gt;&lt;p&gt;コードが読みにくくなってしまいますが、やむを得ないですね・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1978&quot; height=&quot;1490&quot; src=&quot;/_astro/02.Big4ZCPV_1Juvm9.webp&quot; srcset=&quot;/_astro/02.Big4ZCPV_Z1zQfWA.webp 640w, /_astro/02.Big4ZCPV_Z1tqSkl.webp 750w, /_astro/02.Big4ZCPV_Z1qnMH2.webp 828w, /_astro/02.Big4ZCPV_Z1gcDJ.webp 1080w, /_astro/02.Big4ZCPV_6ACN4.webp 1280w, /_astro/02.Big4ZCPV_17I53g.webp 1668w, /_astro/02.Big4ZCPV_1Juvm9.webp 1978w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像にリンクを挿入すると、更に読みにくく・・・。まあ、しょうがないです。
&lt;img loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;1508&quot; src=&quot;/_astro/03.CWfLMRh7_LCRsu.webp&quot; srcset=&quot;/_astro/03.CWfLMRh7_2853I1.webp 640w, /_astro/03.CWfLMRh7_Z2aeaM5.webp 750w, /_astro/03.CWfLMRh7_Z27ja8l.webp 828w, /_astro/03.CWfLMRh7_Z1YHWRs.webp 1080w, /_astro/03.CWfLMRh7_25e96e.webp 1280w, /_astro/03.CWfLMRh7_Z226aR4.webp 1668w, /_astro/03.CWfLMRh7_LCRsu.webp 1912w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;table（表）は書けないっぽい&lt;a href=&quot;#table表は書けないっぽい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下のように書いてみましたが、thead-tbody形式で書こうと書かなかろうと表としてレンダリングされませんでした。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;The table header&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;The table header&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;thead&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;The table body&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;with two columns&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tbody&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;The table header&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;The table header&amp;lt;/&lt;/span&gt;&lt;span&gt;th&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;The table body&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;with two columns&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1884&quot; height=&quot;1022&quot; src=&quot;/_astro/04.Dq6Rwolw_OXStP.webp&quot; srcset=&quot;/_astro/04.Dq6Rwolw_Z2qRKl5.webp 640w, /_astro/04.Dq6Rwolw_gVkqh.webp 750w, /_astro/04.Dq6Rwolw_161nKh.webp 828w, /_astro/04.Dq6Rwolw_1qJFgy.webp 1080w, /_astro/04.Dq6Rwolw_I9Hf0.webp 1280w, /_astro/04.Dq6Rwolw_14Omwv.webp 1668w, /_astro/04.Dq6Rwolw_OXStP.webp 1884w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一旦、出来たもの&lt;a href=&quot;#一旦出来たもの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AniLIstで一旦、ここまでデコりました。
&lt;img loading=&quot;lazy&quot; width=&quot;2992&quot; height=&quot;1592&quot; src=&quot;/_astro/07.BH-FEnnh_1BLEsh.webp&quot; srcset=&quot;/_astro/07.BH-FEnnh_9q7dK.webp 640w, /_astro/07.BH-FEnnh_Z1tiqGs.webp 750w, /_astro/07.BH-FEnnh_Z1nIMvf.webp 828w, /_astro/07.BH-FEnnh_1oxsrK.webp 1080w, /_astro/07.BH-FEnnh_K41GY.webp 1280w, /_astro/07.BH-FEnnh_Z1y5c5d.webp 1668w, /_astro/07.BH-FEnnh_Z1gQAT5.webp 2048w, /_astro/07.BH-FEnnh_1zofHM.webp 2560w, /_astro/07.BH-FEnnh_1BLEsh.webp 2992w&quot; /&gt;&lt;/p&gt;&lt;p&gt;自分のお気に入りをこういう風に俯瞰できるのが素晴らしいです［°□°]&lt;/p&gt;&lt;p&gt;他にもっと本腰入れてデコっている方とかいるので、その方々のマイページは本当にスゴイです・・・
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1612&quot; src=&quot;/_astro/08.DnRkmOl7_Z1fLXR8.webp&quot; srcset=&quot;/_astro/08.DnRkmOl7_1k0xOM.webp 640w, /_astro/08.DnRkmOl7_1uMBFX.webp 750w, /_astro/08.DnRkmOl7_2jRF0X.webp 828w, /_astro/08.DnRkmOl7_273rgr.webp 1080w, /_astro/08.DnRkmOl7_Z16zk1G.webp 1280w, /_astro/08.DnRkmOl7_UhKXo.webp 1668w, /_astro/08.DnRkmOl7_ZGyFCX.webp 2048w, /_astro/08.DnRkmOl7_Z19CXA7.webp 2560w, /_astro/08.DnRkmOl7_Z1fLXR8.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;AniLIstっていうサイトで、これだけデコれるっていうのが分かりました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;忍ちゃん、かわいいねぇ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そこのあなたも、僕と一緒にデコってみましょう！ ほらここから！&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://anilist.co/user/kinkinbeer135ml/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://anilist.co/img/icons/favicon-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;AniList&lt;/span&gt;&lt;/div&gt;&lt;div&gt;AniList&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;anilist.co&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;啓蒙してるねぇ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】クラスを作って外部ライブラリとして呼び出したい場合は、ファクトリメソッドを作ろう</title><link>https://endorphinbath.com/posts/gas-make-factory-method-to-call-outer-class/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-make-factory-method-to-call-outer-class/</guid><description>Google Apps Scriptで、ライブラリ化したクラスメソッドを外部のライブラリから呼べなくなってしまっている場合に、「ファクトリメソッド」を使って解決するかもしれません。本記事の方法をお試し下さい。</description><pubDate>Mon, 09 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐああ・・・、せっかくライブラリ化したのに、外部のGASから呼び出せないよお・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお、そのライブラリ化した処理って、classとか使ってないかね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;使ってますね。やっぱりそれだとダメ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うむ、今回はファクトリメソッドを使って、classで書いていた処理を外部ライブラリから呼び出せるようにします！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;教えてくれ〜！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ここをこう書き換える。&lt;a href=&quot;#ここをこう書き換える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、こんな風にclassを使って書かれている処理があるとします。
この書き方だと、&lt;code&gt;Executor&lt;/code&gt;オブジェクトを呼べません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// クラス宣言していた部分&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;executor&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 別ライブラリからの呼び出し部分&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callExecutor&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// ここでエラーになる。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num2&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;その処理をこのように、classを使わずにファクトリメソッドを使ってobjectの生成を行います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ファクトリメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createExecutor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 補完用ダミーメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Call this method after calling createExecutor.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Executorは補完させないようにする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;executor&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;global&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 別ライブラリからの呼び出し部分&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callExecutor&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createExecutor&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num2&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どうなっているかと言うと・・・&lt;a href=&quot;#どうなっているかと言うと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GASでは、別ライブラリからクラスを直接呼び出すことは出来ません。&lt;/p&gt;&lt;p&gt;そのため、&lt;code&gt;createExecutor&lt;/code&gt;というクラスをオブジェクト化させる「ファクトリメソッド」というものを作って、そこからクラスから生成したオブジェクトを受け取ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ファクトリメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createExecutor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、こう書くと困ったことに、&lt;code&gt;Executor&lt;/code&gt;のメソッドである&lt;code&gt;plusOne&lt;/code&gt;が別のライブラリから入力する時に補完されないのです。
&lt;code&gt;plusOne&lt;/code&gt;は、&lt;code&gt;Executor&lt;/code&gt;のメソッドであり、かつ&lt;code&gt;Executor&lt;/code&gt;は補完されると困るので、&lt;code&gt;function(global)&lt;/code&gt;のスコープ内で定義される必要があります。&lt;/p&gt;&lt;p&gt;そのため、&lt;code&gt;plusOne&lt;/code&gt;というメソッドを、スコープ外で別の関数として定義して、別ライブラリから使う時に補完させるようにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 補完用ダミーメソッド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Call this method after calling createExecutor.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Executorは補完させないようにする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;executor&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;plusOne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;global&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Executor&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお、これでGASライブラリを呼び出せるねえ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自分が過去に書いた処理をもう一度別のGASライブラリに書き写すのは面倒だよねえ。なので、今回の方法で、classにしてた処理も呼び出せるようになりました！。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;また、今回の方法は、この記事がものすごい参考になったので、良ければこちらも見てみていただければと思います。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://qiita.com/soundTricker/items/42c114945c20624da237&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GASのライブラリでクラス化と補完 - Qiita&lt;/div&gt;&lt;div&gt;今回はGASのライブラリでクラス化を補完について書きます。 GASでライブラリをクラス化と補完の問題 GASのライブラリは補完が有効になるため、開発をラクにする為にも、 ライブラリをとりあえず作るシーンはよくあります。 またライブラリを設計する上で、内部でクラスを作り、 ...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjk2NSUyRnByb2ZpbGUtaW1hZ2VzJTJGMTQ3MzY4MjQxNT9peGxpYj1yYi00LjEuMSZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9ZjNlMzZlZWIwYWUxYmRlZmU0MzdlMjYyMzFmOTg2ODU%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D0331a0b7f57b4d7cfd1b775467d2897a?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9R0FTJUUzJTgxJUFFJUUzJTgzJUE5JUUzJTgyJUE0JUUzJTgzJTk2JUUzJTgzJUE5JUUzJTgzJUFBJUUzJTgxJUE3JUUzJTgyJUFGJUUzJTgzJUE5JUUzJTgyJUI5JUU1JThDJTk2JUUzJTgxJUE4JUU4JUEzJTlDJUU1JUFFJThDJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9M2ZiOThhYzNmNmUzYmQ1NzVhMjBhODg0MWIzNDcwZjE&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBzb3VuZFRyaWNrZXImdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz1kZDdkZWM2Nzg3ZjI2NTRjMDc0MGIwYjZjMjhhM2RlMg&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=ad2d2a1fa9a5b0d1789d1bbb5f67486e&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました！</title><link>https://endorphinbath.com/posts/gas-testgas-test-code-for-user-defined-functions/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-testgas-test-code-for-user-defined-functions/</guid><description>Google Apps Scriptで作った関数に対して、テストコードを使って動作を検証するためのツール「TestGAS」を作成および公開しました。初めて作ったテストツールですが、個人的にかなり便利なものになったので、ぜひ使ってみて下さい。</description><pubDate>Sun, 08 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一旦、あのツールが完成したから、今回はその紹介記事にするぜ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、とうとうあのツールが完成したか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうです。あの「TestGAS」を紹介させていただきまぁぁぁす！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そもそも、なぜ作ったか？&lt;a href=&quot;#そもそもなぜ作ったか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;テストコードを書いていれば、作った関数とかが何を返してくれる処理なのかが一発で分かって便利だし、関数の性能の担保にもなります。&lt;/p&gt;&lt;p&gt;しかし、Google Apps Scriptには、そのテストコードを走らせるようなテストツールがありません・・・。
Pythonで言うpytestとか、Node.jsで言うJestみたいなツールがないってことです。何か不便です。&lt;/p&gt;&lt;p&gt;PythonやNode.jsと同様に、Google Apps Scriptで書いたコードも何をしたらその関数が動くかをいちいち覚えてられないので、テストコードを記述したいのだが、それ用のツールが無くて書けないのが課題でした・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そして、実際に作ったのが「TestGAS」&lt;a href=&quot;#そして実際に作ったのがtestgas&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そこで、Google Apps Scriptにテストコードを記述してその動作確認を行うためのツールを作りました。それが「TestGAS」というツールです。
このロゴが目印です。
&lt;img loading=&quot;lazy&quot; width=&quot;1007&quot; height=&quot;904&quot; src=&quot;/_astro/01.C5TB3hsj_Z2u3tH5.webp&quot; srcset=&quot;/_astro/01.C5TB3hsj_PokPq.webp 640w, /_astro/01.C5TB3hsj_usayj.webp 750w, /_astro/01.C5TB3hsj_1q2dJq.webp 828w, /_astro/01.C5TB3hsj_Z2u3tH5.webp 1007w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、こんなテストコードを打つとします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// content of test_sample.gs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TestGAS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createExecutor&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sample&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_sample&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_sample_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sample&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_sample_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertNotEquals&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sample&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execute_Test_sample&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;failureFuncs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeTestGas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Test_sample&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、&lt;code&gt;execute_Test_sample&lt;/code&gt;を実行すると、こんな結果が返ってきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[ &apos;test_sample_1&apos;, &apos;test_sample_2&apos; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;TestGAS starts: &quot;Test_sample&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;...... TestGAS terminated: &quot;Test_sample&quot;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;====================================================== FAILURES ======================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;______________________________________________ test_sample_1 ______________________________________________&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AssertionError: Actual value is not equal to Expected value.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual : 3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected: 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=================== 1 failed, 1 passed of all 2 tests in 0.01 seconds ===================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;pytestライクに返ってきます。&lt;/p&gt;&lt;p&gt;Assertion以外で、普通にコードがミスってたら、Google Apps Script既存のエラーチェックに引っ掛かるので、そこのチェックも大丈夫です。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発で苦労したこと&lt;a href=&quot;#開発で苦労したこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;初めてテストツールなるものを作ったから、色々と大変な部分があったが、その中でもかなり印象に残っているのは、thisのバインドとファクトリメソッドのところかな。
その2点は、それぞれ記事にしているので、みなさんもGASとかJavaScriptで何か作る時に参考にしてもらえればと思います。
ファクトリメソッドにしないと、外部のGASエディタから呼び出せないんですよね・・・。&lt;/p&gt;&lt;p&gt;thisのバインドに関する記事:&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/javascript-get-this-class-funcname/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【JavaScript】実行中の関数自身の関数名やクラス自身のメソッド名を取得する&lt;/div&gt;&lt;div&gt;実行している関数やメソッド自身の名前を取得する方法を紹介します。この方法は、その関数名を取得する関数を別の関数から呼び出してもらわなければなりません。thisに関数をバインドする必要があるためです。その呼び出し方の種類を掲載しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220131_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ファクトリメソッドに関する記事:&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-make-factory-method-to-call-outer-class/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS】クラスを作って外部ライブラリとして呼び出したい場合は、ファクトリメソッドを作ろう&lt;/div&gt;&lt;div&gt;Google Apps Scriptで、ライブラリ化したクラスメソッドを外部のライブラリから呼べなくなってしまっている場合に、「ファクトリメソッド」を使って解決するかもしれません。本記事の方法をお試し下さい。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220127_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他の作成物&lt;a href=&quot;#その他の作成物&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、ライブラリのリファレンスとか初めて書きました・・・。
そのために使ったのがGitHub Pagesで、Public Repositoryにすれば無料で利用できて、テーマとかもいじれるから、とても便利。
実際に作ったリファレンスのページがこちらになります。&lt;/p&gt;&lt;a href=&quot;https://landmaster135.github.io/TestGAS/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://landmaster135.github.io/docs/icon/apple-touch-icon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;TestGAS Reference&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Reference&lt;/div&gt;&lt;div&gt;Top page of reference about TestGAS&lt;/div&gt;&lt;div&gt;landmaster135.github.io&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;リポジトリはここです。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/TestGAS&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;TestGAS&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;クラスとか関数の設計図はこんな感じになってます。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1525&quot; src=&quot;/_astro/02.4vhiZ074_2bDBIm.webp&quot; srcset=&quot;/_astro/02.4vhiZ074_1Sq4k8.webp 640w, /_astro/02.4vhiZ074_Z2hcqwG.webp 750w, /_astro/02.4vhiZ074_mYdhA.webp 828w, /_astro/02.4vhiZ074_Z25YVaO.webp 1080w, /_astro/02.4vhiZ074_Z1R5ulm.webp 1280w, /_astro/02.4vhiZ074_1iAAk6.webp 1668w, /_astro/02.4vhiZ074_Z1JAc9f.webp 2048w, /_astro/02.4vhiZ074_Z1dBze9.webp 2560w, /_astro/02.4vhiZ074_2bDBIm.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;課題&lt;a href=&quot;#課題&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、最低限の機能は実装できたと思いますが、実はもう少し欲しい機能があります・・・。どうすればいいのか・・・。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;関数をモックする機能&lt;/li&gt;
&lt;li&gt;網羅率（カバレッジ）を表示する機能&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんとか、公開できるレベルまで持ってこれて何よりです！ 個人的には、とりあえずこれで自作した関数の仕様がテストコードとして書けるようになったから、かなり満足。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;コードの動きをいちいち確認する作業が省けるねえ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;みなさんも使ってみたい場合は、このスクリプトIDを使って利用できると思うので、使ってみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1CRjWWWYfjD7WzPl43RB1BiD7XDLJmR03eEpXr2LMh75yAq5qMlczOIfm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Googleスプレッドシート、GAS】選択した範囲をHTMLのtableタグとしてテキスト出力する</title><link>https://endorphinbath.com/posts/gas-selected-area-to-html-table/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-selected-area-to-html-table/</guid><description>Googleスプレッドシートで編集したセルをそのままHTMLのtableタグとして出力するツールを作りました。HTMLの編集は面倒ですが、これを使えば編集はGoogle Spreadsheetで管理することが出来ます。</description><pubDate>Sat, 07 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;HTMLって作るのめんどいよなあ〜。スプレッドシートとかで編集したのをそのままHTMLで表記できれば楽なのに。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今言ったことをそのまま実現できてしまうツールを紹介しましょう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、今回のソースになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;table&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;/table&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;td&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;th&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tagTr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;tr&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tagTr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; without &amp;lt; and &amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Initial of tag mustn&apos;t be &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;End of tag mustn&apos;t be &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;formerTag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;latterTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValuesBySelectedArea&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValuesBySelectedArea&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;テストコード&lt;a href=&quot;#テストコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、僕が作ったGoogle Apps Script用のテストツール「TestGAS」で使えるテストコードになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// let tester = new TestGAS.TestGasExecutor();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TestGAS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createExecutor&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_main&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getHtmlByValues_1_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [ [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;Python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GAS&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GitHub&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;JavaScript&apos;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Python&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GAS&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GitHub&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;JavaScript&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/table&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getHtmlByValues_1_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [ [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;Python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GAS&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GitHub&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;JavaScript&apos;&lt;/span&gt;&lt;span&gt; ] ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Python&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GAS&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GitHub&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;JavaScript&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/table&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getHtmlByValues_1_3&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [ [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; ] ];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/table&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getHtmlByValues_2_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [ [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;Python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GAS&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;GitHub&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;JavaScript&apos;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, [ &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&amp;lt;table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Python&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GAS&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;GitHub&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;JavaScript&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;💩&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;💩&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;💩&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;💩&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;💩&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/table&amp;gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getTrByRow_1_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_getTrByRow_1_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_1_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;a&amp;gt;test&amp;lt;/a&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_1_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;a&amp;gt;test&amp;lt;//a&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertNotEquals&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_2_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;a href=&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertError&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_2_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;a href=&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertError&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_3_1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a href=&lt;/span&gt;&lt;span&gt;\&quot;\&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertError&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;test_closeByTag_3_2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a href=&lt;/span&gt;&lt;span&gt;\&quot;\&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertError&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execute_Test_main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;failureFuncs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tester&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeTestGas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Test_main&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ちなみに、TestGASのリポジトリはこちらになります。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/TestGAS&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;TestGAS&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解説&lt;a href=&quot;#解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、今回のソースの解説になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：スプレッドシートの選択範囲を取得する&lt;a href=&quot;#その1スプレッドシートの選択範囲を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、&lt;code&gt;getValuesBySelectedArea&lt;/code&gt;関数でスプレッドシートで選択した範囲を取得します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValuesBySelectedArea&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveRange&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;activeValues&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：thタグとtdタグ、そして、trタグを作成する&lt;a href=&quot;#その2thタグとtdタグそしてtrタグを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、&lt;code&gt;th&lt;/code&gt;タグと&lt;code&gt;td&lt;/code&gt;タグを作成します。&lt;/p&gt;&lt;p&gt;その処理を行う関数は、&lt;code&gt;closeByTag&lt;/code&gt;関数になっています。
選択した範囲の1行目に対しては&lt;code&gt;th&lt;/code&gt;タグを、それ以外の行には&lt;code&gt;td&lt;/code&gt;タグを付与します。&lt;/p&gt;&lt;p&gt;そして、最後に&lt;code&gt;tr&lt;/code&gt;タグで囲います。&lt;code&gt;getTrByRow&lt;/code&gt;関数です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;td&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;th&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tagTr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;tr&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tagTd&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tagTr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; without &amp;lt; and &amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;closeByTag&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Initial of tag mustn&apos;t be &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;End of tag mustn&apos;t be &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formerTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;latterTag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;initialOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;endOfTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;formerTag&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;displayText&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;latterTag&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：thタグとtdタグを作成するとき、ブランクの代替文字を決める&lt;a href=&quot;#その3thタグとtdタグを作成するときブランクの代替文字を決める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;tableを作る時に、ブランクのセルが存在する場合があるかと思います。
その場合は、&lt;code&gt;closeByTag&lt;/code&gt;関数の&lt;code&gt;textReplacingIfBlank&lt;/code&gt;の引数に代替文字を指定するとその文字に置き換わります。デフォルトは「💩」です。&lt;/p&gt;&lt;p&gt;代替文字を&lt;code&gt;&quot;&quot;&lt;/code&gt;で指定した場合のHTMLの描画。（GitHubのリポジトリ）
&lt;img loading=&quot;lazy&quot; width=&quot;1694&quot; height=&quot;598&quot; src=&quot;/_astro/01.Cz34qTP9_Zgf3jr.webp&quot; srcset=&quot;/_astro/01.Cz34qTP9_Zin4Hi.webp 640w, /_astro/01.Cz34qTP9_1lxq0G.webp 750w, /_astro/01.Cz34qTP9_1tJUKQ.webp 828w, /_astro/01.Cz34qTP9_AQq1E.webp 1080w, /_astro/01.Cz34qTP9_ZLB1qL.webp 1280w, /_astro/01.Cz34qTP9_ZkbVI7.webp 1668w, /_astro/01.Cz34qTP9_Zgf3jr.webp 1694w&quot; /&gt;&lt;/p&gt;&lt;p&gt;代替文字を指定せずにデフォルト値の場合のHTMLの描画。（GitHubのリポジトリ）
&lt;img loading=&quot;lazy&quot; width=&quot;1694&quot; height=&quot;594&quot; src=&quot;/_astro/02.F-opY_UY_Z92jc1.webp&quot; srcset=&quot;/_astro/02.F-opY_UY_2tWuVb.webp 640w, /_astro/02.F-opY_UY_ZVj89L.webp 750w, /_astro/02.F-opY_UY_ZN6CoB.webp 828w, /_astro/02.F-opY_UY_Z1ML7XV.webp 1080w, /_astro/02.F-opY_UY_ZD4sxB.webp 1280w, /_astro/02.F-opY_UY_ZcYcAG.webp 1668w, /_astro/02.F-opY_UY_Z92jc1.webp 1694w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：tableタグで囲む&lt;a href=&quot;#その4tableタグで囲む&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、沢山生成したtrタグに対して、&lt;code&gt;table&lt;/code&gt;タグで囲みます。
その処理を、&lt;code&gt;getHtmlByValues&lt;/code&gt;関数で行っています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string[]}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;table&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;lt;/table&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTrByRow&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;isTh&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;textReplacingIfBlank&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;tmp_tr&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suffix&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その5：出力&lt;a href=&quot;#その5出力&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらが、今まで解説した前処理の呼び出し部分と最終的な出力部分になります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValuesBySelectedArea&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHtmlByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;💩&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、このように選択した場合に、
&lt;img loading=&quot;lazy&quot; width=&quot;1524&quot; height=&quot;482&quot; src=&quot;/_astro/03.D2gfbhtn_2pwh78.webp&quot; srcset=&quot;/_astro/03.D2gfbhtn_1AvChO.webp 640w, /_astro/03.D2gfbhtn_2lselR.webp 750w, /_astro/03.D2gfbhtn_Z1rtovF.webp 828w, /_astro/03.D2gfbhtn_158VuO.webp 1080w, /_astro/03.D2gfbhtn_2gGJBb.webp 1280w, /_astro/03.D2gfbhtn_2pwh78.webp 1524w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このように出力されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1694&quot; height=&quot;594&quot; src=&quot;/_astro/02.F-opY_UY_Z92jc1.webp&quot; srcset=&quot;/_astro/02.F-opY_UY_2tWuVb.webp 640w, /_astro/02.F-opY_UY_ZVj89L.webp 750w, /_astro/02.F-opY_UY_ZN6CoB.webp 828w, /_astro/02.F-opY_UY_Z1ML7XV.webp 1080w, /_astro/02.F-opY_UY_ZD4sxB.webp 1280w, /_astro/02.F-opY_UY_ZcYcAG.webp 1668w, /_astro/02.F-opY_UY_Z92jc1.webp 1694w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、スプレッドシートで楽々編集しながら、好きな時にHTMLに変換できるなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん、これは助かるなぁ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Render.com】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方（Dockerも利用）</title><link>https://endorphinbath.com/posts/renderdotcom-how-to-deploy-discord-bot/</link><guid isPermaLink="true">https://endorphinbath.com/posts/renderdotcom-how-to-deploy-discord-bot/</guid><description>RenderでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で一応実施できたので、ご参考ください。Dockerも使いました。</description><pubDate>Thu, 05 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちっくしょおーー！！ HerokuからGitHubリポジトリのソースをデプロイ出来ないなんて、何てことだあああ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、2022/4/16のOAuth漏れた騒動があったからねー・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぬぬ・・・、同じ感じでGitHubからデプロイ出来るサービスはないのだろうか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、Renderを使ってみますかあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんだそれは！？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Renderとは&lt;a href=&quot;#renderとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、色々なアプリをデプロイ出来て、Herokuよりも安価にそれが出来るとして、注目を集めているサービスです。&lt;/p&gt;&lt;p&gt;僕は、今回起きたGitHubとHeroku間のOAuth事故が起きたときに知りました。&lt;/p&gt;&lt;p&gt;HerokuとRenderを色々と比較してくれている記事が以下にありましたので、もう少し違いを詳しく見たい方はご参照ください。&lt;/p&gt;&lt;a href=&quot;https://zenn.dev/mc_chinju/articles/compare_render_and_heroku&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://static.zenn.studio/images/logo-transparent.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Zenn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【格安本番運用が可能に】Render.com のメリット・デメリットを Heroku と比較してみた&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zenn.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://res.cloudinary.com/zenn/image/upload/s--vY_hTxHF--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2580%2590%25E6%25A0%25BC%25E5%25AE%2589%25E6%259C%25AC%25E7%2595%25AA%25E9%2581%258B%25E7%2594%25A8%25E3%2581%258C%25E5%258F%25AF%25E8%2583%25BD%25E3%2581%25AB%25E3%2580%2591Render.com%2520%25E3%2581%25AE%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2588%25E3%2583%25BB%25E3%2583%2587%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%2583%25E3%2583%2588%25E3%2582%2592%2520Heroku%2520%25E3%2581%25A8%25E6%25AF%2594%25E8%25BC%2583%25E3%2581%2597%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:%25E3%2581%258B%25E3%2581%25AD%25E3%2581%2593%25E3%2581%259F%25E3%2581%258F%25E3%2582%2584%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyL2I4ZTU1Njc3MTQuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;実際にRenderを使ってデプロイしてみよう&lt;a href=&quot;#実際にrenderを使ってデプロイしてみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;この機会なので、HerokuではなくRenderを使ってみたいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;RenderをGitHubに連携する&lt;a href=&quot;#renderをgithubに連携する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、デプロイしたいサービス形態を選択します。今回は、「Private Services」を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1606&quot; src=&quot;/_astro/01.B58yZhk2_Z2usbX7.webp&quot; srcset=&quot;/_astro/01.B58yZhk2_Z2bhaBb.webp 640w, /_astro/01.B58yZhk2_1gbphx.webp 750w, /_astro/01.B58yZhk2_1lK3sK.webp 828w, /_astro/01.B58yZhk2_4kq1R.webp 1080w, /_astro/01.B58yZhk2_Zz90HT.webp 1280w, /_astro/01.B58yZhk2_Zj8SWJ.webp 1668w, /_astro/01.B58yZhk2_Z1QSOij.webp 2048w, /_astro/01.B58yZhk2_Z2fQzXF.webp 2560w, /_astro/01.B58yZhk2_Z2usbX7.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;初めて利用するのであれば、クレジットカードを登録します。
&lt;img loading=&quot;lazy&quot; width=&quot;1308&quot; height=&quot;986&quot; src=&quot;/_astro/02.DAdPM0gJ_Z28za2F.webp&quot; srcset=&quot;/_astro/02.DAdPM0gJ_Z1fEB0K.webp 640w, /_astro/02.DAdPM0gJ_BAVx4.webp 750w, /_astro/02.DAdPM0gJ_ZpOwAS.webp 828w, /_astro/02.DAdPM0gJ_1kuux1.webp 1080w, /_astro/02.DAdPM0gJ_Zjo41y.webp 1280w, /_astro/02.DAdPM0gJ_Z28za2F.webp 1308w&quot; /&gt;&lt;/p&gt;&lt;p&gt;GitHubのリポジトリを選択する画面になります。（画面はCron Jobで試したものです。Private Servicesでも同じような画面になると思います。）&lt;/p&gt;&lt;p&gt;public repositoryを選べ的な感じで書いてありますが、private repositoryを選んでも大丈夫です。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1604&quot; src=&quot;/_astro/03.CAGLdRdb_WwLgW.webp&quot; srcset=&quot;/_astro/03.CAGLdRdb_2x1N21.webp 640w, /_astro/03.CAGLdRdb_RPlmu.webp 750w, /_astro/03.CAGLdRdb_YQSi1.webp 828w, /_astro/03.CAGLdRdb_Wb3Iz.webp 1080w, /_astro/03.CAGLdRdb_Z1wgSwT.webp 1280w, /_astro/03.CAGLdRdb_yGIIX.webp 1668w, /_astro/03.CAGLdRdb_1A68VK.webp 2048w, /_astro/03.CAGLdRdb_ZCP8fj.webp 2560w, /_astro/03.CAGLdRdb_WwLgW.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Private repositoryを選ぶと、そのGitHubのプライベートリポジトリにRenderをインストールしろと言われますので、インストールします。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1576&quot; src=&quot;/_astro/04.Dq3D0B-s_ZAjwzF.webp&quot; srcset=&quot;/_astro/04.Dq3D0B-s_Z1uXxNB.webp 640w, /_astro/04.Dq3D0B-s_1Uadjn.webp 750w, /_astro/04.Dq3D0B-s_22bKeT.webp 828w, /_astro/04.Dq3D0B-s_Z1DOGh5.webp 1080w, /_astro/04.Dq3D0B-s_1111xa.webp 1280w, /_astro/04.Dq3D0B-s_1pebPT.webp 1668w, /_astro/04.Dq3D0B-s_ZiEV6.webp 2048w, /_astro/04.Dq3D0B-s_t7qWL.webp 2560w, /_astro/04.Dq3D0B-s_ZAjwzF.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インストールするリポジトリは、デプロイするリポジトリだけでいいので、そのリポジトリを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1604&quot; src=&quot;/_astro/05.Ca-8-OQP_ZmcTNK.webp&quot; srcset=&quot;/_astro/05.Ca-8-OQP_OTlPm.webp 640w, /_astro/05.Ca-8-OQP_ZMOc4Q.webp 750w, /_astro/05.Ca-8-OQP_ZFME9k.webp 828w, /_astro/05.Ca-8-OQP_ZmqtXK.webp 1080w, /_astro/05.Ca-8-OQP_2eiGyH.webp 1280w, /_astro/05.Ca-8-OQP_ZJTNXm.webp 1668w, /_astro/05.Ca-8-OQP_Z2iEJiV.webp 2048w, /_astro/05.Ca-8-OQP_xA7iV.webp 2560w, /_astro/05.Ca-8-OQP_ZmcTNK.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Installをクリックしてインストールします。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1600&quot; src=&quot;/_astro/06.C9t5HzH-_1i9aoN.webp&quot; srcset=&quot;/_astro/06.C9t5HzH-_pl6Dh.webp 640w, /_astro/06.C9t5HzH-_1ijKRv.webp 750w, /_astro/06.C9t5HzH-_1pliN2.webp 828w, /_astro/06.C9t5HzH-_1dFUzD.webp 1080w, /_astro/06.C9t5HzH-_Z1fL1FP.webp 1280w, /_astro/06.C9t5HzH-_PcAA2.webp 1668w, /_astro/06.C9t5HzH-_1QB0MO.webp 2048w, /_astro/06.C9t5HzH-_ZidJ7s.webp 2560w, /_astro/06.C9t5HzH-_1i9aoN.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程の画面に戻るので、プライベートリポジトリを再度選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1600&quot; src=&quot;/_astro/07.BZHMNtTn_1oUCek.webp&quot; srcset=&quot;/_astro/07.BZHMNtTn_1IF7ys.webp 640w, /_astro/07.BZHMNtTn_4tESV.webp 750w, /_astro/07.BZHMNtTn_bvcOs.webp 828w, /_astro/07.BZHMNtTn_1i9HiX.webp 1080w, /_astro/07.BZHMNtTn_Z1bieWv.webp 1280w, /_astro/07.BZHMNtTn_Z1AmpWd.webp 1668w, /_astro/07.BZHMNtTn_1V4Mw9.webp 2048w, /_astro/07.BZHMNtTn_2hhPRr.webp 2560w, /_astro/07.BZHMNtTn_1oUCek.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インストールに関しては、ここに記事があったので詳細はこちらをご参照ください。&lt;/p&gt;&lt;a href=&quot;https://render.com/docs/github&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://render.com/icon.svg?e6fbdd2e217c0064&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Render&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Connect GitHub&lt;/div&gt;&lt;div&gt;Render connects with GitHub to deploy your apps and websites automatically on every push to your project. Use this quickstart guide to connect Render to GitHub.&lt;/div&gt;&lt;div&gt;render.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://render.com/docs/github/opengraph-image?2eeec6844a9acea1&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;デプロイの設定をする。&lt;a href=&quot;#デプロイの設定をする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デプロイの設定に入ります。Python 3を選択して、mainブランチからデプロイします。
&lt;img loading=&quot;lazy&quot; width=&quot;2972&quot; height=&quot;1606&quot; src=&quot;/_astro/08.C5O0f4MU_2e6tps.webp&quot; srcset=&quot;/_astro/08.C5O0f4MU_Z2rfxxW.webp 640w, /_astro/08.C5O0f4MU_Z2gstGL.webp 750w, /_astro/08.C5O0f4MU_Z1rnqmL.webp 828w, /_astro/08.C5O0f4MU_Z1fRCwW.webp 1080w, /_astro/08.C5O0f4MU_Z1XsAyv.webp 1280w, /_astro/08.C5O0f4MU_Z1xGp0d.webp 1668w, /_astro/08.C5O0f4MU_1PwJUz.webp 2048w, /_astro/08.C5O0f4MU_liuA4.webp 2560w, /_astro/08.C5O0f4MU_2e6tps.webp 2972w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Build Command」および「Start Command」は、このコマンド群でデプロイしてみます。&lt;/p&gt;&lt;p&gt;Build Command:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-y&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;python3-pip&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;/opt/render/project/src/.venv/bin/python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Start Command:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;app.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;料金プランは最弱の「Starter」を選びました。
&lt;img loading=&quot;lazy&quot; width=&quot;2982&quot; height=&quot;1598&quot; src=&quot;/_astro/09.BqG7birJ_ZKOdv.webp&quot; srcset=&quot;/_astro/09.BqG7birJ_1JBnfH.webp 640w, /_astro/09.BqG7birJ_1Uor6S.webp 750w, /_astro/09.BqG7birJ_Z2kHDn3.webp 828w, /_astro/09.BqG7birJ_Z7Om0T.webp 1080w, /_astro/09.BqG7birJ_1IJ0uT.webp 1280w, /_astro/09.BqG7birJ_Z1jA2iW.webp 1668w, /_astro/09.BqG7birJ_Zmi9mW.webp 2048w, /_astro/09.BqG7birJ_1FFlVt.webp 2560w, /_astro/09.BqG7birJ_ZKOdv.webp 2982w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Create Private Service」をクリックして、デプロイが始まります。どきどき・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;3004&quot; height=&quot;1602&quot; src=&quot;/_astro/10.UGJ1hX4k_ZX3k99.webp&quot; srcset=&quot;/_astro/10.UGJ1hX4k_1nEY3n.webp 640w, /_astro/10.UGJ1hX4k_1ys2Ty.webp 750w, /_astro/10.UGJ1hX4k_2nx6ey.webp 828w, /_astro/10.UGJ1hX4k_1sxWTa.webp 1080w, /_astro/10.UGJ1hX4k_Z1K4NnX.webp 1280w, /_astro/10.UGJ1hX4k_Z2efvEs.webp 1668w, /_astro/10.UGJ1hX4k_1ibGNT.webp 2048w, /_astro/10.UGJ1hX4k_1zidSp.webp 2560w, /_astro/10.UGJ1hX4k_ZX3k99.webp 3004w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;Pythonでデプロイ出来ない・・・&lt;a href=&quot;#pythonでデプロイ出来ない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これでデプロイしてみると、こんなエラーメッセージが表示されてデプロイ出来ません。（僕のDiscord botアプリは、py-cord 2.0.0じゃないと動きません・・・。困った・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;2546&quot; height=&quot;1108&quot; src=&quot;/_astro/11.Cc8vjDvN_Z1RpOHv.webp&quot; srcset=&quot;/_astro/11.Cc8vjDvN_1jze6R.webp 640w, /_astro/11.Cc8vjDvN_Z10xqjW.webp 750w, /_astro/11.Cc8vjDvN_ZaV35E.webp 828w, /_astro/11.Cc8vjDvN_rfPYx.webp 1080w, /_astro/11.Cc8vjDvN_Z2w22hT.webp 1280w, /_astro/11.Cc8vjDvN_16jwdB.webp 1668w, /_astro/11.Cc8vjDvN_wnbx3.webp 2048w, /_astro/11.Cc8vjDvN_Z1RpOHv.webp 2546w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Pythonのバージョンが古いのが問題・・・？
&lt;img loading=&quot;lazy&quot; width=&quot;2550&quot; height=&quot;600&quot; src=&quot;/_astro/12.DEMDnKxV_2mAUPQ.webp&quot; srcset=&quot;/_astro/12.DEMDnKxV_Z1fDd35.webp 640w, /_astro/12.DEMDnKxV_22suTI.webp 750w, /_astro/12.DEMDnKxV_Z1vp1qw.webp 828w, /_astro/12.DEMDnKxV_1GDjhV.webp 1080w, /_astro/12.DEMDnKxV_nxy3r.webp 1280w, /_astro/12.DEMDnKxV_ZQozgj.webp 1668w, /_astro/12.DEMDnKxV_Z15EBNF.webp 2048w, /_astro/12.DEMDnKxV_2mAUPQ.webp 2550w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;Dockerでデプロイしてみよう&lt;a href=&quot;#dockerでデプロイしてみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonのバージョンを上げたいのですが、Python 3でデプロイすると、Python 3.7からバージョンアップできないようです。&lt;/p&gt;&lt;p&gt;RenderでPythonのバージョンについて調べてみると、3.7がデフォルトらしくそれ以上のバージョンでデプロイしたければDockerでデプロイしてみろとのことです。&lt;/p&gt;&lt;a href=&quot;https://render.com/docs/python-version&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://render.com/icon.svg?e6fbdd2e217c0064&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Render&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Setting Your Python Version&lt;/div&gt;&lt;div&gt;Use a specific version of Python for your Render service.&lt;/div&gt;&lt;div&gt;render.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://render.com/docs/python-version/opengraph-image?2eeec6844a9acea1&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;section&gt;&lt;h3&gt;Dockerfileの設定&lt;a href=&quot;#dockerfileの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なので、Dockerでデプロイしてみます。Dockerfileを以下のように設定します。Ubuntuでコンテナを作ります。&lt;/p&gt;&lt;p&gt;先程デプロイしようとしたメインディレクトリに、以下の感じのDockerfileを配置します。&lt;/p&gt;&lt;p&gt;デプロイに必要ないファイルは.dockerignoreで排除してデプロイ時間を短縮します。&lt;/p&gt;&lt;p&gt;Dockerfile&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; ubuntu:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYTHON_VERSION 3.7.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; HOME /root&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PATH $PYTHON_ROOT/bin:$PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYENV_ROOT $HOME/.pyenv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# setup timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# update apt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install python and pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install -y python3 python3-pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install --upgrade pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# save docker layer cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./requirements.txt /usr/src/app/requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# use git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install git -y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pip install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install --no-cache-dir -r requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install landmasterlibrary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install git+https://github.com/landmaster135/landmasterlibrary.git@main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# copy files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./ /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# execute Python code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; python3 app.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;デプロイ設定&lt;a href=&quot;#デプロイ設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;再度、デプロイ設定に入ります。「Environment」を今回はDockerにします。Commandを入れる必要はなくなったので以下の設定で基本的にOKです。
&lt;img loading=&quot;lazy&quot; width=&quot;2996&quot; height=&quot;1588&quot; src=&quot;/_astro/13.wnkbm9g-_rtNEG.webp&quot; srcset=&quot;/_astro/13.wnkbm9g-_6YdNu.webp 640w, /_astro/13.wnkbm9g-_Z1xcdQ2.webp 750w, /_astro/13.wnkbm9g-_Z1qaFUv.webp 828w, /_astro/13.wnkbm9g-_Zvbt8f.webp 1080w, /_astro/13.wnkbm9g-_25xHpd.webp 1280w, /_astro/13.wnkbm9g-_ZSEN7Q.webp 1668w, /_astro/13.wnkbm9g-_Z2rpIsq.webp 2048w, /_astro/13.wnkbm9g-_Z26cF78.webp 2560w, /_astro/13.wnkbm9g-_rtNEG.webp 2996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1604&quot; src=&quot;/_astro/14.DxSw3ppO_Z1mtUWi.webp&quot; srcset=&quot;/_astro/14.DxSw3ppO_17YPkr.webp 640w, /_astro/14.DxSw3ppO_22ijkp.webp 750w, /_astro/14.DxSw3ppO_Zpa4oy.webp 828w, /_astro/14.DxSw3ppO_1a00Vu.webp 1080w, /_astro/14.DxSw3ppO_vvzbI.webp 1280w, /_astro/14.DxSw3ppO_Z1MCDAt.webp 1668w, /_astro/14.DxSw3ppO_ZLeenG.webp 2048w, /_astro/14.DxSw3ppO_1kPNcw.webp 2560w, /_astro/14.DxSw3ppO_Z1mtUWi.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;デプロイ完了・・・？&lt;a href=&quot;#デプロイ完了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Create Private Service」をクリックして、デプロイが始まります。どきどき・・・。&lt;/p&gt;&lt;p&gt;していると、デプロイが終わりました。その結果を見てみると、&lt;code&gt;405: Method Not Allowed&lt;/code&gt;のメッセージが出ていますね・・・
&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1602&quot; src=&quot;/_astro/15.C2R92kvr_Z1j0BOf.webp&quot; srcset=&quot;/_astro/15.C2R92kvr_1Doops.webp 640w, /_astro/15.C2R92kvr_ZM3f4.webp 750w, /_astro/15.C2R92kvr_6etFs.webp 828w, /_astro/15.C2R92kvr_Z1nkIg2.webp 1080w, /_astro/15.C2R92kvr_1doshq.webp 1280w, /_astro/15.C2R92kvr_NkhhI.webp 1668w, /_astro/15.C2R92kvr_ZJpD2Q.webp 2048w, /_astro/15.C2R92kvr_ZoczGy.webp 2560w, /_astro/15.C2R92kvr_Z1j0BOf.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うーん、少し気になりますが、Discordの画面を見てみるとボットは起動しているようです・・・。問題なく使えています。
&lt;img loading=&quot;lazy&quot; width=&quot;2878&quot; height=&quot;1618&quot; src=&quot;/_astro/16.D4ECpcXR_12dJu4.webp&quot; srcset=&quot;/_astro/16.D4ECpcXR_41vsd.webp 640w, /_astro/16.D4ECpcXR_Z2itBxV.webp 750w, /_astro/16.D4ECpcXR_13CsGf.webp 828w, /_astro/16.D4ECpcXR_Z1vHLKO.webp 1080w, /_astro/16.D4ECpcXR_1Xuvrk.webp 1280w, /_astro/16.D4ECpcXR_Z1pmaJs.webp 1668w, /_astro/16.D4ECpcXR_Z2cQ2WU.webp 2048w, /_astro/16.D4ECpcXR_1Vw5Xm.webp 2560w, /_astro/16.D4ECpcXR_12dJu4.webp 2878w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うーん・・・、今回は詮索するのは保留にします・・・。pycordの中で起きている例外なので、分かるには時間が掛かりそう・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;ところがどっこい&lt;a href=&quot;#ところがどっこい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;デプロイがエラーコード137で失敗する&lt;a href=&quot;#デプロイがエラーコード137で失敗する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ところがどっこい、先程の状態を放置して2時間ほど経過した後、Renderを見てみると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2542&quot; height=&quot;688&quot; src=&quot;/_astro/17.C2SMPS3l_2lry71.webp&quot; srcset=&quot;/_astro/17.C2SMPS3l_ZKbt13.webp 640w, /_astro/17.C2SMPS3l_inHl5.webp 750w, /_astro/17.C2SMPS3l_FEjCx.webp 828w, /_astro/17.C2SMPS3l_1Qioxv.webp 1080w, /_astro/17.C2SMPS3l_Z20lHvs.webp 1280w, /_astro/17.C2SMPS3l_Z1t2BEz.webp 1668w, /_astro/17.C2SMPS3l_Z1Jy2NG.webp 2048w, /_astro/17.C2SMPS3l_2lry71.webp 2542w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Deploy failed」となっていますね・・・。Error codeが137となっています。どうやら、このコード自体はメモリ不足が原因のようです。&lt;/p&gt;&lt;a href=&quot;https://docs.docker.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.docker.com/assets/images/favicon-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Docker Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Home&lt;/div&gt;&lt;div&gt;Docker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.&lt;/div&gt;&lt;div&gt;docs.docker.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.docker.com/images/thumbnail.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プランを引き上げて再デプロイしてみる&lt;a href=&quot;#プランを引き上げて再デプロイしてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;試しにサーバを「Starter Plus」にして、再度デプロイして放置してみます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1298&quot; src=&quot;/_astro/18.nuTvuxGM_1hibzq.webp&quot; srcset=&quot;/_astro/18.nuTvuxGM_uzI5K.webp 640w, /_astro/18.nuTvuxGM_Hu5z7.webp 750w, /_astro/18.nuTvuxGM_ZXAJl2.webp 828w, /_astro/18.nuTvuxGM_1cFCxj.webp 1080w, /_astro/18.nuTvuxGM_4mfLz.webp 1280w, /_astro/18.nuTvuxGM_Z1jmMf4.webp 1668w, /_astro/18.nuTvuxGM_Z198iSX.webp 2048w, /_astro/18.nuTvuxGM_Z1Mr1rP.webp 2560w, /_astro/18.nuTvuxGM_1hibzq.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1604&quot; src=&quot;/_astro/19.uXSBif4P_2mQvEL.webp&quot; srcset=&quot;/_astro/19.uXSBif4P_FhhMK.webp 640w, /_astro/19.uXSBif4P_ZWrg7s.webp 750w, /_astro/19.uXSBif4P_ZQRBVf.webp 828w, /_astro/19.uXSBif4P_2ksoLW.webp 1080w, /_astro/19.uXSBif4P_1FXX2b.webp 1280w, /_astro/19.uXSBif4P_ZCafK1.webp 1668w, /_astro/19.uXSBif4P_ZkVEyS.webp 2048w, /_astro/19.uXSBif4P_2vjc2Y.webp 2560w, /_astro/19.uXSBif4P_2mQvEL.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、またもや、失敗と出ます・・・。同じエラーコードです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アプリを走らせるコマンドをRUNではなくCMDで走らせてみる。&lt;a href=&quot;#アプリを走らせるコマンドをrunではなくcmdで走らせてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今度試したのは、DockerfileのサイドのコマンドをRUNではなくCMDで実行する試みです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; ubuntu:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYTHON_VERSION 3.7.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; HOME /root&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYTHON_ROOT $HOME/local/python-$PYTHON_VERSION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PATH $PYTHON_ROOT/bin:$PATH&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; PYENV_ROOT $HOME/.pyenv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# setup timezone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# update apt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install python and pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install -y python3 python3-pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install --upgrade pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# save docker layer cache&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./requirements.txt /usr/src/app/requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# use git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install git -y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# pip install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install --no-cache-dir -r requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# install landmasterlibrary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; pip install git+https://github.com/landmaster135/landmasterlibrary.git@main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# copy files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./ /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# execute Python code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CMD&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;python3&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;app.py&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;今度は・・・、Timed outと表示されてしまいました。&lt;/p&gt;&lt;p&gt;でも、エラーメッセージが変わったので、少し光明が見えてきたかも。
&lt;img loading=&quot;lazy&quot; width=&quot;2342&quot; height=&quot;258&quot; src=&quot;/_astro/21.BS5qPnNb_1ICc1B.webp&quot; srcset=&quot;/_astro/21.BS5qPnNb_Z1aT9s4.webp 640w, /_astro/21.BS5qPnNb_1if2lT.webp 750w, /_astro/21.BS5qPnNb_Qy7uw.webp 828w, /_astro/21.BS5qPnNb_Z2aAwbE.webp 1080w, /_astro/21.BS5qPnNb_2n48YL.webp 1280w, /_astro/21.BS5qPnNb_Z1ePO1y.webp 1668w, /_astro/21.BS5qPnNb_1e7rxr.webp 2048w, /_astro/21.BS5qPnNb_1ICc1B.webp 2342w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Private Serviceではなく、Background Workerでデプロイしてみる。&lt;a href=&quot;#private-serviceではなくbackground-workerでデプロイしてみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここに有力そうな記事が見つかりました。&lt;/p&gt;&lt;a href=&quot;https://community.render.com/t/deploy-of-docker-as-private-service-fails-with-timeout/1359&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex016/uploads/render/optimized/2X/f/f64330fd3eabb910a0f081235d16159032e38392_2_32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Render&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Deploy of Docker as private service fails with timeout&lt;/div&gt;&lt;div&gt;I created a private service where I deploy a Docker image. It fails after a couple of minutes with a timeout. My supervisor in the container receives a SIGTERM and shuts down. There is nothing in the logs to be found. Locally the container keeps running. What’s going on? Dockerfile: FROM joyzoursky/python-chromedriver:3.8-selenium ################ # dependencies # ################ RUN apt-get update &amp;amp;&amp;amp; \ apt-get -y install libblas-dev liblapack-dev libatlas-base-dev gfortran supervisor cr...&lt;/div&gt;&lt;div&gt;community.render.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex016/uploads/render/original/2X/1/11352202c8503f736bea5efb59684f678d7c860c.svg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;Private Serviceは10000番ポートでlistenするように想定されているから、そうじゃないポートで使うとうんちゃらかんちゃらと書いてあるっぽいです。&lt;/p&gt;&lt;p&gt;とりあえず、同じリポジトリから、Private ServiceではなくBackground WorkerでDockerデプロイしてみます。
&lt;img loading=&quot;lazy&quot; width=&quot;2804&quot; height=&quot;1596&quot; src=&quot;/_astro/22.NE831Do0_2iwtoI.webp&quot; srcset=&quot;/_astro/22.NE831Do0_Z1IFef4.webp 640w, /_astro/22.NE831Do0_Z1y9kl2.webp 750w, /_astro/22.NE831Do0_1LuQ9P.webp 828w, /_astro/22.NE831Do0_mv2cW.webp 1080w, /_astro/22.NE831Do0_ZxovCX.webp 1280w, /_astro/22.NE831Do0_Z2aodzP.webp 1668w, /_astro/22.NE831Do0_1Y5Ys4.webp 2048w, /_astro/22.NE831Do0_eYDgX.webp 2560w, /_astro/22.NE831Do0_2iwtoI.webp 2804w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうしたら・・・、&lt;/p&gt;&lt;p&gt;なんと！ 相変わらず、&lt;code&gt;405: Method Not Allowed&lt;/code&gt;のメッセージは表示されていますが、デプロイが終わり「Live」の状態になっています！
&lt;img loading=&quot;lazy&quot; width=&quot;2866&quot; height=&quot;1576&quot; src=&quot;/_astro/23.BKIhgBAm_ZLx9cS.webp&quot; srcset=&quot;/_astro/23.BKIhgBAm_295pIN.webp 640w, /_astro/23.BKIhgBAm_ZdhCiL.webp 750w, /_astro/23.BKIhgBAm_Z1VmFRw.webp 828w, /_astro/23.BKIhgBAm_Z1j0AYj.webp 1080w, /_astro/23.BKIhgBAm_Z17DFb5.webp 1280w, /_astro/23.BKIhgBAm_Z1N8XgV.webp 1668w, /_astro/23.BKIhgBAm_LMPlp.webp 2048w, /_astro/23.BKIhgBAm_3iqi7.webp 2560w, /_astro/23.BKIhgBAm_ZLx9cS.webp 2866w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Botも特に問題なく動作しています！
&lt;img loading=&quot;lazy&quot; width=&quot;2824&quot; height=&quot;1698&quot; src=&quot;/_astro/24.BM5J8L8Q_Z1qlNI7.webp&quot; srcset=&quot;/_astro/24.BM5J8L8Q_2ozJCs.webp 640w, /_astro/24.BM5J8L8Q_Z2wFt0k.webp 750w, /_astro/24.BM5J8L8Q_OarhH.webp 828w, /_astro/24.BM5J8L8Q_hOQgt.webp 1080w, /_astro/24.BM5J8L8Q_gop5f.webp 1280w, /_astro/24.BM5J8L8Q_Z6RpqF.webp 1668w, /_astro/24.BM5J8L8Q_1xpScS.webp 2048w, /_astro/24.BM5J8L8Q_Z1sHvca.webp 2560w, /_astro/24.BM5J8L8Q_Z1qlNI7.webp 2824w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、今回のDiscord botをデプロイした件のまとめです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;2022/4/16のインシデントが原因で、HerokuがGitHubからのデプロイに対応していない状況である。&lt;/li&gt;
&lt;li&gt;しかし、Render.comを使えば、Herokuと同様にGitHubからデプロイ出来る。&lt;/li&gt;
&lt;li&gt;pycordのバージョンが、Python 3.7以前で利用できないものである場合、Dockerでデプロイする。&lt;/li&gt;
&lt;li&gt;アプリ種別は「Background Worker」でデプロイする。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やった！ デプロイ出来るじゃないですかあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんか例外は出てるけどね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;変だな〜、変だな〜&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Excel、GSS】僕がよく仕事で使っている関数8選</title><link>https://endorphinbath.com/posts/excel-daily-8-functions/</link><guid isPermaLink="true">https://endorphinbath.com/posts/excel-daily-8-functions/</guid><description>僕が仕事で比較的頻繁に使っている関数をまとめました。知らなかった方は、日々の仕事にこれらの関数をお役立て下さい。</description><pubDate>Wed, 04 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、僕がよく仕事で使っている関数を紹介しますよ。まだ使っていない関数があったら使ってみて下さい。便利だと思うんで。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どれどれ・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;関数の紹介8選&lt;a href=&quot;#関数の紹介8選&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;以下、関数の紹介になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 文字の結合（&amp;amp;：アンパサンドとか）&lt;a href=&quot;#1-文字の結合アンパサンドとか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;とかセルの参照って、結構使うんですよね。&lt;/p&gt;&lt;p&gt;どういう風に使うことが多いかと言うと、シェルのコマンドを量産するのに利用することが多いです。
&lt;code&gt;mkdir&lt;/code&gt;や&lt;code&gt;rename&lt;/code&gt;コマンドとかをよく量産しています。&lt;/p&gt;&lt;p&gt;システム開発の際にテストの証跡をしまうために、フォルダを大量生産するかと思うのですが、そういう時に重宝する使い方だと思います。&lt;/p&gt;&lt;p&gt;使うイメージはこんな感じですかね。
&lt;img loading=&quot;lazy&quot; width=&quot;1556&quot; height=&quot;637&quot; src=&quot;/_astro/01.DmoID2UZ_Z2mz2B4.webp&quot; srcset=&quot;/_astro/01.DmoID2UZ_ZWNKWq.webp 640w, /_astro/01.DmoID2UZ_Zek3CG.webp 750w, /_astro/01.DmoID2UZ_26W4XP.webp 828w, /_astro/01.DmoID2UZ_ZnsJYE.webp 1080w, /_astro/01.DmoID2UZ_Z1N3v5g.webp 1280w, /_astro/01.DmoID2UZ_Z2mz2B4.webp 1556w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あと以前に、DBの中の100個以上のテーブルからデータを抽出する作業を行う時は、Excelを使ってSQLの大量生産ツールを作っていました。懐かしいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. TODAY()&lt;a href=&quot;#2-today&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは在宅勤務のときに上長に諸届を出す時に毎回利用していますね。&lt;/p&gt;&lt;p&gt;諸届のテンプレがExcelの中にあり、この&lt;code&gt;TODAY&lt;/code&gt;関数を使うと毎回諸届の文面を書き換える必要がなくなるのです。&lt;/p&gt;&lt;p&gt;同じようなシチュエーションがありましたら、ぜひやってみて下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. TEXT()&lt;a href=&quot;#3-text&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは数値や日付の値をテキストとして、セルに反映させます。&lt;/p&gt;&lt;p&gt;上述した、フォルダを連番で作成する際にこれを併せて使用することが多いです。
&lt;img loading=&quot;lazy&quot; width=&quot;1556&quot; height=&quot;637&quot; src=&quot;/_astro/01.DmoID2UZ_Z2mz2B4.webp&quot; srcset=&quot;/_astro/01.DmoID2UZ_ZWNKWq.webp 640w, /_astro/01.DmoID2UZ_Zek3CG.webp 750w, /_astro/01.DmoID2UZ_26W4XP.webp 828w, /_astro/01.DmoID2UZ_ZnsJYE.webp 1080w, /_astro/01.DmoID2UZ_Z1N3v5g.webp 1280w, /_astro/01.DmoID2UZ_Z2mz2B4.webp 1556w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. VLOOKUP()&lt;a href=&quot;#4-vlookup&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これを覚えているかいないかでは、出来ることにだいぶ差が生まれてきます。&lt;/p&gt;&lt;p&gt;基本情報技術者試験で表計算を選んだ場合も、たぶん毎年出題されている部分であり、確かにそれぐらい大事なロジックになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;VLOOKUP(A,B,C,D)&lt;/code&gt;とあったら、Aのセル（もしくは値）がBの範囲の1列目にあったら、その見つかった行のC番目の列のセルを抜き取ります。DはBの範囲の1列目で探す時の検索条件になります。&lt;/p&gt;&lt;p&gt;・・・まあ、習得できていない方は、やってみて覚えるのが1番だと思います。僕も最初、理解するのに少し時間が掛かりましたし。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. HYPERLINK()&lt;a href=&quot;#5-hyperlink&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;仕事でBox Driveを使うことが多いので、以前まではそのパスをExcelに単にメモって使っていました。&lt;/p&gt;&lt;p&gt;しかし、それだとExcelに貼ってあるパスをわざわざエクスプローラのフォルダの検索窓に入力しなければならなかったので、現在は&lt;code&gt;HYPERLINK&lt;/code&gt;関数を使ってExcelでセルのハイパーリンクをクリックすれば、&lt;/p&gt;&lt;p&gt;そのフォルダをエクスプローラ上で開けるようにしています。クリックだけで飛べるようになるので、時短になっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. IFERROR()&lt;a href=&quot;#6-iferror&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上述した&lt;code&gt;HYPERLINK&lt;/code&gt;を当初使っていたのですが、時が過ぎていくと、Box Drive上だと共同編集できない共有Excelファイルなどを、HTTPSプロトコルのパスで僕のExcelのメモ帳にメモするようになりました。そうなってくると、HTTPSのパスとその&lt;code&gt;HYPERLINK&lt;/code&gt;関数の数がごちゃごちゃに増えてきて、関数を使い分けるのが面倒くさくなってきたのです。&lt;/p&gt;&lt;p&gt;そこで今の僕は、&lt;code&gt;IFERROR&lt;/code&gt;関数を使ってこんな感じの関数でパスを設定している現状になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;=HYPERLINK(IF(IFERROR(FIND(&quot;http&quot;,F2),0)=0,&quot;C:\Users\%USERNAME%\&quot;&amp;amp;F2,F2))&lt;/code&gt;&lt;/p&gt;&lt;p&gt;F2セルにパスを入力します。&lt;/p&gt;&lt;p&gt;（便宜上&lt;code&gt;%USERNAME%と&lt;/code&gt;書いていますが、それだと動かないので自分のユーザー名を直打ちしています。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. AND()&lt;a href=&quot;#7-and&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これも結構使います。これを知っていれば、&lt;code&gt;IF&lt;/code&gt;関数の中に&lt;code&gt;IF&lt;/code&gt;関数・・・、その&lt;code&gt;IF&lt;/code&gt;関数の中に&lt;code&gt;IF&lt;/code&gt;関数・・・なんてことが無くなるかもしれません。&lt;/p&gt;&lt;p&gt;十分条件が複数出てきたときに&lt;code&gt;AND&lt;/code&gt;関数を使うと、ロジックがとても見やすくなり、修正もしやすくなります。&lt;/p&gt;&lt;p&gt;使い方は、&lt;code&gt;AND(条件1,条件2,条件3,・・・)&lt;/code&gt;で条件が全て満たされていたらTRUEで、それ以外&lt;code&gt;FALSE&lt;/code&gt;です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. OR()&lt;a href=&quot;#8-or&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それに対して&lt;code&gt;OR&lt;/code&gt;関数は、&lt;code&gt;OR(条件1,条件2,条件3,・・・)&lt;/code&gt;で条件が全て満たされていなかったら&lt;code&gt;FALSE&lt;/code&gt;で、それ以外TRUEです。これも地味に役立っています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上になります。ANDとかORは後から関数を修正しやすくなるので、ほんとにオススメです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ネストしまくると分かんなくなるよねぇ。　今度試してみよっ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Excel、Googleスプレッドシート】表や図を作成するスピードを上達させるために気をつけるポイント5選</title><link>https://endorphinbath.com/posts/creating-table-improving/</link><guid isPermaLink="true">https://endorphinbath.com/posts/creating-table-improving/</guid><description>表や図を作成するスピードを向上させるためのポイントを紹介していきます。特にExcelを使っている場合は参考になる情報だと思いますので、よければご一読下さい。</description><pubDate>Tue, 03 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、神Excelで設計書を作りまくっていた僕が、表や図を作成するスピードを向上させるための方法を紹介していきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あいよー。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その1: ショートカットキーを覚える&lt;a href=&quot;#その1-ショートカットキーを覚える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ExcelやGoogleスプレッドシートを使う際にショートカットキーを覚えておくことは、何よりも大事です。2アクション以上必要な操作を1アクションで済ませることが出来ます。&lt;/p&gt;&lt;p&gt;以下のショートカットキーは、表作成において多用する操作ですので、早い内に身に付けておくことで時間を沢山節約できます。以下の一覧は、Windowsをベースに書いているので、Macでは使えないものがあるかもしれません。&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キーの組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;行の追加&lt;/td&gt;&lt;td&gt;Ctrl + Shift + ;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;行の削除&lt;/td&gt;&lt;td&gt;Ctrl + –&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上の行のコピーとペースト&lt;/td&gt;&lt;td&gt;Ctrl + D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;右の行のコピーとペースト&lt;/td&gt;&lt;td&gt;Ctrl + R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;直前の操作を繰り返す&lt;/td&gt;&lt;td&gt;F4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の行を全選択&lt;/td&gt;&lt;td&gt;Shift + space（半角入力時のみ）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の列を全選択&lt;/td&gt;&lt;td&gt;Ctrl + space&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;本日の日付を入力&lt;/td&gt;&lt;td&gt;Ctrl + ;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;特に行の追加は、移動したい行があった際にその行をコピーして、移動先の行に行の追加をすると、行が移動できる操作になっていますので、これを覚えているかいないかはかなり作業速度に差が出ます。&lt;/p&gt;&lt;p&gt;とある行を別の行に移動する作業って、頻度多くないですか？ そんな頻繁に行う作業はショートカットしてしまいましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1882&quot; height=&quot;463&quot; src=&quot;/_astro/01.VD4zjHmB_Z2edSm8.webp&quot; srcset=&quot;/_astro/01.VD4zjHmB_12kosJ.webp 640w, /_astro/01.VD4zjHmB_IfmQE.webp 750w, /_astro/01.VD4zjHmB_ZiTVk9.webp 828w, /_astro/01.VD4zjHmB_ZUINzW.webp 1080w, /_astro/01.VD4zjHmB_Z2eWDN1.webp 1280w, /_astro/01.VD4zjHmB_QuLAe.webp 1668w, /_astro/01.VD4zjHmB_Z2edSm8.webp 1882w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;473&quot; src=&quot;/_astro/02.DQ8PnHcH_ZYsyUD.webp&quot; srcset=&quot;/_astro/02.DQ8PnHcH_SawSB.webp 640w, /_astro/02.DQ8PnHcH_1970RD.webp 750w, /_astro/02.DQ8PnHcH_6VGFP.webp 828w, /_astro/02.DQ8PnHcH_22BIgF.webp 1080w, /_astro/02.DQ8PnHcH_InS3B.webp 1280w, /_astro/02.DQ8PnHcH_1hGcy6.webp 1668w, /_astro/02.DQ8PnHcH_ZYsyUD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、このショートカットキーを身に付けさせるために、毎日知らないショートカットキーを1つ決めて何度も反復して身体に染み込ませましょう。&lt;/p&gt;&lt;p&gt;僕も、学生の時のアルバイト先でExcelを使っていたので、毎回稼働時間の最初にショートカットキーを1つ調べて、それを業務中に反復して身に付けました。&lt;/p&gt;&lt;p&gt;そのため、就職してからはExcelの操作で特に困ったことはありませんでした。継続は力なりです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その2: セル結合は行わない&lt;a href=&quot;#その2-セル結合は行わない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;セル結合は良くないです・・・本当に良くないです・・・。理由は、2つあります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;セルの移動やコピペが出来なくなる。&lt;/li&gt;
&lt;li&gt;表のソートが出来なくなる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;まず、1つ目のセルの移動やコピペが出来なくなる問題は、既にシートの中に書いてある内容を移動するときや、既にある表の罫線を拡張したりなどするときに起きる問題です。&lt;/p&gt;&lt;p&gt;結合セルがあると、「この操作は結合したセルには行えません。」とかいうメッセージが表示されて、ペースト出来ないのです。
&lt;img loading=&quot;lazy&quot; width=&quot;1016&quot; height=&quot;698&quot; src=&quot;/_astro/04.BxJKs9qN_Zn80g6.webp&quot; srcset=&quot;/_astro/04.BxJKs9qN_1Kenvb.webp 640w, /_astro/04.BxJKs9qN_Z3z62p.webp 750w, /_astro/04.BxJKs9qN_18vWpj.webp 828w, /_astro/04.BxJKs9qN_Zn80g6.webp 1016w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、もう一つ、表のソートが出来なくなるというのは、ExcelやGoogleスプレッドシートには一番上の行から表をフィルターおよびソートする機能があります。&lt;/p&gt;&lt;p&gt;しかし、そのソートおよびフィルターの便利機能も結合されているセルがあると、利用できなくなるのです。結合セルがあると、この場合は「この操作を行うには、すべての結合セルを同じ大きさにする必要があります。」が表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1085&quot; height=&quot;696&quot; src=&quot;/_astro/05.BiUASlvY_1Xvzb2.webp&quot; srcset=&quot;/_astro/05.BiUASlvY_Z2gym95.webp 640w, /_astro/05.BiUASlvY_1lezUo.webp 750w, /_astro/05.BiUASlvY_2gVI55.webp 828w, /_astro/05.BiUASlvY_ZyHHI1.webp 1080w, /_astro/05.BiUASlvY_1Xvzb2.webp 1085w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのため、セル結合は使わずに、使いたくなる状況では見栄えを整えるために、以下の手段を講じます。&lt;/p&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ケース&lt;/th&gt;&lt;th&gt;整形の手段&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;横のセルと結合したくなったら・・・&lt;/td&gt;&lt;td&gt;・まとめたいセルを複数選択して、右クリック＞「セルの書式設定」＞「配置」タブ＞「横位置」を「選択範囲内で中央」を選択してOK。（Googleスプレッドシートでは出来ない。）・内容は1つのセルのみに書いて、罫線は外枠のみ表示させる。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;縦のセルと結合したくなったら・・・&lt;/td&gt;&lt;td&gt;・同じ内容を個々のセルに書く。・内容は1つのセルのみに書いて、罫線は外枠のみ表示させる。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;まとめたいセルを複数選択して、右クリック＞「セルの書式設定」＞「配置」タブ＞「横位置」を「選択範囲内で中央」を選択してOK。
&lt;img loading=&quot;lazy&quot; width=&quot;1019&quot; height=&quot;170&quot; src=&quot;/_astro/06.CSB5Sztf_1qwQgM.webp&quot; srcset=&quot;/_astro/06.CSB5Sztf_2tO7pp.webp 640w, /_astro/06.CSB5Sztf_ZmhV6Q.webp 750w, /_astro/06.CSB5Sztf_1p5LS8.webp 828w, /_astro/06.CSB5Sztf_1qwQgM.webp 1019w&quot; /&gt;&lt;/p&gt;&lt;p&gt;横のセルと結合したくなった際に、内容は1つのセルのみに書いて、罫線は外枠のみ表示させる。&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1039&quot; height=&quot;184&quot; src=&quot;/_astro/07.mtG4FylN_Z10nbQO.webp&quot; srcset=&quot;/_astro/07.mtG4FylN_1TRNRN.webp 640w, /_astro/07.mtG4FylN_Z25heOG.webp 750w, /_astro/07.mtG4FylN_ZRU1pO.webp 828w, /_astro/07.mtG4FylN_Z10nbQO.webp 1039w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同じ内容を個々のセルに書く。
&lt;img loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;230&quot; src=&quot;/_astro/08.1_yu0b_F_2gjsDi.webp&quot; srcset=&quot;/_astro/08.1_yu0b_F_1QRzPo.webp 640w, /_astro/08.1_yu0b_F_VdivM.webp 750w, /_astro/08.1_yu0b_F_ZYDgMc.webp 828w, /_astro/08.1_yu0b_F_2gjsDi.webp 883w&quot; /&gt;&lt;/p&gt;&lt;p&gt;縦のセルと結合したくなった際に、内容は1つのセルのみに書いて、罫線は外枠のみ表示させる。
&lt;img loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;217&quot; src=&quot;/_astro/07.CdOWeXsY_ScY4Y.webp&quot; srcset=&quot;/_astro/07.CdOWeXsY_2pTX2f.webp 640w, /_astro/07.CdOWeXsY_Z1H1Hbq.webp 750w, /_astro/07.CdOWeXsY_1iqnuS.webp 828w, /_astro/07.CdOWeXsY_ScY4Y.webp 870w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その3: 使用していないシートやページは閉じておく&lt;a href=&quot;#その3-使用していないシートやページは閉じておく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;業務開始から2、3時間位経過すると、Excelのブックが沢山開いていたり、Webブラウザのタブが沢山開かれていたりしていませんか？&lt;/p&gt;&lt;p&gt;使用していないブックやタブは閉じるようにしましょう。編集するシートが大きいと、1つの操作にラグが発生して、快適に編集作業が行なえません。&lt;/p&gt;&lt;p&gt;例えば、1万行くらいのデータが入ったシートを操作する際に、他のたくさんのブックが常駐しているとシートの反応がかなり遅くなります・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その4: 図形はグループ化する&lt;a href=&quot;#その4-図形はグループ化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;図形をグループ化することによって、その図形の範囲を一気に移動およびコピーが出来ます。&lt;/p&gt;&lt;p&gt;グループ化した図形の形状やテキストを編集することも出来ます。&lt;/p&gt;&lt;p&gt;そして、画像と図形もグループ化することが出来ますので、作業効率化のために覚えておくべき機能であります。&lt;/p&gt;&lt;p&gt;こちらは、グループ化する前の図形の状態です。これらの図形を複数選択して・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;598&quot; src=&quot;/_astro/10.CyzUrcNY_ZtnsmP.webp&quot; srcset=&quot;/_astro/10.CyzUrcNY_10xxuX.webp 640w, /_astro/10.CyzUrcNY_Z1Cdsbs.webp 750w, /_astro/10.CyzUrcNY_272Ha1.webp 828w, /_astro/10.CyzUrcNY_ZtnsmP.webp 1060w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グループ化すると、その範囲を選択した際にこのようにハイライトされます。
&lt;img loading=&quot;lazy&quot; width=&quot;881&quot; height=&quot;616&quot; src=&quot;/_astro/11.BKjP96Ug_mDpsr.webp&quot; srcset=&quot;/_astro/11.BKjP96Ug_1DeW3P.webp 640w, /_astro/11.BKjP96Ug_SEzYp.webp 750w, /_astro/11.BKjP96Ug_ZhDm2O.webp 828w, /_astro/11.BKjP96Ug_mDpsr.webp 881w&quot; /&gt;&lt;/p&gt;&lt;p&gt;グループ化された状態の図形は一気に移動することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1342&quot; height=&quot;622&quot; src=&quot;/_astro/12.CQc3RRt9_Z1rE759.webp&quot; srcset=&quot;/_astro/12.CQc3RRt9_Z125Jos.webp 640w, /_astro/12.CQc3RRt9_ZxF8B1.webp 750w, /_astro/12.CQc3RRt9_Z2nBf9u.webp 828w, /_astro/12.CQc3RRt9_1Id4Hx.webp 1080w, /_astro/12.CQc3RRt9_XGBmN.webp 1280w, /_astro/12.CQc3RRt9_Z1rE759.webp 1342w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その5: 図形と図形を繋ぐ時はアンカーポイントを使う&lt;a href=&quot;#その5-図形と図形を繋ぐ時はアンカーポイントを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;繋がれた状態の図形を編集するときに、アンカーポイントが利用された状態だと、とても編集がしやすくなります。&lt;/p&gt;&lt;p&gt;例えば、左の状態の図形から右の状態に編集したい場合に、アンカーポイントを利用していると、矢印の形状を変えやすくなりますし、間に図形を追加するのも楽になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1580&quot; height=&quot;629&quot; src=&quot;/_astro/05.CPHHfxUB_Z19TPnl.webp&quot; srcset=&quot;/_astro/05.CPHHfxUB_spW8w.webp 640w, /_astro/05.CPHHfxUB_ZJL364.webp 750w, /_astro/05.CPHHfxUB_Z2h4zls.webp 828w, /_astro/05.CPHHfxUB_IDCvj.webp 1080w, /_astro/05.CPHHfxUB_ZFN2AI.webp 1280w, /_astro/05.CPHHfxUB_Z19TPnl.webp 1580w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アンカーポイントで繋がれると、このように緑のポイントが表示されます。ぜひ使っていきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;591&quot; src=&quot;/_astro/06.CTOa1H9P_Z1IrDsF.webp&quot; srcset=&quot;/_astro/06.CTOa1H9P_K8MAQ.webp 640w, /_astro/06.CTOa1H9P_2suG2p.webp 750w, /_astro/06.CTOa1H9P_Z1Gvjz.webp 828w, /_astro/06.CTOa1H9P_Z1IrDsF.webp 990w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は作業スピードアップに寄与する事柄を紹介しました。ぜひ使ってみて、さっさと仕事を終わらせて定時前に帰ってしまいましょう！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;仕事だるいもんなあ〜。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS】まとめ：Google Apps Scriptのスクリプトエディタで使用できるショートカットキー（Mac版）</title><link>https://endorphinbath.com/posts/gas-shortcutkey-for-script-editor-mac/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-shortcutkey-for-script-editor-mac/</guid><description>Google Apps Scriptのスクリプトエディタで使用できるショートカットキーをまとめました。このショートカットキーで作業を効率化してみて下さい。Mac版です。</description><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Google Apps Scriptのエディタで利用できるショートカットキーを一覧で紹介するぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、まだ知らなくて使ってないショートカットキーとかあるかもだしねぇ〜。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ショートカットキー一覧&lt;a href=&quot;#ショートカットキー一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、ショートカットキーの一覧となります。
簡単に3種類に分類しています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;一般的なPC操作と同様の操作のショートカットキー&lt;a href=&quot;#一般的なpc操作と同様の操作のショートカットキー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;戻る&lt;/td&gt;&lt;td&gt;command(⌘) + Z&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カット&lt;/td&gt;&lt;td&gt;command(⌘) + X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コピー&lt;/td&gt;&lt;td&gt;command(⌘) + C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ペースト&lt;/td&gt;&lt;td&gt;command(⌘) + V&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;全選択&lt;/td&gt;&lt;td&gt;command(⌘) + A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;やり直し&lt;/td&gt;&lt;td&gt;command(⌘) + Shift(⇧) + Z&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Visual Studio Codeでも見られるショートカットキー&lt;a href=&quot;#visual-studio-codeでも見られるショートカットキー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;スクリプトの保存&lt;/td&gt;&lt;td&gt;control(⌃) + S、command(⌘) + S&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字カーソルを指定行に移動&lt;/td&gt;&lt;td&gt;control(⌃) + G&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;改行&lt;/td&gt;&lt;td&gt;control(⌃) + O&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;検索および置換&lt;/td&gt;&lt;td&gt;command(⌘) + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の文字列と同じ文字列を複数選択&lt;/td&gt;&lt;td&gt;command(⌘) + D&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コメント&lt;/td&gt;&lt;td&gt;command(⌘) + /&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択行にインデントを１段階追加&lt;/td&gt;&lt;td&gt;tab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択行にインデントを１段階削除&lt;/td&gt;&lt;td&gt;Shift(⇧) + tab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の行の記述を上下に移動&lt;/td&gt;&lt;td&gt;option(⌥) + ↑ か ↓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;単語ごとに右方に移動&lt;/td&gt;&lt;td&gt;option(⌥) + →、option(⌥) + control⌃) + F&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;単語ごとに左方に移動&lt;/td&gt;&lt;td&gt;option(⌥) + ←、option(⌥) + control⌃) + B&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の文字列を/* */形式でコメントアウト&lt;/td&gt;&lt;td&gt;option(⌥) + Shift(⇧) + A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Apps Scriptエディタで見られるショートカットキー&lt;a href=&quot;#google-apps-scriptエディタで見られるショートカットキー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作の内容&lt;/th&gt;&lt;th&gt;キー組み合わせ&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ログの表示&lt;/td&gt;&lt;td&gt;control(⌃) + Enter&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;選択中の関数を実行&lt;/td&gt;&lt;td&gt;control(⌃) + R、command(⌘) + R&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;文字カーソルより右方にある文字を改行コード含め削除&lt;/td&gt;&lt;td&gt;control(⌃) + J&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;モジュールの予測表示&lt;/td&gt;&lt;td&gt;command(⌘) + I&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オブジェクトの定義に移動&lt;/td&gt;&lt;td&gt;command(⌘) + F12&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;式や演算子の周りに空白を入れる（ex. “for(a=b){}” → “for (a = b) {}”）&lt;/td&gt;&lt;td&gt;option(⌥) + Shift(⇧) + F&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上になります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;command(⌘) + F12でオブジェクトの定義に移動できるのは便利だね。でも、違うファイルのオブジェクトは参照できないのが少し惜しいね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年4月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202204/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202204/</guid><description>2022年4月に読んだ本になります。「投資で一番大切な20の教え 賢い投資家になるための隠れた常識」や「フランス人は10着しか服を持たない~パリで学んだ“暮らしの質”を高める秘訣~」など、思考を単純化するための本が多かった気がします。</description><pubDate>Sun, 01 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;4月の読書メーター&lt;a href=&quot;#4月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：7&lt;/li&gt;
&lt;li&gt;読んだページ数：2259&lt;/li&gt;
&lt;li&gt;ナイス数：7&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;アメリカの中学生が学んでいる 14歳からのプログラミング の 感想&lt;a href=&quot;#アメリカの中学生が学んでいる-14歳からのプログラミング-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;アメリカの中学生が学んでいる 14歳からのプログラミング&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/01.DvrgVS44_nFXaL.webp&quot; srcset=&quot;/_astro/01.DvrgVS44_nFXaL.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;最初に初歩的なプログラミングの基礎が書いてあり、次にScratchを使って実学させる流れである。後半からは、Python,HTML,CSSの解説があり、基本の「き」な文法の紹介がなされる。&lt;/p&gt;&lt;p&gt;プログラミング自体初心者でなければ大体飛ばし読みできるかと思いますが、僕はプログラミングをあまり体系的に学ばない人なので、本書で知識の抜け漏れを補填することが出来ました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月27日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%9E%E3%83%B3%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0&quot; target=&quot;_blank&quot;&gt;ワークマンパブリッシング&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;投資で一番大切な20の教え　賢い投資家になるための隠れた常識 の 感想&lt;a href=&quot;#投資で一番大切な20の教え賢い投資家になるための隠れた常識-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;投資で一番大切な20の教え　賢い投資家になるための隠れた常識&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/02.BwRNjXcS_1zshqH.webp&quot; srcset=&quot;/_astro/02.BwRNjXcS_1zshqH.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;この書籍に書いてあることは、ほとんど的を射ていると思います。市場に理路整然さはあまり無いこと、銘柄が今のタイミングで割安か割高か、ポートフォリオのリスク許容度の管理など、大事なことばかりです。現在の経済は、ちょうど転換点に当たるタイミングだと思いますので、本書籍の内容を参考に、自らの洞察によってポートフォリオの見直しを試してみるといいかなと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月21日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%8F%E3%83%AF%E3%83%BC%E3%83%89%E3%83%BB%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%B9&quot; target=&quot;_blank&quot;&gt;ハワード・マークス&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Clean Architecture　達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ) の 感想&lt;a href=&quot;#clean-architecture達人に学ぶソフトウェアの構造と設計-アスキードワンゴ-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Clean Architecture　達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)&quot; loading=&quot;lazy&quot; width=&quot;57&quot; height=&quot;75&quot; src=&quot;/_astro/03.rK3_KYEP_zqL53.webp&quot; srcset=&quot;/_astro/03.rK3_KYEP_zqL53.webp 57w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;ものすごいタメになる本だと思うのだが、現在の自分のレベルではとても受け止めきれるものではなかった。そのため、とりあえず大事だと思ったところをメモるくらいしか出来なかった。&lt;/p&gt;&lt;p&gt;依存関係の流れ、ルールの配置場所への配慮や、開発時期によってコンポーネントの凝集性を変えたほうが良いことなどは、一旦、自分の中に落とし込めた。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月18日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%EF%BC%B2%EF%BD%8F%EF%BD%82%EF%BD%85%EF%BD%92%EF%BD%94+%EF%BC%A3%EF%BC%8E%EF%BC%AD%EF%BD%81%EF%BD%92%EF%BD%94%EF%BD%89%EF%BD%8E%2C%E8%A7%92+%E5%BE%81%E5%85%B8%2C%E9%AB%98%E6%9C%A8+%E6%AD%A3%E5%BC%98&quot; target=&quot;_blank&quot;&gt;Robert C. Martin,角 征典,高木 正弘&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;思考法図鑑 ひらめきを生む問題解決・アイデア発想のアプローチ60 の 感想&lt;a href=&quot;#思考法図鑑-ひらめきを生む問題解決アイデア発想のアプローチ60-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;思考法図鑑 ひらめきを生む問題解決・アイデア発想のアプローチ60&quot; loading=&quot;lazy&quot; width=&quot;65&quot; height=&quot;75&quot; src=&quot;/_astro/04.CCmI-H22_Z1IUUdm.webp&quot; srcset=&quot;/_astro/04.CCmI-H22_Z1IUUdm.webp 65w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;内容的には、思考するために利用できるフレームワークが50個くらい紹介されていた。&lt;/p&gt;&lt;p&gt;ざっと読んだ所感としては、被っている思考法もありそうでした。また、思考の土台は、ロジカル・シンキング、クリティカル・シンキング、MECEなので、そこを外さないことが重要だと思いました。&lt;/p&gt;&lt;p&gt;そのため、それらの土台の思考法以外は、知識程度に知っている程度に本書を読み進めれば良いかなと思います。実際にその思考法を使うことになったら、詳しく読むという流れになるのかなと思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月15日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%A2%E3%83%B3%E3%83%89&quot; target=&quot;_blank&quot;&gt;株式会社アンド&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フランス人は10着しか服を持たない～パリで学んだ”暮らしの質”を高める秘訣～ の 感想&lt;a href=&quot;#フランス人は10着しか服を持たないパリで学んだ暮らしの質を高める秘訣-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;フランス人は10着しか服を持たない～パリで学んだ&amp;quot;暮らしの質&amp;quot;を高める秘訣～&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/05.P80Yj2qt_2c7Ui1.webp&quot; srcset=&quot;/_astro/05.P80Yj2qt_2c7Ui1.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;ざっと内容をまとめると、本当に必要なものだけを持って、本当に必要なことだけ話す、ということになるかと思います。洗練された人間になろうということだと思います。&lt;/p&gt;&lt;p&gt;僕は今、なんとか服の量を減らせないかレパートリーを考えています。一旦、長袖のTシャツを無くして、服の種類を減らそうと考えています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月15日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B8%E3%82%A7%E3%83%8B%E3%83%95%E3%82%A1%E3%83%BC%E3%83%BBL%E3%83%BB%E3%82%B9%E3%82%B3%E3%83%83%E3%83%88&quot; target=&quot;_blank&quot;&gt;ジェニファー・L・スコット&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マンガでわかるJavaScriptのPromise マンガでわかるプログラミング の 感想&lt;a href=&quot;#マンガでわかるjavascriptのpromise-マンガでわかるプログラミング-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;マンガでわかるJavaScriptのPromise マンガでわかるプログラミング&quot; loading=&quot;lazy&quot; width=&quot;47&quot; height=&quot;75&quot; src=&quot;/_astro/06.Bdc2gBG0_pEdkq.webp&quot; srcset=&quot;/_astro/06.Bdc2gBG0_pEdkq.webp 47w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;内容的には、JavaScriptの非同期処理をコールバック地獄からawaitまでを解説している。まだまだ理解が浅い自分にとって分かりやすかった。&lt;/p&gt;&lt;p&gt;以前よりも、非同期処理への理解が深まったと思うので、今度自分が書いたPromise.all内の処理を関数にしてみたいと思う。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E6%9F%B3%E4%BA%95+%E6%94%BF%E5%92%8C&quot; target=&quot;_blank&quot;&gt;柳井 政和&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シリコンバレー式超ライフハック の 感想&lt;a href=&quot;#シリコンバレー式超ライフハック-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;シリコンバレー式超ライフハック&quot; loading=&quot;lazy&quot; width=&quot;47&quot; height=&quot;75&quot; src=&quot;/_astro/07.BQYvPlcD_9xBQE.webp&quot; srcset=&quot;/_astro/07.BQYvPlcD_9xBQE.webp 47w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;数多ある自己啓発本の中でかなり的を射ていてためになる一冊だと感じました。&lt;/p&gt;&lt;p&gt;ミトコンドリアを持つ生物は、恐怖からの回避、食欲の充足および種の存続の３つの本能が根底にある。&lt;/p&gt;&lt;p&gt;その前提で色々な事柄が書いてありました。そして、僕が最も意識していこうと思ったのは、自分の日常的な呼吸を意識することです。&lt;/p&gt;&lt;p&gt;本書では、ヨガ・瞑想がイチオシされていますが、まず日常で今自分が鼻呼吸・口呼吸のどちらを行っているかを意識して、感覚や健康を増進させたいと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：04月12日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%87%E3%82%A4%E3%83%B4%E3%83%BB%E3%82%A2%E3%82%B9%E3%83%97%E3%83%AA%E3%83%BC&quot; target=&quot;_blank&quot;&gt;デイヴ・アスプリー&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、7冊か。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回の記事は、この記事で紹介したツールの試験導入的な位置付けで投稿した記事になります！ 良ければ、このツールの記事も見てみてください！ どういうレイアウトを自動的に修正したかを紹介しています。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-manipulating-html-from-book-meter/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】読書メーターからブログ用に取得したHTMLをキレイに表示するように整形する（Beautiful Soupを使用）&lt;/div&gt;&lt;div&gt;読書メーターから取得したHTMLをブログで見栄え良く見せるために、PythonでBeautiful Soupを使って編集したので、その編集過程を紹介します。HTMLの入手方法も併せて紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220202_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Googleスプレッドシート】Excelとの操作感などの違いを比較する</title><link>https://endorphinbath.com/posts/gss-comparison-to-excel/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gss-comparison-to-excel/</guid><description>ExcelとGoogleスプレッドシートでそれぞれ出来ることを比較して、どちらがどの観点で使いやすいのかを紹介していきます。それぞれ想定されている用途が異なるので、自分の目的にどちらの方が合っているのかをご検討下さい。</description><pubDate>Sat, 30 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、ExcelとGoogleスプレッドシートでそれぞれ出来ることを比較して、どちらがどの観点で使いやすいのかを紹介していきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お願いしまあす。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ExcelとGoogleスプレッドシートの比較&lt;a href=&quot;#excelとgoogleスプレッドシートの比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらが、ExcelとGoogleスプレッドシートの比較になります。&lt;/p&gt;&lt;p&gt;ExcelとGoogle Spreadsheetはスプレッドシートとしては同じようなツールになりますが、基本的な使い方というか焦点を当てている用途が違うので、以下のように機能に差があります。&lt;/p&gt;







































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;比較項目&lt;/th&gt;&lt;th&gt;Excel&lt;/th&gt;&lt;th&gt;Google Spreadsheet&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;行の挿入が一発で出来るかどうか&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;図の描きやすさ&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;表の整形しやすさ&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;データの可視化のしやすさ&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;処理の拡張のしやすさ&lt;/td&gt;&lt;td&gt;△&lt;/td&gt;&lt;td&gt;◎&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;共有編集のしやすさ&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その1 行の挿入が一発で出来るかどうか&lt;a href=&quot;#その1-行の挿入が一発で出来るかどうか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「行の挿入」というのは、行をコピーしてその行を別の行に挿入する操作のことを指しています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Excelの場合&lt;a href=&quot;#excelの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この操作は、神Excelで資料を作る際に、とても役に立つ操作になります。この何回も行われる操作を一発で行えると、操作の手数がかなり減ります。&lt;/p&gt;&lt;p&gt;この行を、
&lt;img loading=&quot;lazy&quot; width=&quot;1882&quot; height=&quot;463&quot; src=&quot;/_astro/01.VD4zjHmB_Z2edSm8.webp&quot; srcset=&quot;/_astro/01.VD4zjHmB_12kosJ.webp 640w, /_astro/01.VD4zjHmB_IfmQE.webp 750w, /_astro/01.VD4zjHmB_ZiTVk9.webp 828w, /_astro/01.VD4zjHmB_ZUINzW.webp 1080w, /_astro/01.VD4zjHmB_Z2eWDN1.webp 1280w, /_astro/01.VD4zjHmB_QuLAe.webp 1668w, /_astro/01.VD4zjHmB_Z2edSm8.webp 1882w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらの行に持ってくるのを一発で出来る。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;473&quot; src=&quot;/_astro/02.DQ8PnHcH_ZYsyUD.webp&quot; srcset=&quot;/_astro/02.DQ8PnHcH_SawSB.webp 640w, /_astro/02.DQ8PnHcH_1970RD.webp 750w, /_astro/02.DQ8PnHcH_6VGFP.webp 828w, /_astro/02.DQ8PnHcH_22BIgF.webp 1080w, /_astro/02.DQ8PnHcH_InS3B.webp 1280w, /_astro/02.DQ8PnHcH_1hGcy6.webp 1668w, /_astro/02.DQ8PnHcH_ZYsyUD.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートの場合&lt;a href=&quot;#googleスプレッドシートの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかし、Googleスプレッドシートだと、切り取りもしくはコピーしても・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;656&quot; src=&quot;/_astro/03.uFwggt7s_Z1MGBGm.webp&quot; srcset=&quot;/_astro/03.uFwggt7s_uBwjO.webp 640w, /_astro/03.uFwggt7s_bwuHJ.webp 750w, /_astro/03.uFwggt7s_Z1pEj4b.webp 828w, /_astro/03.uFwggt7s_Z2iGxBK.webp 1080w, /_astro/03.uFwggt7s_1qFLge.webp 1280w, /_astro/03.uFwggt7s_1YHUNz.webp 1668w, /_astro/03.uFwggt7s_1IsEBB.webp 2048w, /_astro/03.uFwggt7s_Z1MGBGm.webp 2536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;切り取りもしくはコピーした範囲を挿入する機能がないので、行を右クリックしても挿入できません。
&lt;img loading=&quot;lazy&quot; width=&quot;2720&quot; height=&quot;1132&quot; src=&quot;/_astro/04.C8BNdd4a_1BqXfj.webp&quot; srcset=&quot;/_astro/04.C8BNdd4a_UrjP8.webp 640w, /_astro/04.C8BNdd4a_18tLi4.webp 750w, /_astro/04.C8BNdd4a_1Yy3gF.webp 828w, /_astro/04.C8BNdd4a_2jh0d.webp 1080w, /_astro/04.C8BNdd4a_1xfL3C.webp 1280w, /_astro/04.C8BNdd4a_Z2rbCKV.webp 1668w, /_astro/04.C8BNdd4a_Z16z8tT.webp 2048w, /_astro/04.C8BNdd4a_MHsf2.webp 2560w, /_astro/04.C8BNdd4a_1BqXfj.webp 2720w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その2 図の描きやすさ&lt;a href=&quot;#その2-図の描きやすさ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、「図」の描きやすさを比較します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Excelの場合&lt;a href=&quot;#excelの場合-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この「図」というのは、神Excelでよく作成されるフロー図とかの説明資料を指します。&lt;/p&gt;&lt;p&gt;並べた図形をグループ化したり、
&lt;img loading=&quot;lazy&quot; width=&quot;1580&quot; height=&quot;629&quot; src=&quot;/_astro/05.CPHHfxUB_Z19TPnl.webp&quot; srcset=&quot;/_astro/05.CPHHfxUB_spW8w.webp 640w, /_astro/05.CPHHfxUB_ZJL364.webp 750w, /_astro/05.CPHHfxUB_Z2h4zls.webp 828w, /_astro/05.CPHHfxUB_IDCvj.webp 1080w, /_astro/05.CPHHfxUB_ZFN2AI.webp 1280w, /_astro/05.CPHHfxUB_Z19TPnl.webp 1580w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アンカーポイントを使って編集したり、
&lt;img loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;591&quot; src=&quot;/_astro/06.CTOa1H9P_Z1IrDsF.webp&quot; srcset=&quot;/_astro/06.CTOa1H9P_K8MAQ.webp 640w, /_astro/06.CTOa1H9P_2suG2p.webp 750w, /_astro/06.CTOa1H9P_Z1Gvjz.webp 828w, /_astro/06.CTOa1H9P_Z1IrDsF.webp 990w&quot; /&gt;&lt;/p&gt;&lt;p&gt;表のビフォーアフターをExcel内で表現したり、図や表作成はかなり自由自在です。&lt;/p&gt;&lt;p&gt;さすが、神Excelと呼ばれるだけはあります。こうした説明資料を作成手段として、Excelはとても有用なツールです。
&lt;img loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;217&quot; src=&quot;/_astro/07.CdOWeXsY_ScY4Y.webp&quot; srcset=&quot;/_astro/07.CdOWeXsY_2pTX2f.webp 640w, /_astro/07.CdOWeXsY_Z1H1Hbq.webp 750w, /_astro/07.CdOWeXsY_1iqnuS.webp 828w, /_astro/07.CdOWeXsY_ScY4Y.webp 870w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートの場合&lt;a href=&quot;#googleスプレッドシートの場合-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Googleスプレッドシートは、このような図の描画はあまり得意ではありません。&lt;/p&gt;&lt;p&gt;一応、「挿入」＞「図形描画」から図形を描けるのですが、図形を編集する度に「図形描画」ポップアップを表示して編集しなければならないため、Excelより操作性や柔軟性は低いです。&lt;/p&gt;&lt;p&gt;なので、僕は、Googleスプレッドシートの図形を主にスクリプトの実行ボタンとしてしか利用しないですね・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2796&quot; height=&quot;1460&quot; src=&quot;/_astro/08.CDVlFAr-_2gBhOS.webp&quot; srcset=&quot;/_astro/08.CDVlFAr-_Z3dJwq.webp 640w, /_astro/08.CDVlFAr-_OJTGN.webp 750w, /_astro/08.CDVlFAr-_Z1AfzhQ.webp 828w, /_astro/08.CDVlFAr-_bGQlF.webp 1080w, /_astro/08.CDVlFAr-_Z2dDyD1.webp 1280w, /_astro/08.CDVlFAr-_2vzUs0.webp 1668w, /_astro/08.CDVlFAr-_ZIUrPH.webp 2048w, /_astro/08.CDVlFAr-_2fxsjJ.webp 2560w, /_astro/08.CDVlFAr-_2gBhOS.webp 2796w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その3 表の整形しやすさ&lt;a href=&quot;#その3-表の整形しやすさ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;表の整形しやすさというのは、決して「セル結合ができる」というものではなく、セルのテキストを中央揃えする機能などのことを指します。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;機能&lt;/th&gt;&lt;th&gt;Excel&lt;/th&gt;&lt;th&gt;Google Spreadsheet&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;セルのテキストを選択範囲内で中央揃えに出来る&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;複数の列でソートできる&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;複数の列でフィルターできる&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h3&gt;Excelの場合&lt;a href=&quot;#excelの場合-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Excelでは、セルのテキストを選択範囲内で中央揃えに出来ます。&lt;/p&gt;&lt;p&gt;以下の画像は、左がセル結合を使った表で、右が選択範囲内で中央揃え（右クリック＞「セルの書式設定」＞「配置」タブ＞「横位置」を「選択範囲内で中央」を選択）を行った表になります。&lt;/p&gt;&lt;p&gt;あの憎むべきセル結合を行わなくても、表示としてはほとんど相違ありません。
&lt;img loading=&quot;lazy&quot; width=&quot;1019&quot; height=&quot;170&quot; src=&quot;/_astro/06.CSB5Sztf_1qwQgM.webp&quot; srcset=&quot;/_astro/06.CSB5Sztf_2tO7pp.webp 640w, /_astro/06.CSB5Sztf_ZmhV6Q.webp 750w, /_astro/06.CSB5Sztf_1p5LS8.webp 828w, /_astro/06.CSB5Sztf_1qwQgM.webp 1019w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、列を使ったソートおよびフィルターは、1つの列しかキーに出来ません。なぜなら、Excelでは表のソート状態を保持する仕様となっているためです。そのため、その点にて表の整形がしにくいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートの場合（ソートの場合）&lt;a href=&quot;#googleスプレッドシートの場合ソートの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Spreadsheetでは、ソートの状態を保持する仕様はなく一度ソートしたらそれっきりですので、ソートする前に順番をどこかの列に保持しておくことでソート前の状態に戻すことが可能です。&lt;/p&gt;&lt;p&gt;そして、その仕様のため、複数の列でソートする操作を事実上行うことが出来ます。&lt;/p&gt;&lt;p&gt;この状態の表がある場合・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1588&quot; height=&quot;264&quot; src=&quot;/_astro/10.CTT0TrUQ_Z2pInm7.webp&quot; srcset=&quot;/_astro/10.CTT0TrUQ_Z2rK6Ol.webp 640w, /_astro/10.CTT0TrUQ_ZMGw7M.webp 750w, /_astro/10.CTT0TrUQ_XGbRc.webp 828w, /_astro/10.CTT0TrUQ_UlVyt.webp 1080w, /_astro/10.CTT0TrUQ_Zk1wjW.webp 1280w, /_astro/10.CTT0TrUQ_Z2pInm7.webp 1588w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、「a」列でソートします。
&lt;img loading=&quot;lazy&quot; width=&quot;1460&quot; height=&quot;264&quot; src=&quot;/_astro/11.mmi9Tzgh_5GQWf.webp&quot; srcset=&quot;/_astro/11.mmi9Tzgh_Z1UCVB0.webp 640w, /_astro/11.mmi9Tzgh_ZPAQuy.webp 750w, /_astro/11.mmi9Tzgh_Z1wlRSe.webp 828w, /_astro/11.mmi9Tzgh_Zy1yWy.webp 1080w, /_astro/11.mmi9Tzgh_Z1P01yR.webp 1280w, /_astro/11.mmi9Tzgh_5GQWf.webp 1460w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「b」列でソートすると、また違う順番になるので表のソートが自由自在です。
&lt;img loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;240&quot; src=&quot;/_astro/12.Dzrl2JLs_Z1np1Kt.webp&quot; srcset=&quot;/_astro/12.Dzrl2JLs_ZEKKUF.webp 640w, /_astro/12.Dzrl2JLs_1yjjm0.webp 750w, /_astro/12.Dzrl2JLs_Z1asAQP.webp 828w, /_astro/12.Dzrl2JLs_opW3U.webp 1080w, /_astro/12.Dzrl2JLs_1GcA4f.webp 1280w, /_astro/12.Dzrl2JLs_Z1np1Kt.webp 1492w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートの場合（フィルターの場合）&lt;a href=&quot;#googleスプレッドシートの場合フィルターの場合&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、Google Spreadsheetのフィルターは、複数の列をキーにして行うことが出来ます。&lt;/p&gt;&lt;p&gt;例えば、以下のような状態で・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;240&quot; src=&quot;/_astro/12.Dzrl2JLs_Z1np1Kt.webp&quot; srcset=&quot;/_astro/12.Dzrl2JLs_ZEKKUF.webp 640w, /_astro/12.Dzrl2JLs_1yjjm0.webp 750w, /_astro/12.Dzrl2JLs_Z1asAQP.webp 828w, /_astro/12.Dzrl2JLs_opW3U.webp 1080w, /_astro/12.Dzrl2JLs_1GcA4f.webp 1280w, /_astro/12.Dzrl2JLs_Z1np1Kt.webp 1492w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「a」列で「2022/05/01」の値だけを表示させるようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;1618&quot; height=&quot;808&quot; src=&quot;/_astro/14.CHNX6mEB_28LSTn.webp&quot; srcset=&quot;/_astro/14.CHNX6mEB_ZezXXr.webp 640w, /_astro/14.CHNX6mEB_vdx72.webp 750w, /_astro/14.CHNX6mEB_2VDwL.webp 828w, /_astro/14.CHNX6mEB_1CXSoP.webp 1080w, /_astro/14.CHNX6mEB_9pG11.webp 1280w, /_astro/14.CHNX6mEB_28LSTn.webp 1618w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「2022/05/01」の値だけ表示されました。
&lt;img loading=&quot;lazy&quot; width=&quot;1398&quot; height=&quot;242&quot; src=&quot;/_astro/15.B7elwIyK_VonKX.webp&quot; srcset=&quot;/_astro/15.B7elwIyK_Zjbj4o.webp 640w, /_astro/15.B7elwIyK_1kRgCa.webp 750w, /_astro/15.B7elwIyK_Z1WV9bM.webp 828w, /_astro/15.B7elwIyK_Z1lnrQd.webp 1080w, /_astro/15.B7elwIyK_Z5bMyL.webp 1280w, /_astro/15.B7elwIyK_VonKX.webp 1398w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「b」列を「99」だけ表示されるように設定すると、「a」列が「2022/05/01」だけ表示する設定も併せて表が整形されました。&lt;/p&gt;&lt;p&gt;Google Spreadsheetの表のソートおよびフィルター機能は本当に便利です・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1386&quot; height=&quot;192&quot; src=&quot;/_astro/16.DT0j_RMU_Z29V0If.webp&quot; srcset=&quot;/_astro/16.DT0j_RMU_Z1KFR8f.webp 640w, /_astro/16.DT0j_RMU_Z1tMRK3.webp 750w, /_astro/16.DT0j_RMU_1qCPqa.webp 828w, /_astro/16.DT0j_RMU_Z65eWj.webp 1080w, /_astro/16.DT0j_RMU_ZBy3Le.webp 1280w, /_astro/16.DT0j_RMU_Z29V0If.webp 1386w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その4 データの可視化のしやすさ&lt;a href=&quot;#その4-データの可視化のしやすさ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;データの可視化に関して、ExcelとGoogleスプレッドシートでは色々と異なる点があります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Googleスプレッドシートだけにある機能&lt;a href=&quot;#googleスプレッドシートだけにある機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Googleスプレッドシートには、「データ探索」という機能があり、グラフを使わなくても簡単な集計であれば、その機能で表示してくれます。&lt;/p&gt;&lt;p&gt;右下のアイコンをクリックすると、「データ探索」機能を利用できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2916&quot; height=&quot;1500&quot; src=&quot;/_astro/17.1oDO9UcD_Z1VTH2N.webp&quot; srcset=&quot;/_astro/17.1oDO9UcD_Z25aYiw.webp 640w, /_astro/17.1oDO9UcD_1kWLOs.webp 750w, /_astro/17.1oDO9UcD_Z152Hac.webp 828w, /_astro/17.1oDO9UcD_QJW3Y.webp 1080w, /_astro/17.1oDO9UcD_Z1ttVDU.webp 1280w, /_astro/17.1oDO9UcD_Z11af4o.webp 1668w, /_astro/17.1oDO9UcD_cxJWK.webp 2048w, /_astro/17.1oDO9UcD_1ugda4.webp 2560w, /_astro/17.1oDO9UcD_Z1VTH2N.webp 2916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2888&quot; height=&quot;1470&quot; src=&quot;/_astro/18.DfkRvCne_2mBNOP.webp&quot; srcset=&quot;/_astro/18.DfkRvCne_Zb4bEA.webp 640w, /_astro/18.DfkRvCne_H2xxd.webp 750w, /_astro/18.DfkRvCne_Ocarj.webp 828w, /_astro/18.DfkRvCne_1u4MPS.webp 1080w, /_astro/18.DfkRvCne_ZQa5R1.webp 1280w, /_astro/18.DfkRvCne_pqW0W.webp 1668w, /_astro/18.DfkRvCne_1HgtjS.webp 2048w, /_astro/18.DfkRvCne_y2Ewp.webp 2560w, /_astro/18.DfkRvCne_2mBNOP.webp 2888w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ExcelとGoogle Spreadsheetで利用できるグラフの種類の比較&lt;a href=&quot;#excelとgoogle-spreadsheetで利用できるグラフの種類の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それぞれ利用できるグラフの種類の比較になります。&lt;/p&gt;&lt;p&gt;どちらも様々なグラフを作成できますが、各々作成できないグラフに違いがあります。&lt;/p&gt;























































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;グラフの種類&lt;/th&gt;&lt;th&gt;Excel&lt;/th&gt;&lt;th&gt;Google Spreadsheet&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;縦棒&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;折れ線&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;円&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;横棒&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;面&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;散布図&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マップ&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;株価&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;等高線&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レーダー&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ツリーマップ&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;サンバースト&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヒストグラム&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;箱ひげ図&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ウォーターフォール&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;じょうご&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;組み合わせ&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スコアカード&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ゲージグラフ&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;組織図&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;タイムライン&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;表グラフ&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;td&gt;○&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Google Spreadsheetでは、サイドバーから描画したいグラフを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2880&quot; height=&quot;1466&quot; src=&quot;/_astro/19.C46DUp5A_Z2fcHjU.webp&quot; srcset=&quot;/_astro/19.C46DUp5A_ZKNH3q.webp 640w, /_astro/19.C46DUp5A_7i29n.webp 750w, /_astro/19.C46DUp5A_erE3t.webp 828w, /_astro/19.C46DUp5A_Z1prHNe.webp 1080w, /_astro/19.C46DUp5A_1juwhN.webp 1280w, /_astro/19.C46DUp5A_Z2u5yDa.webp 1668w, /_astro/19.C46DUp5A_Z1cg2ke.webp 2048w, /_astro/19.C46DUp5A_Z2ltQ7H.webp 2560w, /_astro/19.C46DUp5A_Z2fcHjU.webp 2880w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Excelでは、「描画」タブ＞「グラフ」エリアから描画したいグラフを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1626&quot; height=&quot;818&quot; src=&quot;/_astro/20.C-t46f2i_ZUTN6S.webp&quot; srcset=&quot;/_astro/20.C-t46f2i_Z23HsxS.webp 640w, /_astro/20.C-t46f2i_Z1iSVsp.webp 750w, /_astro/20.C-t46f2i_29XiA2.webp 828w, /_astro/20.C-t46f2i_Z1sfyeF.webp 1080w, /_astro/20.C-t46f2i_ZoLIHj.webp 1280w, /_astro/20.C-t46f2i_ZUTN6S.webp 1626w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その5 処理の拡張のしやすさ&lt;a href=&quot;#その5-処理の拡張のしやすさ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ExcelとGoogle Spreadsheetでそれぞれ可能な処理の拡張機能を比較します。結論としては、Googleが勝っている印象があります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Excel&lt;a href=&quot;#excel&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Excelは、アドイン、マクロ機能やVBA（Visual Basic for Application）というプログラミング言語を使って、Excelの処理を拡張することが出来ます。&lt;/p&gt;&lt;p&gt;そして、その拡張した機能を、関数として利用したりボタンを配置して起動することが出来ます。&lt;/p&gt;&lt;p&gt;しかし、Excelはデスクトップ上で起動することが前提として設計されているため、VBAなどの機能は主にExcelにしか適用できません。他のOfficeアプリと連携するためには、また設定が必要になります。その敷居が少し高いです・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Spreadsheet&lt;a href=&quot;#google-spreadsheet&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Google Spreadsheetの処理を拡張する機能として、Google Apps Script（GAS）と呼ばれるJavaScriptライクのスクリプト言語があります。&lt;/p&gt;&lt;p&gt;そして、前述したように、Google Spreadsheetを始めとしたGoogleのサービスはWebベースのサービスとなっています。&lt;/p&gt;&lt;p&gt;そのため、同じGASのエディタから、Googleのあらゆるサービスおよびそれらに関連したファイルに比較的容易にアクセスできます。
GoogleのファイルにはIDが振られているので、そのIDを指定すればすぐにファイルにアクセスできます。&lt;/p&gt;&lt;p&gt;アクセスできるGoogleのサービスは、以下のGASリファレンスに載っていますが、これ以外にもFireStoreにもアクセスできたり、Google WorkspaceではGoogle Chatも利用できるみたいです。&lt;/p&gt;&lt;a href=&quot;https://developers.google.com/apps-script/reference&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/favicon-new.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google for Developers&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Reference overview | Apps Script | Google for Developers&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;developers.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/developers/images/opengraph/white.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;その他にも、Googleフォームとの連携、アドオンの設定、マクロの記録、AppSheetというローコードツールとの連携、Web APサーバ化するなど・・・、本当に色々なことが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その6 共有編集のしやすさ&lt;a href=&quot;#その6-共有編集のしやすさ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;共有編集のしやすさは、Googleの方が勝っているかと思います。&lt;/p&gt;&lt;p&gt;Googleのサービス自体がWebベースのものになっていますので、リモートの方と同じスプレッドシートを編集するのがとても簡便になっています。&lt;/p&gt;&lt;p&gt;Excelは、ローカルにファイルをダウンロードして編集するのが基本となっていますので、その運用の違いが共有編集のしやすさに表れていますね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ExcelとGoogleスプレッドシートの機能の比較は以上になります。資料作成に強いExcelと、データ操作および他サービスとの連携に強いGoogleスプレッドシートという印象ですかね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;同じ表作成ソフトと思っていたけど、けっこう違うソフト同士なんだねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Heroku】GitHubのリポジトリから新しいアプリをデプロイするときに「Item could not be retrieved: Internal Server Error」が出た場合</title><link>https://endorphinbath.com/posts/heroku-see-internal-server-error-while-deploying/</link><guid isPermaLink="true">https://endorphinbath.com/posts/heroku-see-internal-server-error-while-deploying/</guid><description>この前起きた、GitHubのOAuthインシデント後に、Herokuを使ってデプロイしたアプリを再びデプロイするときにデプロイできなくなっているかと思います。そのときにどう対応するかを紹介します。</description><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぬぬ・・・どうしよ・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、herokuを使ってるのか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この前、GitHubとHerokuを繋いでたOAuthが世界的に漏れたじゃん？ それで、アプリを消して、もっかいデプロイしようとしたけど、デプロイできんのよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はそれが題材だな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;もう一回、再度デプロイしようとしたけど・・・&lt;a href=&quot;#もう一回再度デプロイしようとしたけど&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さっき冒頭で言っていたのは、元々あったアプリを「delete App」して消して、再度同じ手順でアプリをデプロイしようとして、GitHubに繋いだときのことです。&lt;/p&gt;&lt;p&gt;画面右上に以下のような、メッセージが出てGitHubにつなげません。
&lt;img loading=&quot;lazy&quot; width=&quot;3022&quot; height=&quot;1406&quot; src=&quot;/_astro/01.Z0JZCC_B_Z2aB0NL.webp&quot; srcset=&quot;/_astro/01.Z0JZCC_B_ZqXD0y.webp 640w, /_astro/01.Z0JZCC_B_2iOFpp.webp 750w, /_astro/01.Z0JZCC_B_Z1VSa8N.webp 828w, /_astro/01.Z0JZCC_B_1xsRDN.webp 1080w, /_astro/01.Z0JZCC_B_1JOidH.webp 1280w, /_astro/01.Z0JZCC_B_ZLIJtj.webp 1668w, /_astro/01.Z0JZCC_B_12HFNG.webp 2048w, /_astro/01.Z0JZCC_B_ZGYy0.webp 2560w, /_astro/01.Z0JZCC_B_Z2aB0NL.webp 3022w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どうやら、待つのが吉らしい&lt;a href=&quot;#どうやら待つのが吉らしい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下のStack Overflowの記事と2022/4/29現在の状況から察するに、2022/4/16のインシデント発生後、HerokuからGitHubへのAuthorizeは出来ない状況のようです。&lt;/p&gt;&lt;p&gt;そのため、Herokuでは、Heroku GItを使ってデプロイする方法を推奨しているとのことです。&lt;/p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/71892543/heroku-and-github-items-could-not-be-retrieved-internal-server-error&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://stackoverflow.com/Content/Sites/stackoverflow/Img/favicon.ico?v=562fb39d93c8&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Stack Overflow&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Heroku and GitHub: &quot;Items could not be retrieved, Internal server error&quot;&lt;/div&gt;&lt;div&gt;I simply want to connect to my GitHub account. When I do it, I get this error message as a small red pop up on the upper right side of the page: Items could not be retrieved, Internal server error.&lt;/div&gt;&lt;div&gt;stackoverflow.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://stackoverflow.com/Content/Sites/stackoverflow/Img/apple-touch-icon@2.png?v=0f0cab681579&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どうしてもGitHubからデプロイしたい！でも待てない！・・・という場合は。&lt;a href=&quot;#どうしてもgithubからデプロイしたいでも待てないという場合は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Heroku Gitを使ってデプロイするか、以下にRenderというサービスを使ってデプロイした記事を紹介していますので、良ければご参考ください。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/renderdotcom-how-to-deploy-discord-bot/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Render.com】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方（Dockerも利用）&lt;/div&gt;&lt;div&gt;RenderでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で一応実施できたので、ご参考ください。Dockerも使いました。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220225_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「果報は寝て待て」ということだそうだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_010.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;むにゃむにゃ・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちなみにGitHubからデプロイする手順は以下の記事で紹介しているので良ければご参考ください！&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/heroku-how-to-deploy-discord-bot/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Heroku】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方&lt;/div&gt;&lt;div&gt;HerokuでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で特に躓くことなく実施できたので、ご参考ください。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/03/20220124_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>5年ぶりに内軟骨種とかいう病気が再発して、右手の人差し指を手術した時の話</title><link>https://endorphinbath.com/posts/life-recurrence-of-enchondroma-for-the-past-5-years/</link><guid isPermaLink="true">https://endorphinbath.com/posts/life-recurrence-of-enchondroma-for-the-past-5-years/</guid><description>内軟骨腫という腫瘍が、指にできた際の出来事を執筆しています。病気の簡単な紹介と、意外とこのレベルでも生活できるよという紹介になります。</description><pubDate>Thu, 28 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐうう・・・、何か人差し指が痛いな・・・、病院行くかあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くそ〜・・・、5年前の内軟骨腫が再発かあ・・・。今回は、一人暮らしだから何も助けを借りられない状況か・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、手術してから、寛解するまでの様子をこの記事に書こうじゃないか！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、内軟骨腫とは&lt;a href=&quot;#まず内軟骨腫とは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;内軟骨腫というのは、指にできる腫瘍の一種で指が「硬骨」ではなく「軟骨」となってしまい、非常に脆くなり骨折しやすくなってしまう病気です。&lt;/p&gt;&lt;p&gt;イメージとしては、「硬骨」は「ゆで卵」の状態で、「軟骨」は「生卵」の状態です。ゆで卵は割れにくいですが、生卵は割れやすいですよね。
&lt;img loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;740&quot; src=&quot;/_astro/01.BGi-x7-V_11oMXy.webp&quot; srcset=&quot;/_astro/01.BGi-x7-V_2vsRID.webp 640w, /_astro/01.BGi-x7-V_11oMXy.webp 740w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この病気は、ちはやふるの17巻で、千早ちゃんが発症していることが発覚して、それが原因で剥離骨折したやつです。&lt;/p&gt;&lt;p&gt;僕もこの病気自体は、ちはやふるの17巻を読んで自分の症状と似ていたので自覚はしていたのですが、放置していたら、とある日に行ったボルダリング中に骨が折れて手術したというわけです（笑）
&lt;img loading=&quot;lazy&quot; width=&quot;313&quot; height=&quot;225&quot; src=&quot;/_astro/02.BaIyHqno_2ontTt.webp&quot; srcset=&quot;/_astro/02.BaIyHqno_2ontTt.webp 313w&quot; /&gt;&lt;/p&gt;&lt;p&gt;引用元：ちはやふる17巻&lt;/p&gt;&lt;p&gt;そして、僕は5年前に手術をして、以下の画像のように、術後は人工骨が自家骨になって痛くなくなりました。
&lt;img loading=&quot;lazy&quot; width=&quot;283&quot; height=&quot;257&quot; src=&quot;/_astro/03.DDaIyrpm_vmLwO.webp&quot; srcset=&quot;/_astro/03.DDaIyrpm_vmLwO.webp 283w&quot; /&gt;&lt;/p&gt;&lt;p&gt;引用元：&lt;a href=&quot;https://www.fuchu-hp.fuchu.tokyo.jp/about/department/orthopedics/disease/tumor/&quot; target=&quot;_blank&quot;&gt;https://www.fuchu-hp.fuchu.tokyo.jp/about/department/orthopedics/disease/tumor/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;最初に内軟骨種になった時の記事はこのnoteに上げているので、よければ見てみてください。&lt;/p&gt;&lt;div&gt;Invalid directive. (&quot;ogp&quot; requires a &quot;url&quot; attribute)&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;再発してしまう&lt;a href=&quot;#再発してしまう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかし、あろうことか、5年後にこの内軟骨腫が再発してしまったのです。&lt;/p&gt;&lt;p&gt;そのため、今回も患部の腫瘍を掻き出して、その中に人工骨を入れて自家骨になるのを待つという感じの治療を行いました。&lt;/p&gt;&lt;p&gt;手術後は、こんな感じで包帯がぐるぐる巻きでした。
&lt;img loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;510&quot; src=&quot;/_astro/04.DX4vNPea_1GF9Is.webp&quot; srcset=&quot;/_astro/04.DX4vNPea_5oeI2.webp 640w, /_astro/04.DX4vNPea_1GF9Is.webp 680w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手術後の生活&lt;a href=&quot;#手術後の生活&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;手術後は何も出来ませんでした。掃除、洗濯、料理などは諦めて、ひたすらアニメ、マンガ、読書を行って生活していました。&lt;/p&gt;&lt;p&gt;以下に、具体的にどのように過ごしていたかを挙げていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;入浴&lt;a href=&quot;#入浴&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;入浴は・・・していません！！！&lt;/p&gt;&lt;p&gt;包帯が取れるまでは入浴しませんでした。ポリ袋を装着して入るという手段もあるのですが、その装着する時間が無駄だし、時間の勿体なさと入浴しないことによる不快感を比較したら、時間の勿体なさが勝ちました。&lt;/p&gt;&lt;p&gt;実は、入浴しないことによる不快感をなるべく最小にするために、頭を丸めていたのです。そのため、1週間くらい頭を洗わなくても全然大丈夫でした。&lt;/p&gt;&lt;p&gt;しかし、20日間くらい入浴しないと、フケがなかなか強くなってきます・・・。なので、そこが気になって包帯が取れたらすぐに風呂に入ってしまいました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;食事&lt;a href=&quot;#食事&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう包丁を持ったり、鍋を運んだりすることは不可能だったので、ひたすら外食をしていました。&lt;/p&gt;&lt;p&gt;ずっと近所のファミレスに行きまくっていました。毎日のように同じファミレスに行っていたので、1週間以上同じ服を着ないように気を付けていました。あまり不潔だと、コロナを理由に入店拒否されたら、食事が詰みますからね・・・。&lt;/p&gt;&lt;p&gt;これを機会に、利き手とは逆手で箸を使うことが出来るようにしました！ 右手が使えず退屈な日々でしたが、食事の時はいつもとは違う脳を使っている感覚がして楽しめました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;洗濯&lt;a href=&quot;#洗濯&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;洗濯物を外に干すなんて出来ないので、なるべく洗濯物を生成しないように過ごしていました。&lt;/p&gt;&lt;p&gt;服って、洗わなくても干せば、意外と不快感なく着れちゃうものなんですよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;歯磨き&lt;a href=&quot;#歯磨き&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;歯磨きは・・・していません！！！&lt;/p&gt;&lt;p&gt;いや、嘘です嘘です。ちゃんと磨きました！&lt;/p&gt;&lt;p&gt;しかし、利き手じゃない手で歯ブラシを使って、デンタルフロスもするというのはなかなか大変でした。糸のタイプじゃなくて、持ち手があって片手でできるフロスを使いました。慣れないので握力が鍛えられましたね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PC&lt;a href=&quot;#pc&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;両手でタッチタイピングなど出来ないので、ひたすらアニメとかを見ていました。遊戯王を流しながら、犬夜叉を読んでたな。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はあ・・・、とりあえず寛解してよかったわ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;不潔だね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一人暮らしだからこそ、取れた手段だよね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Unreal Engine 5】UnrealEditorの実行ファイルのパス</title><link>https://endorphinbath.com/posts/unrealengine-where-is-exe-path/</link><guid isPermaLink="true">https://endorphinbath.com/posts/unrealengine-where-is-exe-path/</guid><description>UnrealEditorをいちいちEpic Games Launcherから起動させるのが面倒くさいということがあるかと思います。そこで、UnrealEditorのショートカットを作るために実行ファイルの場所を紹介します。</description><pubDate>Mon, 25 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;UnrealEditorをいちいちEpic Games Launcherから起動させるのが面倒くさい・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、Dockとかタスクバーにピン留めすれば良いかと。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;UnrealEditorのショートカットを好きな場所に作りたいんだけど・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;実行ファイルから直接ショートカットを作成したいということか。では、実行ファイルの場所を紹介しましょう！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Windowsにおける実行ファイルの場所&lt;a href=&quot;#windowsにおける実行ファイルの場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windowsの実行ファイルは&lt;code&gt;Program Files&lt;/code&gt;の中にあります。&lt;/p&gt;&lt;p&gt;実行ファイルのパス:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\UnrealEditor.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;macOSにおける実行ファイルの場所&lt;a href=&quot;#macosにおける実行ファイルの場所&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;macOSはユーザフォルダ直下の共有フォルダの中に置いてあります。&lt;/p&gt;&lt;p&gt;実行ファイルのパス:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/Users/Shared/Epic Games/UE_5.0/Engine/Binaries/Mac/UnrealEditor.app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、ショートカットの作り方&lt;a href=&quot;#ちなみにショートカットの作り方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、WindowsとmacOSで、ショートカットを作る方法を紹介しておきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Windows&lt;a href=&quot;#windows&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Windowsは、このような手順でショートカットを作ることが出来ます。&lt;/p&gt;&lt;p&gt;ショートカットにしたいファイルを右クリックして、「ショートカットの作成」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1568&quot; height=&quot;1204&quot; src=&quot;/_astro/01.Ck6Z3Vw5_Z206sW7.webp&quot; srcset=&quot;/_astro/01.Ck6Z3Vw5_Z8g91w.webp 640w, /_astro/01.Ck6Z3Vw5_Z1XQmQ.webp 750w, /_astro/01.Ck6Z3Vw5_Z2w5RDi.webp 828w, /_astro/01.Ck6Z3Vw5_ZX1yPt.webp 1080w, /_astro/01.Ck6Z3Vw5_QAIzs.webp 1280w, /_astro/01.Ck6Z3Vw5_Z206sW7.webp 1568w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうすると、同じフォルダにショートカットが作成されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1565&quot; height=&quot;1048&quot; src=&quot;/_astro/02.wREEI7lm_ZLQz3o.webp&quot; srcset=&quot;/_astro/02.wREEI7lm_1xgHC9.webp 640w, /_astro/02.wREEI7lm_1Elu8g.webp 750w, /_astro/02.wREEI7lm_Z5HM56.webp 828w, /_astro/02.wREEI7lm_nfxkz.webp 1080w, /_astro/02.wREEI7lm_2sdILc.webp 1280w, /_astro/02.wREEI7lm_ZLQz3o.webp 1565w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのショートカットをドキュメントとか好きなフォルダに置いて、起動しちゃいましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1565&quot; height=&quot;1043&quot; src=&quot;/_astro/03.D22cY9Ro_1vNUTa.webp&quot; srcset=&quot;/_astro/03.D22cY9Ro_Z1puOJF.webp 640w, /_astro/03.D22cY9Ro_Z1iq3ey.webp 750w, /_astro/03.D22cY9Ro_21GNm1.webp 828w, /_astro/03.D22cY9Ro_Z2smBMA.webp 1080w, /_astro/03.D22cY9Ro_2bJTbo.webp 1280w, /_astro/03.D22cY9Ro_1vNUTa.webp 1565w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;macOS&lt;a href=&quot;#macos&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;macOSは、以下のようにして、ショートカットすなわちエイリアスを作ることが出来ます。&lt;/p&gt;&lt;p&gt;右クリックで、「エイリアスを作成」をクリック。
&lt;img loading=&quot;lazy&quot; width=&quot;1930&quot; height=&quot;1684&quot; src=&quot;/_astro/04.BJDAbXdM_Z2sukdo.webp&quot; srcset=&quot;/_astro/04.BJDAbXdM_Z20hjGn.webp 640w, /_astro/04.BJDAbXdM_zzRty.webp 750w, /_astro/04.BJDAbXdM_ADJsg.webp 828w, /_astro/04.BJDAbXdM_1oKnmz.webp 1080w, /_astro/04.BJDAbXdM_ZRvGGC.webp 1280w, /_astro/04.BJDAbXdM_1gkz0j.webp 1668w, /_astro/04.BJDAbXdM_Z2sukdo.webp 1930w&quot; /&gt;&lt;/p&gt;&lt;p&gt;同じフォルダにエイリアスが作成されます。エイリアスは平たく言うとショートカットのことです。
&lt;img loading=&quot;lazy&quot; width=&quot;1810&quot; height=&quot;936&quot; src=&quot;/_astro/05.BPvwEdln_lgie3.webp&quot; srcset=&quot;/_astro/05.BPvwEdln_tXdeO.webp 640w, /_astro/05.BPvwEdln_5IJ94.webp 750w, /_astro/05.BPvwEdln_Z1vA9Bq.webp 828w, /_astro/05.BPvwEdln_1mxgir.webp 1080w, /_astro/05.BPvwEdln_2oq76U.webp 1280w, /_astro/05.BPvwEdln_1TJ1Th.webp 1668w, /_astro/05.BPvwEdln_lgie3.webp 1810w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デスクトップからエイリアスを起動できたりしちゃいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1836&quot; height=&quot;870&quot; src=&quot;/_astro/06.C2vJWFCg_2fFUg7.webp&quot; srcset=&quot;/_astro/06.C2vJWFCg_201RIE.webp 640w, /_astro/06.C2vJWFCg_ZBheds.webp 750w, /_astro/06.C2vJWFCg_23WirS.webp 828w, /_astro/06.C2vJWFCg_Z6SVgk.webp 1080w, /_astro/06.C2vJWFCg_Z1yJ4WG.webp 1280w, /_astro/06.C2vJWFCg_Z1iI1en.webp 1668w, /_astro/06.C2vJWFCg_2fFUg7.webp 1836w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで好きな場所から直接Unreal Engine 5を起動できますな！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】「GAMIFY ゲーミファイ―エンゲージメントを高めるゲーミフィケーションの新しい未来」を読んだ感想</title><link>https://endorphinbath.com/posts/book-gamify-gamification-engagement/</link><guid isPermaLink="true">https://endorphinbath.com/posts/book-gamify-gamification-engagement/</guid><description>「GAMIFY ゲーミファイ―エンゲージメントを高めるゲーミフィケーションの新しい未来」という書籍を読んだので、その紹介および感想文を書きました。よければ読んでみてください。</description><pubDate>Sun, 24 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今日は、この前読んだこの本を紹介するぜ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほ〜、どれどれ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;この前読んだ本&lt;a href=&quot;#この前読んだ本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「GAMIFY ゲーミファイ - エンゲージメントを高めるゲーミフィケーションの新しい未来」というタイトルの書籍です。&lt;/p&gt;&lt;div&gt;&lt;a href=&quot;https://amzn.to/4c9JyZr&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;GAMIFY ゲーミファイ―エンゲージメントを高めるゲーミフィケーションの新しい未来&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;amzn.to&lt;/em&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Amazon.co.jpで購入する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://amzn.to/4c9JyZr&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;大まかな書籍の流れ&lt;a href=&quot;#大まかな書籍の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;目次としては、こんな流れです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ゲーミフィケーションの最終目的は、動機づけである&lt;/li&gt;
&lt;li&gt;プレイヤーにやりがいを与える&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションで行動を変える&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションでスキルを習得する&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションでイノベーションを促進する&lt;/li&gt;
&lt;li&gt;プレイヤー中心のデザインとは&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションをデザインする&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションデザインによくある失敗&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションプロジェクトを成功させる&lt;/li&gt;
&lt;li&gt;ゲーミフィケーションが未来を変える――2020年の展望&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲーミフィケーションとは&lt;a href=&quot;#ゲーミフィケーションとは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、「ゲーミフィケーション」というのは、「ゲームメカニクスおよび体験デザインを駆使し、人々が自身の目標を達成できるよう、デジタル技術を利用してやる気にさせ、動機づけることである」そうです。&lt;/p&gt;&lt;p&gt;「ゲームメカニクスおよび体験デザインを駆使」する方法としては、ポイント、レベル、インタラクティブ（SNSみたいな機能）な機能を実装することなどが挙げられます。&lt;/p&gt;&lt;p&gt;また、この「動機づける」というのがポイントで、感情レベルでやる気にさせることがゲーミフィケーションの意義だそうです。そして、会社の営業担当が契約数を基にインセンティブ報酬を付与するシステムを巷でよく聞きますが、そういう類の取り組みはゲーミフィケーションではないそうです。&lt;/p&gt;&lt;p&gt;なぜかと言うと、目標に対して対価を支払うものは「感情型エンゲージメント」ではなく「取引型エンゲージメント」であるためです。まず、「感情型エンゲージメント」とは何かと言うと、エンゲージメントを獲得した人に、「内的な」モチベーションを発生させるエンゲージメントのことです。&lt;/p&gt;&lt;p&gt;さらに、「内的な」モチベーションというものは、以下の3つの要素を持っています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;自律性（Autonomy）：自分の人生を自ら導きたいという欲求&lt;/li&gt;
&lt;li&gt;熟達（Mastery）：自分にとって意味のあることを上達させたいという衝動&lt;/li&gt;
&lt;li&gt;目的（Purpose）：自分の利益を超えたなにか大きなもののために働きたいという憧れ&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;これらの「内的な」モチベーションの要素を持っていないモチベーションを「外的な」モチベーションと呼び、「外的な」モチベーションしか発生させない「取引型エンゲージメント」を支払う取り組みはゲーミフィケーションではないということです。&lt;/p&gt;&lt;p&gt;抽象的な話が続いたので、先程の営業のインセンティブを例に話してみると、インセンティブというエンゲージメントを支払った場合、以下の考え方により、内的ではない外的なモチベーションを発生させる「取引型エンゲージメント」を支払っていると考えられます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;自律性（Autonomy）→ 他人から貰うインセンティブが原動力となってしまっている。&lt;/li&gt;
&lt;li&gt;熟達（Mastery）→ 衝動の向かう先がインセンティブになってしまっている。&lt;/li&gt;
&lt;li&gt;目的（Purpose）→ 目的がインセンティブになってしまっている。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;このことから、ゲーミフィケーションを受けた人は、自ら目的を設定して、その目的までに熟達していることを意識することが出来るようになる必要があるわけです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲーミフィケーションは、TVゲームとかコンピュータゲームとは違う？&lt;a href=&quot;#ゲーミフィケーションはtvゲームとかコンピュータゲームとは違う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この考え方で言うと、ゲーミフィケーションは、それらのゲームとは異なるものだと思われます。本書でも異なるものだと書かれています。&lt;/p&gt;&lt;p&gt;ゲーミフィケーションというのは、ゲーミフィケーションの先の目的に向かって進んでいけるように、プレイヤーをサポートする役割ですが、コンピュータゲームなどになると、コンピュータゲームを遊ぶことが目的となっているので、ゲーミフィケーションとは主眼が異なります。&lt;/p&gt;&lt;p&gt;ゲーミフィケーションと同様に、ポイント、レベルやランクなどのシステムがあるゲームもありますが、それらの目的はゲームをクリアしていくことになるので、本質的には違うのです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲーミフィケーションから提供され得るサービス&lt;a href=&quot;#ゲーミフィケーションから提供され得るサービス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ゲーミフィケーションの大目的は、「プレイヤー自らの目的を達成する」ことにあります。その目的を達成するためにサポート機能は以下が挙げられます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;目標を設定する&lt;/li&gt;
&lt;li&gt;その目標のマイルストーンを設定する&lt;/li&gt;
&lt;li&gt;トリガーを設定する&lt;/li&gt;
&lt;li&gt;仲間を見つけて、やり取りさせる&lt;/li&gt;
&lt;li&gt;徐々に複雑で難解なものに取り組ませる&lt;/li&gt;
&lt;li&gt;反復させる&lt;/li&gt;
&lt;li&gt;達成したらバッジなどを付与する&lt;/li&gt;
&lt;li&gt;達成状況などを記録してプレイヤーに可視化したデータを提供する&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;本書では、Adobeが「3ds Max」というソフトに関して抱えていた課題を、そのソフトのチュートリアルや体験版にゲーミフィケーションを取り入れたことにより、解決したことが挙げられていました。&lt;/p&gt;&lt;p&gt;3ds Maxでは、ユーザーの知識不足により、製品の使用者数が増えないという課題がありました。そこで上に挙げたようなゲーミフィケーションを取り入れたら、製品のダウンロード数を10%、体験版の利用者数を40%増やすことに成功したそうです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲーミフィケーションをデザインするために&lt;a href=&quot;#ゲーミフィケーションをデザインするために&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本書では、このゲーミフィケーションをデザイン・設計するためのアドバイスを記載されていました。&lt;/p&gt;&lt;p&gt;まず、大事なのは、そのゲーミフィケーションのプレイヤーのペルソナを十分に想定することです。本書に書かれていたペルソナ設定の１つを紹介しましょう。（ヤックトレードというサービスの対象者の特徴をまとめたものらしいです。）&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;ダニエルは36歳。独身で高収入の建築家だ。引退後に備えて貯蓄をしている。保有株のポートフォリオの大半が、優良株と米国の上場企業を対象とする投資信託だ。投資は長期的な支店から分析的に行っており、短期的な売り買いはしない。相対的に見て、株式市場それ自体が投資の唯一のリスクだと言える。ポートフォリオは堅実で、順調に利益を出している。ダニエルは薬価―に登録しており、質問への回答者としてポートフォリオのバランスのとり方を説明したことが何度かあるが、その時間に見合う対価があったようには思えない。余暇には建築の専門知識を活かし、地域づくり協議会のボランティアとして、市内の貧困地区の空き地や空きビルを市民の憩いの場に変える活動をしている。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;こうしたペルソナを十分に作り上げることで、どのようなゲーミフィケーションがプレイヤーに対して効果的な感情型エンゲージメントを与えられるかを精査することが出来ます。&lt;/p&gt;&lt;p&gt;次の取り組みは、プレイヤー目標を定義することです。以下が例として挙げられていました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;複数プレイヤー／単独プレイヤー：インタラクションのスコープはどうするべきか。&lt;/li&gt;
&lt;li&gt;単発型／継続型：目的がすぐに完結するものなのか、継続的に取り組む必要があるものなのか。&lt;/li&gt;
&lt;li&gt;創発的／計画的：どちらのゲームプレイが向いているか。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;これらの例のどちら側にあるサービスなのかを評価して、プレイヤー目標を定義します。そして、その目標をサポートする手段は、前項で紹介した内容となるわけです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲーミフィケーションを踏襲しているサービスの例&lt;a href=&quot;#ゲーミフィケーションを踏襲しているサービスの例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下に、ゲーミフィケーション的な取り組みをしているサービスの例を紹介します。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;AniList&lt;/li&gt;
&lt;li&gt;Last.fm&lt;/li&gt;
&lt;li&gt;読書メーター&lt;/li&gt;
&lt;li&gt;SalesforceのTrailhead&lt;/li&gt;
&lt;li&gt;プログラムのテストツール&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;AniLIst&lt;a href=&quot;#anilist&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;AniListとは、自分が今までに視聴したアニメや読んだマンガ・ラノベなどをAniLIstデータベースに登録して、自分がどれほどの作品を楽しんできたかが可視化出来るサービスです。自分がどれほど暇を持て余した人間なのかが一目瞭然となるサービスです。&lt;/p&gt;&lt;p&gt;これは、2022/4/4時点の&lt;a href=&quot;https://anilist.co/user/kinkinbeer135ml/&quot; target=&quot;_blank&quot;&gt;僕のAniLIstのアカウント&lt;/a&gt;の画面ですが、このように自分が今までに見聞きしたアニメとマンガのタイトル数や話数の総計を可視化出来るサービスなのです。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1602&quot; src=&quot;/_astro/03.BaYTSUrH_Z1Iprv2.webp&quot; srcset=&quot;/_astro/03.BaYTSUrH_1raEgS.webp 640w, /_astro/03.BaYTSUrH_ZbxSDk.webp 750w, /_astro/03.BaYTSUrH_Z5Yfs7.webp 828w, /_astro/03.BaYTSUrH_J66ul.webp 1080w, /_astro/03.BaYTSUrH_5BEJz.webp 1280w, /_astro/03.BaYTSUrH_lBLuJ.webp 1668w, /_astro/03.BaYTSUrH_Z1c88OP.webp 2048w, /_astro/03.BaYTSUrH_Z1A5Tvc.webp 2560w, /_astro/03.BaYTSUrH_Z1Iprv2.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アニメのジャンル分けやSNS的な側面も併せ持っています。これで他の人が見たアニメやそのジャンルから、アニメを見る動機づけやさらなるユーザーとの繋がりも期待できます。
&lt;img loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;1608&quot; src=&quot;/_astro/04.CSoUejwM_Z2vmNE4.webp&quot; srcset=&quot;/_astro/04.CSoUejwM_ZWboSX.webp 640w, /_astro/04.CSoUejwM_ZLol2M.webp 750w, /_astro/04.CSoUejwM_2FHhd.webp 828w, /_astro/04.CSoUejwM_Z2vqvOM.webp 1080w, /_astro/04.CSoUejwM_ZDR9iY.webp 1280w, /_astro/04.CSoUejwM_1mYVG6.webp 1668w, /_astro/04.CSoUejwM_ZeQuUg.webp 2048w, /_astro/04.CSoUejwM_ZGUMRp.webp 2560w, /_astro/04.CSoUejwM_Z2vmNE4.webp 3000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Stats画面を出せば、自分が今まで採点したアニメをヒストグラムとして表示させることも出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1614&quot; src=&quot;/_astro/05.xQjy2933_1OmGAg.webp&quot; srcset=&quot;/_astro/05.xQjy2933_caaYY.webp 640w, /_astro/05.xQjy2933_mWeQa.webp 750w, /_astro/05.xQjy2933_1c2iba.webp 828w, /_astro/05.xQjy2933_Z2lQhCQ.webp 1080w, /_astro/05.xQjy2933_ZuhU73.webp 1280w, /_astro/05.xQjy2933_1wzaS2.webp 1668w, /_astro/05.xQjy2933_2tR3O2.webp 2048w, /_astro/05.xQjy2933_21MKQS.webp 2560w, /_astro/05.xQjy2933_1OmGAg.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Last.fm&lt;a href=&quot;#lastfm&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Last.fmとは、自分が今までに聞いた音楽のメタ情報をLast.fmのデータベース上に登録して、あれこれ振り返られるサービスです。&lt;/p&gt;&lt;p&gt;僕は、自分のAndroidにLast.fmアプリを入れて、Pulsarというプレイヤーで流している曲をScrobble（Last.fmに記録すること）しています。&lt;/p&gt;&lt;p&gt;これは、2022/4/23時点の&lt;a href=&quot;https://www.last.fm/user/kinkinbeer135ml&quot; target=&quot;_blank&quot;&gt;僕のLast.fmのアカウント&lt;/a&gt;の画面ですが、今週を先週と比較してどれぐらい音楽を聴いたかどうかを可視化してくれます。先週に沢山聴いて、今週はあまり聴かなかったので、88%も数値が下がっていますね・・・（笑）
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1598&quot; src=&quot;/_astro/06.7G48UkfG_OfJrf.webp&quot; srcset=&quot;/_astro/06.7G48UkfG_2rVdWv.webp 640w, /_astro/06.7G48UkfG_Z1JhfCc.webp 750w, /_astro/06.7G48UkfG_TLjdv.webp 828w, /_astro/06.7G48UkfG_VuyYb.webp 1080w, /_astro/06.7G48UkfG_Z1wWnhi.webp 1280w, /_astro/06.7G48UkfG_y1eYz.webp 1668w, /_astro/06.7G48UkfG_1zpEcm.webp 2048w, /_astro/06.7G48UkfG_1UCHxE.webp 2560w, /_astro/06.7G48UkfG_OfJrf.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この表示部分は、今週どれぐらい新しいアーティスト、アルバムを仕入れたかどうかや、聴いた曲のジャンルの移り変わりが可視化されています。&lt;/p&gt;&lt;p&gt;4/1週は、Dance Hallのジャンルをたくさん聞いていたのですよね・・・。Apple Musicを一旦退会して、聞けていないのですが、もう一回始めてみようかな？
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1600&quot; src=&quot;/_astro/07.BrAqyUMr_1KB3q0.webp&quot; srcset=&quot;/_astro/07.BrAqyUMr_gfHvN.webp 640w, /_astro/07.BrAqyUMr_19emK2.webp 750w, /_astro/07.BrAqyUMr_1gfTFy.webp 828w, /_astro/07.BrAqyUMr_1G8NAP.webp 1080w, /_astro/07.BrAqyUMr_ZMj8ED.webp 1280w, /_astro/07.BrAqyUMr_1iEtBe.webp 1668w, /_astro/07.BrAqyUMr_2k3SO1.webp 2048w, /_astro/07.BrAqyUMr_ae8SJ.webp 2560w, /_astro/07.BrAqyUMr_1KB3q0.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;読書メーター&lt;a href=&quot;#読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;読書メーターは、自分が今までに読んだ書籍を記録できるサービスです。&lt;/p&gt;&lt;p&gt;読んだ本の感想を書けば、それが別の読書メーターユーザーに読まれることでいいね！を貰えたりもします。そこから、自分と似たジャンルを読む読書仲間が増えていく感じですね。
&lt;img loading=&quot;lazy&quot; width=&quot;3020&quot; height=&quot;1628&quot; src=&quot;/_astro/08.DqSEKIYP_Z1tiB3x.webp&quot; srcset=&quot;/_astro/08.DqSEKIYP_Z2kmvJT.webp 640w, /_astro/08.DqSEKIYP_Z29zrSI.webp 750w, /_astro/08.DqSEKIYP_Z1kuoyI.webp 828w, /_astro/08.DqSEKIYP_ZgsvS0.webp 1080w, /_astro/08.DqSEKIYP_ZY3tTy.webp 1280w, /_astro/08.DqSEKIYP_1HRSPo.webp 1668w, /_astro/08.DqSEKIYP_jT3iW.webp 2048w, /_astro/08.DqSEKIYP_Z1akc1y.webp 2560w, /_astro/08.DqSEKIYP_Z1tiB3x.webp 3020w&quot; /&gt;&lt;/p&gt;&lt;p&gt;自分のトップページには、読書ページ数と読書冊数が積み上げヒストグラムで蓄積されていきます。著者の割合なども表示されます。小説をよく読む方とかは、自分の趣向を分かりやすく表明できるのではないでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1614&quot; src=&quot;/_astro/09.g8tk788k_Z1tjPMU.webp&quot; srcset=&quot;/_astro/09.g8tk788k_14GDaP.webp 640w, /_astro/09.g8tk788k_1ftH21.webp 750w, /_astro/09.g8tk788k_24yKm1.webp 828w, /_astro/09.g8tk788k_ZzlGd6.webp 1080w, /_astro/09.g8tk788k_1hcFiH.webp 1280w, /_astro/09.g8tk788k_Z1L7mv9.webp 1668w, /_astro/09.g8tk788k_ZNOtz9.webp 2048w, /_astro/09.g8tk788k_Z1gSLwi.webp 2560w, /_astro/09.g8tk788k_Z1tjPMU.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SalesforceのTrailhead&lt;a href=&quot;#salesforceのtrailhead&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Trailheadとは、Salesforceで利用できるサービスなどを勉強できるサービスです。&lt;/p&gt;&lt;p&gt;例えば、学習コースごとの解説を読んで、最後の設問にすべて正解すると・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;2816&quot; height=&quot;1500&quot; src=&quot;/_astro/10.C5qMI4f0_Z1K8pKp.webp&quot; srcset=&quot;/_astro/10.C5qMI4f0_Z1BhHDh.webp 640w, /_astro/10.C5qMI4f0_Z1quDM6.webp 750w, /_astro/10.C5qMI4f0_1UJvqE.webp 828w, /_astro/10.C5qMI4f0_Z2tIViU.webp 1080w, /_astro/10.C5qMI4f0_ZCayM7.webp 1280w, /_astro/10.C5qMI4f0_Zmas1W.webp 1668w, /_astro/10.C5qMI4f0_2q5VpK.webp 2048w, /_astro/10.C5qMI4f0_Z2mYFjF.webp 2560w, /_astro/10.C5qMI4f0_Z1K8pKp.webp 2816w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな風なバッジが貰えます。
&lt;img loading=&quot;lazy&quot; width=&quot;3016&quot; height=&quot;1586&quot; src=&quot;/_astro/11.r5GOaWUp_ZVyQUU.webp&quot; srcset=&quot;/_astro/11.r5GOaWUp_ZEHsjM.webp 640w, /_astro/11.r5GOaWUp_Z2jKP0J.webp 750w, /_astro/11.r5GOaWUp_Z2cJi5d.webp 828w, /_astro/11.r5GOaWUp_Z15K9u8.webp 1080w, /_astro/11.r5GOaWUp_OTJis.webp 1280w, /_astro/11.r5GOaWUp_1a1nkp.webp 1668w, /_astro/11.r5GOaWUp_ZjC0In.webp 2048w, /_astro/11.r5GOaWUp_5GySH.webp 2560w, /_astro/11.r5GOaWUp_ZVyQUU.webp 3016w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このバッジはTrailheadの管理画面で確認できて、もっとバッジを貰えばどんどん増えていって、ランクが上がっていったりします。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1614&quot; src=&quot;/_astro/12.D-8kiLcR_27AApg.webp&quot; srcset=&quot;/_astro/12.D-8kiLcR_Z1qmFdD.webp 640w, /_astro/12.D-8kiLcR_1hzuwi.webp 750w, /_astro/12.D-8kiLcR_26ExQi.webp 828w, /_astro/12.D-8kiLcR_Z21rQ62.webp 1080w, /_astro/12.D-8kiLcR_Z9Stze.webp 1280w, /_astro/12.D-8kiLcR_ZD4bPI.webp 1668w, /_astro/12.D-8kiLcR_jdG5h.webp 2048w, /_astro/12.D-8kiLcR_Akd9M.webp 2560w, /_astro/12.D-8kiLcR_27AApg.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プログラムのテストツール&lt;a href=&quot;#プログラムのテストツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕は、テストツールを使っている時にゲーミフィケーション的な感覚を持ちながら、テストコードを書いています。&lt;/p&gt;&lt;p&gt;以下のメッセージは、Pythonのテストツールであるpytestのものですが、この「passed」の数が増えていくのが楽しいのです。どんどんコードを書いて数字を増やしたくなってくるのです。
&lt;img loading=&quot;lazy&quot; width=&quot;1420&quot; height=&quot;58&quot; src=&quot;/_astro/13.rSuPm8-a_Z2q0MB7.webp&quot; srcset=&quot;/_astro/13.rSuPm8-a_Z1qpJHq.webp 640w, /_astro/13.rSuPm8-a_Z1DErhI.webp 750w, /_astro/13.rSuPm8-a_ZfAOYE.webp 828w, /_astro/13.rSuPm8-a_Z1zJ2gw.webp 1080w, /_astro/13.rSuPm8-a_ZRE4GH.webp 1280w, /_astro/13.rSuPm8-a_Z2q0MB7.webp 1420w&quot; /&gt;&lt;/p&gt;&lt;p&gt;確かにテストコードは最低限の数で行うほうが望ましいですが、このテストケース数の可視化がモチベーションの向上に寄与してくれるのは事実です。
ケース数やカバレッジが増えると、苗が育ったり花が咲いたりするように出力されたら、もっと楽しいかもしれませんね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ITSM City&lt;a href=&quot;#itsm-city&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このゲーミフィケーションは、本書でも紹介されていました。&lt;/p&gt;&lt;p&gt;仕組みとしては、ITシステムを運用している際に、そのシステムのインシデントが増えていくと、画面の中の車がドンドン渋滞していくというものになっています。&lt;/p&gt;&lt;p&gt;個人的な印象としては、面白そうだという印象を受けました。&lt;/p&gt;&lt;p&gt;システムのインシデントが増えていくと焦りが生まれてくるものなのですが、ある一定のところを超えると逆に楽しくなってきたりするものでもあります（笑）そのため、画面を見ていて、車が一気に増えていたり、だんだん減っていったりするのが見えるというのは、楽しそうです。&lt;/p&gt;&lt;a href=&quot;https://www.nttdata.com/jp/ja/trends/data-insight/2014/042401/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.nttdata.com/jp/ja/-/media/assets/images/favicon.svg?rev=8365ca66efe648568ba9c65b837f66a6&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;NTTデータ&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ITサービスマネジメント×ゲーミフィケーション&lt;/div&gt;&lt;div&gt;サービス開始後のITシステムの稼働やビジネス貢献を可視化する新たな仕組み「ITサービスマネジメント×ゲーミフィケーション」をご紹介します。&lt;/div&gt;&lt;div&gt;www.nttdata.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.nttdata.com/jp/ja/-/media/nttdatajapan/images/shared/share_01.png?rev=33d75d45acaa492ca099e90953557fff&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1468&quot; height=&quot;824&quot; src=&quot;/_astro/14.45CmNmqI_Z3jwHH.webp&quot; srcset=&quot;/_astro/14.45CmNmqI_13Prhl.webp 640w, /_astro/14.45CmNmqI_1C9kBj.webp 750w, /_astro/14.45CmNmqI_hdm8Q.webp 828w, /_astro/14.45CmNmqI_Z22O76B.webp 1080w, /_astro/14.45CmNmqI_Z11sAcq.webp 1280w, /_astro/14.45CmNmqI_Z3jwHH.webp 1468w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;こんな感じですわ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんかサービスを作る時に参考になりそうですな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】日常の色々なTODOを管理する</title><link>https://endorphinbath.com/posts/github-todo-management-everyday/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-todo-management-everyday/</guid><description>日常の色々なTODOタスクを、GitHubのProjects機能のkanbanを使って管理していきたいと思います。その管理するために、僕が行った環境の設定の仕方を紹介します。</description><pubDate>Sat, 23 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よ〜し、今回はGitHubをいじってTODOを管理できる環境を作るぞ〜。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回、行いたいこと。&lt;a href=&quot;#今回行いたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、「blog」や「programming」で今後着手しようと思っているタスクを、GitHub上の同じタスクボード（kanban）で管理しようと思います。&lt;/p&gt;&lt;p&gt;こうすることで、自分が行う日常のタスクを一括で管理できるようにします。
&lt;img loading=&quot;lazy&quot; width=&quot;2968&quot; height=&quot;1284&quot; src=&quot;/_astro/11.CFWMqSx3_Z18CVXg.webp&quot; srcset=&quot;/_astro/11.CFWMqSx3_ZPylTG.webp 640w, /_astro/11.CFWMqSx3_1Tv7sq.webp 750w, /_astro/11.CFWMqSx3_dphxh.webp 828w, /_astro/11.CFWMqSx3_8EeR4.webp 1080w, /_astro/11.CFWMqSx3_ZYE7SF.webp 1280w, /_astro/11.CFWMqSx3_7DClg.webp 1668w, /_astro/11.CFWMqSx3_hS6Gm.webp 2048w, /_astro/11.CFWMqSx3_ZlpAQv.webp 2560w, /_astro/11.CFWMqSx3_Z18CVXg.webp 2968w&quot; /&gt;&lt;/p&gt;&lt;p&gt;フィルターをかけて、表示/非表示も切り替えられます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、Issue Templateを作成する。&lt;a href=&quot;#まずissue-templateを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、管理の土台となるIssue Templateを作成します。&lt;/p&gt;&lt;p&gt;Issue Templateの作成方法は、この記事が参考になりました。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/o_ob/items/fd45fba2a9af0ce963c3&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;GitHubを最強のToDo管理ツールにする - Qiita&lt;/div&gt;&lt;div&gt;この記事は古いです、AI時代に向けてアップデートしています。 あまりに実用的すぎるのでなかなかテンプレを更新できていないのですが、技術的に難しいところがあるのでこの記事をバイブコーディングに食わせてあげればいい感じになるはずです。 あと、私のリポジトリでToDo書く...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMTkxMjkxJTJGcHJvZmlsZS1pbWFnZXMlMkYxNjUwNzIxNTUzP2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz0xZDU1NDI2NmM5ZjVhZDQyZjhlMWNhNzViNjc4ZTA1Nw%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D3d1cee1f40d0b77777ad669c94e97116?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9R2l0SHViJUUzJTgyJTkyJUU2JTlDJTgwJUU1JUJDJUI3JUUzJTgxJUFFVG9EbyVFNyVBRSVBMSVFNyU5MCU4NiVFMyU4MyU4NCVFMyU4MyVCQyVFMyU4MyVBQiVFMyU4MSVBQiVFMyU4MSU5OSVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTYwMjY2ZmYwZTFlY2YwMGRhZDRhZjczM2ExZGVhYTMx&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBvX29iJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9OGFiOTJkNzU2ZTU4ZGJjYjFiYmMwOGFiNGMwZTk3YjA&amp;amp;blend-x=242&amp;amp;blend-y=480&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;s=b111f879a77db08eb1331bcb2f1d9751&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;また、GitHubの公式記事もあるので、ご参考までに。&lt;/p&gt;&lt;a href=&quot;https://docs-internal.github.com/ja/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs-internal.github.com/assets/cb-345/images/site/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;課題書式の構文 - GitHubドキュメント&lt;/div&gt;&lt;div&gt;Issue フォームには、さまざまな入力タイプ、検証、デフォルトのアサインされた人、デフォルトのラベルを定義できます。&lt;/div&gt;&lt;div&gt;docs-internal.github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.github.com/assets/cb-345/images/social-cards/communities.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;これからの内容は、一旦以下のようにconfig.ymlとcustom.mdが出来ている前提で進めていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2310&quot; height=&quot;468&quot; src=&quot;/_astro/01.CbKk3r8N_2mvQ32.webp&quot; srcset=&quot;/_astro/01.CbKk3r8N_9frUh.webp 640w, /_astro/01.CbKk3r8N_5ewPu.webp 750w, /_astro/01.CbKk3r8N_8xK48.webp 828w, /_astro/01.CbKk3r8N_ZlDRye.webp 1080w, /_astro/01.CbKk3r8N_1Bk8ax.webp 1280w, /_astro/01.CbKk3r8N_ZiycUv.webp 1668w, /_astro/01.CbKk3r8N_ZuyQR7.webp 2048w, /_astro/01.CbKk3r8N_2mvQ32.webp 2310w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;執筆中のブログ記事をメモっておく&lt;a href=&quot;#執筆中のブログ記事をメモっておく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ブログ執筆用の記事をメモっておくIssue Templateを作ります。&lt;/p&gt;&lt;p&gt;例えば、&lt;code&gt;config.yml&lt;/code&gt;を以下のように書くと、以下の画像のようにIssue Templateが表示されます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;config.yml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;blank_issues_enabled&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;contact_links&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Add new ToDo for Blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;about&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;made by config.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;https://github.com/landmaster135/neptunus-note/issues/new?template=custom.md&amp;amp;projects=landmaster135%2Fneptunus-note%2F1&amp;amp;assignees=landmaster135&amp;amp;labels=blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Add new ToDo for Programming&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;about&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;made by config.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;https://github.com/landmaster135/neptunus-note/issues/new?template=custom.md&amp;amp;projects=landmaster135%2Fneptunus-note%2F1&amp;amp;assignees=landmaster135&amp;amp;labels=programming&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Add new ToDo 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;about&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;made by config.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;https://github.com/landmaster135/neptunus-note/issues/new?template=custom.md&amp;amp;projects=landmaster135%2Fneptunus-note%2F2&amp;amp;assignees=landmaster135&amp;amp;labels=bug&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2782&quot; height=&quot;750&quot; src=&quot;/_astro/02.DvltT3WM_TkWeD.webp&quot; srcset=&quot;/_astro/02.DvltT3WM_Z1OCCO1.webp 640w, /_astro/02.DvltT3WM_Zc1VQL.webp 750w, /_astro/02.DvltT3WM_beEpG.webp 828w, /_astro/02.DvltT3WM_1DQosS.webp 1080w, /_astro/02.DvltT3WM_Z2cMHA5.webp 1280w, /_astro/02.DvltT3WM_Z1FtBJc.webp 1668w, /_astro/02.DvltT3WM_Aa40r.webp 2048w, /_astro/02.DvltT3WM_2bpGNO.webp 2560w, /_astro/02.DvltT3WM_TkWeD.webp 2782w&quot; /&gt;&lt;/p&gt;&lt;p&gt;issue templateを開いてissueの編集画面に遷移します。そして、右側にあるこのlabelsの歯車マークをクリックすると、labelを増やすことが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;2298&quot; height=&quot;594&quot; src=&quot;/_astro/03.C4Q6pMvP_1r4fHt.webp&quot; srcset=&quot;/_astro/03.C4Q6pMvP_Zt2yPg.webp 640w, /_astro/03.C4Q6pMvP_Z1m962s.webp 750w, /_astro/03.C4Q6pMvP_26QdYy.webp 828w, /_astro/03.C4Q6pMvP_q9d5u.webp 1080w, /_astro/03.C4Q6pMvP_ZTEAPs.webp 1280w, /_astro/03.C4Q6pMvP_ZlCri7.webp 1668w, /_astro/03.C4Q6pMvP_ZApNJL.webp 2048w, /_astro/03.C4Q6pMvP_1r4fHt.webp 2298w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「New label」ボタンから増やして、以下のような新規ラベルを追加しました。
&lt;img loading=&quot;lazy&quot; width=&quot;2694&quot; height=&quot;1100&quot; src=&quot;/_astro/04.GqHHLklR_Z1f10B2.webp&quot; srcset=&quot;/_astro/04.GqHHLklR_1ztrgY.webp 640w, /_astro/04.GqHHLklR_1NXMte.webp 750w, /_astro/04.GqHHLklR_812wE.webp 828w, /_astro/04.GqHHLklR_Z2okMBS.webp 1080w, /_astro/04.GqHHLklR_2pUQ0x.webp 1280w, /_astro/04.GqHHLklR_14Jj08.webp 1668w, /_astro/04.GqHHLklR_Z1QxYek.webp 2048w, /_astro/04.GqHHLklR_aVF3b.webp 2560w, /_astro/04.GqHHLklR_Z1f10B2.webp 2694w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上述の&lt;code&gt;config.yml&lt;/code&gt;でURLのクエリパラメータで「labels=blog」を指定すると、issue templateを開いた時に、デフォルトで「blog」ラベルが付いた状態になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2424&quot; height=&quot;956&quot; src=&quot;/_astro/05.C7MHnlUP_Z10km7S.webp&quot; srcset=&quot;/_astro/05.C7MHnlUP_Z15yQxc.webp 640w, /_astro/05.C7MHnlUP_Z2iKQLM.webp 750w, /_astro/05.C7MHnlUP_Z1VW9eD.webp 828w, /_astro/05.C7MHnlUP_Z1K0pzk.webp 1080w, /_astro/05.C7MHnlUP_ZChXMB.webp 1280w, /_astro/05.C7MHnlUP_ZeIgoA.webp 1668w, /_astro/05.C7MHnlUP_19EBJo.webp 2048w, /_astro/05.C7MHnlUP_Z10km7S.webp 2424w&quot; /&gt;&lt;/p&gt;&lt;p&gt;適当なissueタイトルを入れて、登録してみます。 すると、issueが登録されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2339&quot; height=&quot;1151&quot; src=&quot;/_astro/06.TVfynQYp_Z1qEm7u.webp&quot; srcset=&quot;/_astro/06.TVfynQYp_Z1XJ34U.webp 640w, /_astro/06.TVfynQYp_1sYGKW.webp 750w, /_astro/06.TVfynQYp_ZVRHf8.webp 828w, /_astro/06.TVfynQYp_7Wlyr.webp 1080w, /_astro/06.TVfynQYp_pXjEG.webp 1280w, /_astro/06.TVfynQYp_1SSWn1.webp 1668w, /_astro/06.TVfynQYp_ZgSWw6.webp 2048w, /_astro/06.TVfynQYp_Z1qEm7u.webp 2339w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、Projectsをクリックして、issueからProjectsのkanbanにカードが自動登録できているかを確認します。今回は、このProjectになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2734&quot; height=&quot;744&quot; src=&quot;/_astro/07.Db3norin_Z1H4mK9.webp&quot; srcset=&quot;/_astro/07.Db3norin_ZKs9bS.webp 640w, /_astro/07.Db3norin_i72af.webp 750w, /_astro/07.Db3norin_FnDrH.webp 828w, /_astro/07.Db3norin_ZOkCQa.webp 1080w, /_astro/07.Db3norin_ocnSN.webp 1280w, /_astro/07.Db3norin_Z1BDC94.webp 1668w, /_astro/07.Db3norin_Z1Sa3ib.webp 2048w, /_astro/07.Db3norin_Zi2usn.webp 2560w, /_astro/07.Db3norin_Z1H4mK9.webp 2734w&quot; /&gt;&lt;/p&gt;&lt;p&gt;TODOに先程のissueからカードが登録できています。このようにissueを登録することで、タスクを管理していきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2950&quot; height=&quot;1286&quot; src=&quot;/_astro/08.BYDJDdBG_Z1T7hWh.webp&quot; srcset=&quot;/_astro/08.BYDJDdBG_L5d4F.webp 640w, /_astro/08.BYDJDdBG_XYzy2.webp 750w, /_astro/08.BYDJDdBG_1NAWMk.webp 828w, /_astro/08.BYDJDdBG_1bDyAO.webp 1080w, /_astro/08.BYDJDdBG_Z1LDjFC.webp 1280w, /_astro/08.BYDJDdBG_1PHeOS.webp 1668w, /_astro/08.BYDJDdBG_Z1inqo2.webp 2048w, /_astro/08.BYDJDdBG_Z20MFdG.webp 2560w, /_astro/08.BYDJDdBG_Z1T7hWh.webp 2950w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プログラミングのアイデアをメモっておく&lt;a href=&quot;#プログラミングのアイデアをメモっておく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次は、プログラミングのTODOをメモります。&lt;/p&gt;&lt;p&gt;先程、issue templateとlabelは作ったので、それらが反映されたissue画面になります。この内容でissueを追加します。
&lt;img loading=&quot;lazy&quot; width=&quot;2338&quot; height=&quot;910&quot; src=&quot;/_astro/09.BLVjAsB9_1gIHF2.webp&quot; srcset=&quot;/_astro/09.BLVjAsB9_Zuijrq.webp 640w, /_astro/09.BLVjAsB9_23B4Uu.webp 750w, /_astro/09.BLVjAsB9_Z25JPKb.webp 828w, /_astro/09.BLVjAsB9_1oBe6A.webp 1080w, /_astro/09.BLVjAsB9_HN36U.webp 1280w, /_astro/09.BLVjAsB9_Z28HLNI.webp 1668w, /_astro/09.BLVjAsB9_2v1NB4.webp 2048w, /_astro/09.BLVjAsB9_1gIHF2.webp 2338w&quot; /&gt;&lt;/p&gt;&lt;p&gt;issueが追加されました。
&lt;img loading=&quot;lazy&quot; width=&quot;2392&quot; height=&quot;1218&quot; src=&quot;/_astro/10.x6CnrWFw_11T7Gf.webp&quot; srcset=&quot;/_astro/10.x6CnrWFw_25Di4w.webp 640w, /_astro/10.x6CnrWFw_Z26r6wB.webp 750w, /_astro/10.x6CnrWFw_xJxhF.webp 828w, /_astro/10.x6CnrWFw_MnSjm.webp 1080w, /_astro/10.x6CnrWFw_Z1xQ0ox.webp 1280w, /_astro/10.x6CnrWFw_ZheWvz.webp 1668w, /_astro/10.x6CnrWFw_Z1yyKK0.webp 2048w, /_astro/10.x6CnrWFw_11T7Gf.webp 2392w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先ほどと同じProjectを確認すると、「programming」ラベルのカードも追加されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2968&quot; height=&quot;1284&quot; src=&quot;/_astro/11.CFWMqSx3_Z18CVXg.webp&quot; srcset=&quot;/_astro/11.CFWMqSx3_ZPylTG.webp 640w, /_astro/11.CFWMqSx3_1Tv7sq.webp 750w, /_astro/11.CFWMqSx3_dphxh.webp 828w, /_astro/11.CFWMqSx3_8EeR4.webp 1080w, /_astro/11.CFWMqSx3_ZYE7SF.webp 1280w, /_astro/11.CFWMqSx3_7DClg.webp 1668w, /_astro/11.CFWMqSx3_hS6Gm.webp 2048w, /_astro/11.CFWMqSx3_ZlpAQv.webp 2560w, /_astro/11.CFWMqSx3_Z18CVXg.webp 2968w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kanban内をフィルターするためには・・・&lt;a href=&quot;#kanban内をフィルターするためには&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、filterをかける方法なのですが、このフィルター用のテキストボックスに記入すると、フィルターが自動的に掛かります。
&lt;img loading=&quot;lazy&quot; width=&quot;2972&quot; height=&quot;1252&quot; src=&quot;/_astro/12.CrkPsm0R_1cIxnb.webp&quot; srcset=&quot;/_astro/12.CrkPsm0R_1AgKiy.webp 640w, /_astro/12.CrkPsm0R_ZHo0nW.webp 750w, /_astro/12.CrkPsm0R_8FgzE.webp 828w, /_astro/12.CrkPsm0R_n2BST.webp 1080w, /_astro/12.CrkPsm0R_30AqB.webp 1280w, /_astro/12.CrkPsm0R_1iwpe7.webp 1668w, /_astro/12.CrkPsm0R_1AXW7M.webp 2048w, /_astro/12.CrkPsm0R_Z1D27e0.webp 2560w, /_astro/12.CrkPsm0R_1cIxnb.webp 2972w&quot; /&gt;&lt;/p&gt;&lt;p&gt;どうやら、2022/3/24時点では、「&lt;code&gt;label:programming&lt;/code&gt;」という風に記述すると上手くフィルターが掛からず、「&lt;code&gt;label:&quot;programming&quot;&lt;/code&gt;」とダブルクォーテーションでラベル名を囲んで記述する必要がるようです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;kanban内のアーカイブしたカードを見るためには・・・&lt;a href=&quot;#kanban内のアーカイブしたカードを見るためには&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こうして、TODOを蓄積していくとArchiveする必要があると思いますが、Archiveしたカードは以下の記事の方法で見れます。&lt;/p&gt;&lt;a href=&quot;https://docs-internal.github.com/ja/enterprise-server@3.16/issues/organizing-your-work-with-project-boards/tracking-work-with-project-boards/archiving-cards-on-a-project-board&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://docs-internal.github.com/assets/cb-345/images/site/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;GitHub Docs&lt;/span&gt;&lt;/div&gt;&lt;div&gt;project (classic)でのカードのアーカイブ - GitHub Enterprise Server 3.16 Docs&lt;/div&gt;&lt;div&gt;プロジェクト (クラシック)のカードをアーカイブすることにより、プロジェクトの履歴コンテキストを失うことなくワークフローを整理できます。&lt;/div&gt;&lt;div&gt;docs-internal.github.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.github.com/assets/cb-345/images/social-cards/issues.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一括管理できるタスクボードになりました〜。少しこのkanbanを運用してみて、使いやすさを観察していきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【OutSystems】ローコード開発をしていて「なんか惜しいよなあ」と思うところ</title><link>https://endorphinbath.com/posts/outsystems-disappointed-to-development/</link><guid isPermaLink="true">https://endorphinbath.com/posts/outsystems-disappointed-to-development/</guid><description>仕事でOutSystemsを使っていて「惜しいなあ」と思うところを書きました。現在、OutSystemsを導入しようと思っている方にオススメの記事かと思います。</description><pubDate>Fri, 22 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、現在のお仕事で使っている「OutSystems」というツールに関して、記事を書いてみようと思います。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;OutSystemsってなに？&lt;a href=&quot;#outsystemsってなに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;「OutSystems」というのは、最近巷で流行っているローコードツールです。&lt;/p&gt;&lt;a href=&quot;https://www.outsystems.com/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.prod.website-files.com/69a8527778df147812f39db3/69c6e072f8c03965679420bb_OutSystems-logo-digital-2018-alternative-color.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.outsystems.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Build your agentic future with the only unified agile AI platform&lt;/div&gt;&lt;div&gt;Turn ideas into AI-powered applications and agents that drive revenue, efficiency, and customer impact.&lt;/div&gt;&lt;div&gt;www.outsystems.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.prod.website-files.com/69a8527778df147812f39db3/69d35295144b58f8bac067a9_384bec96328fdf92b680b0ecc949b257_outsystems-homepage-social-v2-en.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;歴史としては、OutSystems社が2001年に設立されたそうです。
そして、日本国内で言うと、「株式会社BluMeme」というところが2012年に国内初導入を行ったそうです。それから、BlueMemeが国内でのOutSystemsのベンダー最大手としての地位を確立しています。&lt;/p&gt;&lt;p&gt;OutSystemsのサポートデスクのサービスも、BlueMemeは提供しています。&lt;/p&gt;&lt;a href=&quot;https://www.bluememe.jp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.bluememe.jp/wp-content/uploads/2021/01/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;株式会社BlueMeme | ローコード×アジャイルでシステム開発の内製化DXを実現&lt;/span&gt;&lt;/div&gt;&lt;div&gt;株式会社BlueMeme | 株式会社BlueMeme&lt;/div&gt;&lt;div&gt;BlueMeme ブルーミームは、プログラミングがほぼ不要なローコードと、俊敏なアジャイル開発で、システム開発の内製化と日本企業のDXを支援します。 変化の激しいビジネスニーズに迅速に対応し、IT人材不足の課題を解決して、未来の成長を牽引します。&lt;/div&gt;&lt;div&gt;www.bluememe.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.bluememe.jp/wp-content/uploads/2021/01/top-image.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;OutSystems導入のメリット&lt;a href=&quot;#outsystems導入のメリット&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、OutSystemsの導入のメリットを挙げていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：UIパーツが既に出来ているので、目標物に近いものをすぐに試作できる。&lt;a href=&quot;#その1uiパーツが既に出来ているので目標物に近いものをすぐに試作できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OutSystemsで開発すると、既にあるOutSystems標準パーツを使えば、あまり工数を掛けずに目標のUIデザインに近いモックアップを作ることが出来ます。&lt;/p&gt;&lt;p&gt;なので、要件定義や基本設計とかの段階からUI、UXの協議を深いレベルで行うことが出来ます。&lt;/p&gt;&lt;p&gt;そうすることで、以下のメリットが生まれます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;要件定義、設計に掛かる工数の削減&lt;/li&gt;
&lt;li&gt;パーツ作りの工数の削減&lt;/li&gt;
&lt;li&gt;納期までの期間の短縮&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：試作品を作って確認をするプロセスを、アジャイル形式で開発できる。&lt;a href=&quot;#その2試作品を作って確認をするプロセスをアジャイル形式で開発できる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程、UIパーツが既に出来合いのものがあると述べました。&lt;/p&gt;&lt;p&gt;そのため、一発勝負のウォーターフォール開発ではなく、プログラムを作っては確認、また作っては確認、をするアジャイル開発が容易になります。&lt;/p&gt;&lt;p&gt;そのため、以下のメリットが生まれます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;要件定義漏れのキャッチアップが早い段階で可能&lt;/li&gt;
&lt;li&gt;要件変更のプログラムへの反映が早くなる&lt;/li&gt;
&lt;li&gt;一気にプログラムをリリースするわけではなくなるため、バグのスコープが狭まり、バグの特定が容易になる&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;OutSystemsの惜しいところ&lt;a href=&quot;#outsystemsの惜しいところ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;では、実際に惜しいところを挙げていきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;その1：テストコードが書けない&lt;a href=&quot;#その1テストコードが書けない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OutSystemsでは、先程挙げた標準モジュールやForgeと呼ばれる部品を使って、開発を行っていきますが、そのパーツ間ではもちろん変数などのやり取りが発生します。&lt;/p&gt;&lt;p&gt;そのため、OutSystemsで完成したシステムはもちろんプログラムというものが出来るわけです。
そして、プログラムを作ったからには・・・、もちろんテストを行わなければなりません。画面にちゃんと意図した処理が実装されているか、UIが崩れていないかなど・・・。&lt;/p&gt;&lt;p&gt;しかし、OutSystemsで実装した処理のテストは自動化出来ません。
と言うと、些か語弊はあるのですが、Seleniumなどを使ったE2Eテストは別途組めば出来るのですが、クライアントで値を表示するまでの内部処理のテストを自動化出来ないのです。&lt;/p&gt;&lt;p&gt;なので、OutSystems内では画面の描画以外の処理（DBからSelectしたり、値を加工したり、）はあまり実装しないほうが良いのかと思います。これは、アーキテクトの設計の仕方にも依ると思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その2：diffツールが過敏である&lt;a href=&quot;#その2diffツールが過敏である&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OutSystemsでは、修正する際にモジュールからcloneして修正でき、その修正したところとclone直後のdiffが出来ます。&lt;/p&gt;&lt;p&gt;出来る点は素晴らしいのですが、修正した際に編集するUIで少しでもアクションなどを動かしてしまうと、動かした部分でdiffが発生してしまいます。
実際に、僕が体験した話としては、diffした際にあまりにもdiff部分が多すぎて、diffしそびれている箇所が分からなくなり、cloneからマージされていなかったことがありました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その3：あまりに大量のデータはエンティティに入らない&lt;a href=&quot;#その3あまりに大量のデータはエンティティに入らない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これはOutSystemsの問題なのかSQL Serverの問題なのか微妙なところではありますが・・・。&lt;/p&gt;&lt;p&gt;この「エンティティ」というのは、OutSystemsで作った画面が裏で持っているデータベース的なモジュールなのですが、このデータベースに利用されているのが、Microsoft SQL Serverです。&lt;/p&gt;&lt;a href=&quot;https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.microsoft.com/favicon.ico?v2&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.microsoft.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;SQL Server ダウンロード | Microsoft&lt;/div&gt;&lt;div&gt;Microsoft SQL Server のダウンロードを使って始めましょう。データとワークロードのニーズに最適な SQL Server の試用版、エディション、ツール、コネクタをお選びください。&lt;/div&gt;&lt;div&gt;www.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このMicrosoft SQL Serverなのですが、実は1つのレコードあたり、8060byte以上のデータを保持することが出来ないのです。（カラムの定義上のbyte数ではなく実質のbyte数ですが。）
システムとして既に150byteは占有されているそうなので、実質使用できるbyte数は7910byteになります。&lt;/p&gt;&lt;p&gt;なので、大量の項目を保持するのが目的であるシステムを作るのであれば、この7910byte制限に抵触しそうかどうかを確認する必要があります。&lt;/p&gt;&lt;p&gt;byteの数え方としては、どうやら、全角が2byte、半角が1byteで計算するようです。以下の記事で詳しく掲載されていました。（&lt;a href=&quot;https://docs.microsoft.com/ja-jp/sql/t-sql/functions/datalength-transact-sql?view=sql-server-ver15&quot; target=&quot;_blank&quot;&gt;DATALENGTHに関してはこちら&lt;/a&gt;）&lt;/p&gt;&lt;a href=&quot;http://itdiary.info/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/post-1303/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;itdiary.info&lt;/span&gt;&lt;/div&gt;&lt;div&gt;itdiary.info&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;itdiary.info&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まあ、全角で20文字打てる項目を400個弱利用できるので、基幹システムとかじゃなければ、それで不十分になることはあまり無いと思いますが・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;その4：簡単ではあるが、それ故に未熟なコードが出来る可能性が上がる&lt;a href=&quot;#その4簡単ではあるがそれ故に未熟なコードが出来る可能性が上がる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;世間一般的に、ノーコード/ローコードツールは、「プログラミングのスキル/知識がなくても開発できる！」が謳い文句のようです・・・。&lt;/p&gt;&lt;p&gt;この記事にも載っているのですが、このNTTデータ研究所という最大手のITベンダーがそう言っているので、その考え方が共通見解となっていますね・・・。&lt;/p&gt;&lt;a href=&quot;https://project.nikkeibp.co.jp/jpgciof/atcl/19/00003/00008/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;日経BPガバメントテクノロジー&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ノーコード／ローコード開発&lt;/div&gt;&lt;div&gt;2018年頃から、新しい開発手法として急速に注目を集めているのが「ノーコード開発」と「ローコード開発」です。ノーコード開発はソースコードを全く書かずにアプリケーションを開発する手法であり、ローコード開発は少ないソースコードでアプリケーションを開発する手法を指します。&lt;/div&gt;&lt;div&gt;project.nikkeibp.co.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://project.nikkeibp.co.jp/jpgciof/atcl/19/00003/00008/topm.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220219_01-1024x601.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;p&gt;出典：NTTデータ経営研究所&lt;/p&gt;&lt;p&gt;しかしながら、ノーコード/ローコードツールは、あくまでプログラム開発を「補助」するツールであるものです。決して、プログラミングのスキル/知識がなくても開発ができるという代物ではありません。&lt;/p&gt;&lt;p&gt;開発生産性は確かに上がるかもしれませんが、プログラミングのスキル/知識は必要です。&lt;/p&gt;&lt;p&gt;僕が実際に体験した具体例があります。
まず前提として、このOutSystemsでは、クライアントアクションとサーバアクションと、クライアント側で行うアクションとサーバ側で行うアクションをそれぞれ定義できます。&lt;/p&gt;&lt;p&gt;そして、話に入りますと、とある画面のレスポンス速度が妙に遅いので、それを実際に見てみました。
すると、クライアントアクションとサーバーアクションを何回も何回も行ったり来たりしていて、その通信の時間分、遅くなっていたことが判明したのです。
&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220219_10-1024x618.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;p&gt;もう一つあります。&lt;/p&gt;&lt;p&gt;とある画面で表示している項目をすべてCSV出力する処理があったのですが、その処理がメモリ不足で落ちてしまったのです。
その原因の一つが、クライアントアクションで不要な変数を大量に作っていたことでした。
結果的には、変数の量は半分に減らせて（確か、その問題の部分だけで500→250個くらいに減ったような。）、メモリ不足現象も解消しました。&lt;/p&gt;&lt;p&gt;以上、2つ挙げた具体例でも分かるように、製造するにあたってどのようにプログラミングすると、どういう不具合が起きてしまうのかが分かっていない方がプログラムを組んでしまうと、バグが大量に発生する危険性があるわけですね。&lt;/p&gt;&lt;p&gt;なので、先程の「ノーコード/ローコードツールは、プログラミングのスキル/知識がなくても開発できる！」の認識は、あまりにも的外れであり、開発者はプログラミングのスキル/知識を蓄えるべきなのです。
この認識の元、日本国内に性能が低いプログラムが以前より大量製造されるとなると、鳥肌モノですね・・・。&lt;/p&gt;&lt;p&gt;プログラムは、ツールが作るのではなく、人が作るもの・・・ということですね。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上が、今回の記事になります。ローコードとプロコードは一長一短ということですね。（なんかプロコードっていう呼び方も引っ掛かるな・・・）&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Analytics】QiitaとZennのアクセス解析をするための設定方法</title><link>https://endorphinbath.com/posts/googleanalytics-qiita-zenn-setting/</link><guid isPermaLink="true">https://endorphinbath.com/posts/googleanalytics-qiita-zenn-setting/</guid><description>QiitaとZennのアクセスを解析するために、自分のGoogle AnalyticsアカウントのトラッキングIDを設定する方法を紹介します。</description><pubDate>Tue, 19 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;QiitaとZennにGoogleアナリティクスを仕込むぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;教えてくれー！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定方法（Qiita）&lt;a href=&quot;#設定方法qiita&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Qiitaからです。&lt;/p&gt;&lt;p&gt;まず、入力するトラッキングIDは、Googleアナリティクスのホーム画面のこの部分に書いてあります。
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1606&quot; src=&quot;/_astro/01.Bk_iys5l_2hAJfD.webp&quot; srcset=&quot;/_astro/01.Bk_iys5l_Z12OzFa.webp 640w, /_astro/01.Bk_iys5l_1F7A4L.webp 750w, /_astro/01.Bk_iys5l_2ucDoL.webp 828w, /_astro/01.Bk_iys5l_2h0txp.webp 1080w, /_astro/01.Bk_iys5l_1Cw2MD.webp 1280w, /_astro/01.Bk_iys5l_Z1pN01d.webp 1668w, /_astro/01.Bk_iys5l_26Dds9.webp 2048w, /_astro/01.Bk_iys5l_ZboA0H.webp 2560w, /_astro/01.Bk_iys5l_2hAJfD.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Qiitaを開いて、Qiitaのアカウントの設定画面に遷移します。
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1569&quot; src=&quot;/_astro/02.D3eHZrFG_1XCico.webp&quot; srcset=&quot;/_astro/02.D3eHZrFG_Z1VHr7U.webp 640w, /_astro/02.D3eHZrFG_1tqk04.webp 750w, /_astro/02.D3eHZrFG_1ArQUA.webp 828w, /_astro/02.D3eHZrFG_W8m4.webp 1080w, /_astro/02.D3eHZrFG_Z2oohCC.webp 1280w, /_astro/02.D3eHZrFG_Z20b7jS.webp 1668w, /_astro/02.D3eHZrFG_ZTFaPj.webp 2048w, /_astro/02.D3eHZrFG_28TgAU.webp 2560w, /_astro/02.D3eHZrFG_1XCico.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、設定画面から「Googleアナリティクス設定」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1564&quot; src=&quot;/_astro/03.BTRQdoV7_RRjLX.webp&quot; srcset=&quot;/_astro/03.BTRQdoV7_Z2t5DB9.webp 640w, /_astro/03.BTRQdoV7_Z1yE5CB.webp 750w, /_astro/03.BTRQdoV7_15wybF.webp 828w, /_astro/03.BTRQdoV7_Zr3W0A.webp 1080w, /_astro/03.BTRQdoV7_1xHt3M.webp 1280w, /_astro/03.BTRQdoV7_Zy79T3.webp 1668w, /_astro/03.BTRQdoV7_1kF7RX.webp 2048w, /_astro/03.BTRQdoV7_1ScL3C.webp 2560w, /_astro/03.BTRQdoV7_RRjLX.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、この設定画面で、Google AnalyticsのトラッキングIDを入力して、更新します。&lt;/p&gt;&lt;p&gt;これでQiitaの設定が完了です。
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1606&quot; src=&quot;/_astro/04.b5k-zUe5_Z12asme.webp&quot; srcset=&quot;/_astro/04.b5k-zUe5_Zjnb7.webp 640w, /_astro/04.b5k-zUe5_Z1D2V6k.webp 750w, /_astro/04.b5k-zUe5_Z1xthU7.webp 828w, /_astro/04.b5k-zUe5_1wC9CK.webp 1080w, /_astro/04.b5k-zUe5_S8HRY.webp 1280w, /_astro/04.b5k-zUe5_198OD9.webp 1668w, /_astro/04.b5k-zUe5_ZoB5Gq.webp 2048w, /_astro/04.b5k-zUe5_ZMyQmM.webp 2560w, /_astro/04.b5k-zUe5_Z12asme.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定方法（Zenn）&lt;a href=&quot;#設定方法zenn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Zennの場合も、アカウントの設定から設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;3012&quot; height=&quot;1565&quot; src=&quot;/_astro/05.jNo0BTZm_Zgpmwt.webp&quot; srcset=&quot;/_astro/05.jNo0BTZm_Z26kGdH.webp 640w, /_astro/05.jNo0BTZm_1jN4Th.webp 750w, /_astro/05.jNo0BTZm_Z16cp5n.webp 828w, /_astro/05.jNo0BTZm_Z2ikc1X.webp 1080w, /_astro/05.jNo0BTZm_mvvMh.webp 1280w, /_astro/05.jNo0BTZm_KIG61.webp 1668w, /_astro/05.jNo0BTZm_1Ul9Qn.webp 2048w, /_astro/05.jNo0BTZm_Z6gwvk.webp 2560w, /_astro/05.jNo0BTZm_Zgpmwt.webp 3012w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Settings画面から、Google Analyticsの「トラッキングIDを設定」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2442&quot; height=&quot;1610&quot; src=&quot;/_astro/06.Cqt3eHmN_RLJvc.webp&quot; srcset=&quot;/_astro/06.Cqt3eHmN_ZsSvkv.webp 640w, /_astro/06.Cqt3eHmN_Z2aklAM.webp 750w, /_astro/06.Cqt3eHmN_Z25q7ir.webp 828w, /_astro/06.Cqt3eHmN_2bRRcg.webp 1080w, /_astro/06.Cqt3eHmN_ZJexTg.webp 1280w, /_astro/06.Cqt3eHmN_1450xU.webp 1668w, /_astro/06.Cqt3eHmN_yWnoi.webp 2048w, /_astro/06.Cqt3eHmN_RLJvc.webp 2442w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、このポップアップ画面で、トラッキングIDを入力して保存します。すると、Googleアナリティクスでのトラッキングの収集が始まります。
&lt;img loading=&quot;lazy&quot; width=&quot;1134&quot; height=&quot;662&quot; src=&quot;/_astro/07.BtEwz_c8_Z2hvWGy.webp&quot; srcset=&quot;/_astro/07.BtEwz_c8_VSisO.webp 640w, /_astro/07.BtEwz_c8_2fgqp6.webp 750w, /_astro/07.BtEwz_c8_Z1xNhr1.webp 828w, /_astro/07.BtEwz_c8_Zw9F6x.webp 1080w, /_astro/07.BtEwz_c8_Z2hvWGy.webp 1134w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定が出来ていることを確認する&lt;a href=&quot;#設定が出来ていることを確認する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;設定が出来ていることを確認します。&lt;/p&gt;&lt;p&gt;設定する前には、ユーザー数が0になっていましたが・・・
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1606&quot; src=&quot;/_astro/01.Bk_iys5l_2hAJfD.webp&quot; srcset=&quot;/_astro/01.Bk_iys5l_Z12OzFa.webp 640w, /_astro/01.Bk_iys5l_1F7A4L.webp 750w, /_astro/01.Bk_iys5l_2ucDoL.webp 828w, /_astro/01.Bk_iys5l_2h0txp.webp 1080w, /_astro/01.Bk_iys5l_1Cw2MD.webp 1280w, /_astro/01.Bk_iys5l_Z1pN01d.webp 1668w, /_astro/01.Bk_iys5l_26Dds9.webp 2048w, /_astro/01.Bk_iys5l_ZboA0H.webp 2560w, /_astro/01.Bk_iys5l_2hAJfD.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ウェブサイトから受信したデータはまだないそうですが、ユーザーが1人閲覧したことが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1602&quot; src=&quot;/_astro/08.DwU0Avaa_Z28L6yB.webp&quot; srcset=&quot;/_astro/08.DwU0Avaa_20jS2K.webp 640w, /_astro/08.DwU0Avaa_mAk7x.webp 750w, /_astro/08.DwU0Avaa_s9XiK.webp 828w, /_astro/08.DwU0Avaa_Z2f0sWs.webp 1080w, /_astro/08.DwU0Avaa_2bHe6H.webp 1280w, /_astro/08.DwU0Avaa_Z7qYFu.webp 1668w, /_astro/08.DwU0Avaa_9LAuD.webp 2048w, /_astro/08.DwU0Avaa_Z249FGq.webp 2560w, /_astro/08.DwU0Avaa_Z28L6yB.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、QiitaとZennに対して、ユニバーサルアナリティクス（UA）から、Googleアナリティクス4（GA4）に移行できましたね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;再スタート切れました！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Bash、Zsh】Macでスクショしたファイル名を連番にワンライナーでリネームする</title><link>https://endorphinbath.com/posts/bash-mac-rename-screenshot/</link><guid isPermaLink="true">https://endorphinbath.com/posts/bash-mac-rename-screenshot/</guid><description>半角スペースが入ってしまっているファイル名を、連番にリネームできるBashおよびZshで使えるワンライナーのコマンドを紹介します。ワンライナーなので、いちいちシェルファイルのパスを気にしたりする必要がありません。</description><pubDate>Mon, 18 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、ファイルを連番にリネームしたいなあ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほうほう、では今回はそんなことができるスクリプトをBash上で行えるように、しちゃいましょう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、でもMacでスクショした時のファイル名って、半角スペースが入ってるんだよなあ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、半角スペースにも対応するようにしちゃいましょう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、シェルファイルを実行するとなると、いちいちファイルのパスを指定しなきゃいけないから、ワンライナーで実行できたらなあ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、ファイルを使わずにワンライナーで実行できるようにしちゃいましょう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Macでスクリーンショットした時のファイル名&lt;a href=&quot;#macでスクリーンショットした時のファイル名&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Macでは、ショートカットキー：command+Shift+3や、command+Shift+4でスクリーンショットが取れますよね。&lt;/p&gt;&lt;p&gt;command+Shift+3
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1964&quot; src=&quot;/_astro/01.Dj2HvQHa_f7ve5.webp&quot; srcset=&quot;/_astro/01.Dj2HvQHa_20s9Ot.webp 640w, /_astro/01.Dj2HvQHa_Z2e0HlY.webp 750w, /_astro/01.Dj2HvQHa_o3CP7.webp 828w, /_astro/01.Dj2HvQHa_s4RgJ.webp 1080w, /_astro/01.Dj2HvQHa_Z2oV1y0.webp 1280w, /_astro/01.Dj2HvQHa_1NKMDp.webp 1668w, /_astro/01.Dj2HvQHa_Z9eFoq.webp 2048w, /_astro/01.Dj2HvQHa_Z12Sd6a.webp 2560w, /_astro/01.Dj2HvQHa_f7ve5.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;command+Shift+4
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1964&quot; src=&quot;/_astro/02.C_dfav-y_1XzRc2.webp&quot; srcset=&quot;/_astro/02.C_dfav-y_zN9Vy.webp 640w, /_astro/02.C_dfav-y_1qwqz2.webp 750w, /_astro/02.C_dfav-y_Z11Am2N.webp 828w, /_astro/02.C_dfav-y_2bxeeG.webp 1080w, /_astro/02.C_dfav-y_ZFsEA3.webp 1280w, /_astro/02.C_dfav-y_Z1wWYcz.webp 1668w, /_astro/02.C_dfav-y_1zdFyw.webp 2048w, /_astro/02.C_dfav-y_Fz8QM.webp 2560w, /_astro/02.C_dfav-y_1XzRc2.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;command+Shift+5
&lt;img loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;1964&quot; src=&quot;/_astro/03.BCnhw0IA_Z1GXEHd.webp&quot; srcset=&quot;/_astro/03.BCnhw0IA_ixRQc.webp 640w, /_astro/03.BCnhw0IA_19h9tF.webp 750w, /_astro/03.BCnhw0IA_Z1iPD8a.webp 828w, /_astro/03.BCnhw0IA_Z1u1iEy.webp 1080w, /_astro/03.BCnhw0IA_I9VjD.webp 1280w, /_astro/03.BCnhw0IA_Z8knhS.webp 1668w, /_astro/03.BCnhw0IA_Z26kQkI.webp 2048w, /_astro/03.BCnhw0IA_25cJLt.webp 2560w, /_astro/03.BCnhw0IA_Z1GXEHd.webp 3024w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、スクリーンショットを撮った時のファイル名は、デフォルトだとこのように命名されます。半角スペースが入ってしまうのです。これが後でめんどくさいことになります。
&lt;img loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;550&quot; src=&quot;/_astro/04.C61wo1If_282PkC.webp&quot; srcset=&quot;/_astro/04.C61wo1If_Z1nDLxD.webp 640w, /_astro/04.C61wo1If_Z1grGoF.webp 750w, /_astro/04.C61wo1If_ZgO36Y.webp 828w, /_astro/04.C61wo1If_282PkC.webp 886w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、今回は、この「スクリーンショット (XXX).png」から、別のファイル名にリネームする処理を、BashおよびZshでやってみたいと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;方法その1：半角スペースを考慮しないリネーム&lt;a href=&quot;#方法その1半角スペースを考慮しないリネーム&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;半角スペースを考慮しないリネームは、これになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;img_&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1v&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{ printf &quot;mv %s &apos;&lt;/span&gt;&lt;span&gt;$prefix&lt;/span&gt;&lt;span&gt;&apos;%03d.&apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos;\n&quot;, $0, NR }&apos;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ls -1v&lt;/code&gt;で、ファイルを名前順に取得します。&lt;/p&gt;&lt;p&gt;そして、その取得結果を&lt;code&gt;awk&lt;/code&gt;に渡してリネームしていきます。
&lt;code&gt;extension&lt;/code&gt;に変更後の拡張子、&lt;code&gt;prefix&lt;/code&gt;にファイルのプリフィックス、そして、3桁の連番でファイルをリネームしていきます。&lt;/p&gt;&lt;p&gt;実行するとこんな感じにリネームされます。&lt;/p&gt;&lt;p&gt;変更前
&lt;img loading=&quot;lazy&quot; width=&quot;1036&quot; height=&quot;822&quot; src=&quot;/_astro/05.BZAN5XTr_1dTCFe.webp&quot; srcset=&quot;/_astro/05.BZAN5XTr_Z1h1Wd3.webp 640w, /_astro/05.BZAN5XTr_Z11tI9J.webp 750w, /_astro/05.BZAN5XTr_1icqIT.webp 828w, /_astro/05.BZAN5XTr_1dTCFe.webp 1036w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ターミナルで入力
&lt;img loading=&quot;lazy&quot; width=&quot;1416&quot; height=&quot;154&quot; src=&quot;/_astro/06.js00nZxy_2cQR0K.webp&quot; srcset=&quot;/_astro/06.js00nZxy_tdRGt.webp 640w, /_astro/06.js00nZxy_Z27O4iu.webp 750w, /_astro/06.js00nZxy_2vG9E4.webp 828w, /_astro/06.js00nZxy_TEemw.webp 1080w, /_astro/06.js00nZxy_Z28zrpq.webp 1280w, /_astro/06.js00nZxy_2cQR0K.webp 1416w&quot; /&gt;&lt;/p&gt;&lt;p&gt;変更後
&lt;img loading=&quot;lazy&quot; width=&quot;1030&quot; height=&quot;818&quot; src=&quot;/_astro/07.C4AXuAjK_ZDUX2N.webp&quot; srcset=&quot;/_astro/07.C4AXuAjK_Z1TMLNJ.webp 640w, /_astro/07.C4AXuAjK_Z2eh3lx.webp 750w, /_astro/07.C4AXuAjK_5p6x6.webp 828w, /_astro/07.C4AXuAjK_ZDUX2N.webp 1030w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;方法その2：半角スペースを考慮するリネーム&lt;a href=&quot;#方法その2半角スペースを考慮するリネーム&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;しかしながら、スペースが入っている状態だと、上記の書き方ではリネームできません。こんなエラーが表示されてしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1404&quot; height=&quot;280&quot; src=&quot;/_astro/08.CDbEU7TH_Z1bmqUN.webp&quot; srcset=&quot;/_astro/08.CDbEU7TH_5mt1e.webp 640w, /_astro/08.CDbEU7TH_Z1QKFQ6.webp 750w, /_astro/08.CDbEU7TH_Z1epX2l.webp 828w, /_astro/08.CDbEU7TH_bJXAg.webp 1080w, /_astro/08.CDbEU7TH_29IYk2.webp 1280w, /_astro/08.CDbEU7TH_Z1bmqUN.webp 1404w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このエラーが起きる原因は、&lt;code&gt;mv&lt;/code&gt;の部分の第１引数の&lt;code&gt;%s&lt;/code&gt;に半角スペースが入っているので、上手く引数が認識できていなかったためです。&lt;/p&gt;&lt;p&gt;なので、&lt;code&gt;&amp;lt;code&amp;gt;%s&lt;/code&gt;の周りにエスケープしたダブルクォーテーションで括ってあげます。&lt;/p&gt;&lt;p&gt;半角を考慮したコマンド&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;img_&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1v&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{ printf &quot;mv \&quot;%s\&quot; &apos;&lt;/span&gt;&lt;span&gt;$prefix&lt;/span&gt;&lt;span&gt;&apos;%03d.&apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos;\n&quot;, $0, NR }&apos;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると、晴れて半角スペース付きのファイルに対しても、リネームすることが出来ました！&lt;/p&gt;&lt;p&gt;変換前
&lt;img loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;686&quot; src=&quot;/_astro/09.C66ZhSyt_167Hlv.webp&quot; srcset=&quot;/_astro/09.C66ZhSyt_wxd5E.webp 640w, /_astro/09.C66ZhSyt_Zn9hOq.webp 750w, /_astro/09.C66ZhSyt_Z193KGL.webp 828w, /_astro/09.C66ZhSyt_Z2sj4yu.webp 1080w, /_astro/09.C66ZhSyt_167Hlv.webp 1272w&quot; /&gt;&lt;/p&gt;&lt;p&gt;変換後
&lt;img loading=&quot;lazy&quot; width=&quot;1294&quot; height=&quot;676&quot; src=&quot;/_astro/10.BY1pBKJ2_ZrKVMh.webp&quot; srcset=&quot;/_astro/10.BY1pBKJ2_SmbNc.webp 640w, /_astro/10.BY1pBKJ2_Z1X11Fd.webp 750w, /_astro/10.BY1pBKJ2_UOHM7.webp 828w, /_astro/10.BY1pBKJ2_Z1vrRoy.webp 1080w, /_astro/10.BY1pBKJ2_ZsfcOl.webp 1280w, /_astro/10.BY1pBKJ2_ZrKVMh.webp 1294w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに出来なかった書き方その１：IFSをいじる方法&lt;a href=&quot;#ちなみに出来なかった書き方その１ifsをいじる方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、試してみて出来なかった方法も掲載します。&lt;/p&gt;&lt;p&gt;このサイトのように、シェルの環境変数&lt;code&gt;IFS&lt;/code&gt;をいじりました。&lt;/p&gt;&lt;a href=&quot;https://www.server-memo.net/shellscript/ifs.html&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.server-memo.net/wp-content/themes/cocoon-master/images/site-icon32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;server-memo.net&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【シェルスクリプト】IFSで区切り文字（デリミタ）を変更する方法&lt;/div&gt;&lt;div&gt;環境変数IFSについて環境変数「IFS」（Internal Filed Separator）には、bashの場合「スペース」「タブ」「改行」（$&amp;amp;amp;#039; \t\n&amp;amp;amp;#039;）といった値が初期設定されていて、これらが文字の区切りとして認識されています。ファ...&lt;/div&gt;&lt;div&gt;www.server-memo.net&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.server-memo.net/wp-content/themes/cocoon-master/screenshot.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;失敗したコマンド1&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;OLDIFS&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$IFS&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;IFS&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;img_&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1v&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{ printf &quot;mv %s &apos;&lt;/span&gt;&lt;span&gt;$prefix&lt;/span&gt;&lt;span&gt;&apos;%03d.&apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos;\n&quot;, $0, NR }&apos;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;IFS&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$OLDIFS&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、この方法だと、&lt;code&gt;&quot;mv %s ...&quot;&lt;/code&gt;の中は直らないみたいなので、失敗しました。&lt;/p&gt;&lt;p&gt;出力&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_001.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_002.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_003.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_004.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_005.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_006.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_007.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_008.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_009.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに出来なかった書き方その２：awkのFオプションをいじる方法&lt;a href=&quot;#ちなみに出来なかった書き方その２awkのfオプションをいじる方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらも出来なかった方法で、&lt;code&gt;awk&lt;/code&gt;のところの&lt;code&gt;F&lt;/code&gt;オプション値をカンマとかで指定した方法です。
（””で指定すると、実行されるまでもなく「&lt;code&gt;awk: no program given&lt;/code&gt;」と怒られるので、何かを指定する必要があります。）&lt;/p&gt;&lt;p&gt;失敗したコマンド2&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;img_&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-1v&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-F&lt;/span&gt;&lt;span&gt;&quot;,&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{ printf &quot;mv %s &apos;&lt;/span&gt;&lt;span&gt;$prefix&lt;/span&gt;&lt;span&gt;&apos;%03d.&apos;&lt;/span&gt;&lt;span&gt;$extension&lt;/span&gt;&lt;span&gt;&apos;\n&quot;, $0, NR }&apos;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この書き方でも、同じエラーになります。どうやら、これでも&lt;code&gt;&quot;mv %s ...&quot;&lt;/code&gt;の中は直らないみたいです。&lt;/p&gt;&lt;p&gt;出力&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_001.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_002.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_003.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_004.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_005.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_006.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_007.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_008.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mv: img_009.jpg is not a directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うお〜、どんどんリネームできるぞ〜これ。めっちゃ楽になった！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;また、よく使う処理があったら、ワンライナーで作ってみますか。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】inputを使った処理をpytestでunittestしたい（monkeypatchでmockする）</title><link>https://endorphinbath.com/posts/python-pytest-input-by-monkeypatch/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-pytest-input-by-monkeypatch/</guid><description>Pythonスクリプトをpytestする時に、input()のようなビルトイン関数が入っている時にmockする方法を紹介します。monkeypatchを使用します。</description><pubDate>Sun, 17 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う〜ん、この処理、中にinputが入ってるんだよな・・・。どうやって、テストしようか・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、その場合、mockしてしまおうか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なるほどねえ、でも、inputってビルトイン関数だよね？ その場合、どうするの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回紹介する方法で、ビルトイン関数もmockできるから試してみてくれ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回、テストしたいコード&lt;a href=&quot;#今回テストしたいコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、このコードをpytestしたいと思います。中には、inputを使ったインタラクティブ処理が混ざっています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;input_controller.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeat_input_with_multi_choices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;first_message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;choice_list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;first_message    : String message for the first input.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice_list      : List of String choice.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_input_correct : Boolean input is correct or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_first_input   : Boolean this input is the first time or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message    : String message for input.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_chr        : String input character.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(first_message) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;first_message must be str type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(choice_list) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;choice_list must be list type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_input_correct &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_first_input   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_chr       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; is_input_correct &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; is_first_input &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Create message for the first input.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; first_message&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Create message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Retry.&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; choice_list &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; []:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos; [ &quot;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(choice_list)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;{choice}&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;choice_list[i])&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos; or &quot;&lt;/span&gt;&lt;span&gt;{choice}&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;choice_list[i])&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_message &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos; ]: &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_chr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(input_message)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Check by message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; input_chr &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(input_chr) &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(input_chr) &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_input_correct &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_chr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(input_chr)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; choice_list &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; []:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_input_correct &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; choice &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; choice_list:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; input_chr &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; choice:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_input_correct &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_first_input &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; input_chr&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;成功したケース&lt;a href=&quot;#成功したケース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;成功したケースは表題の通り、monkeypatchを引数に持ってきて、ビルトイン関数である&lt;code&gt;input()&lt;/code&gt;を&lt;/p&gt;&lt;p&gt;&lt;code&gt;test_input_controller.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.landmasterlibrarylocal.input_controller &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_Generaltool&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_repeat_input_with_multi_choices_1_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;first_message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Select!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice_list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;B&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;monkeypatch.&lt;/span&gt;&lt;span&gt;setattr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;builtins.input&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeat_input_with_multi_choices&lt;/span&gt;&lt;span&gt;(first_message, choice_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;================================================================================================&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;session&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;starts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;darwin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3.9.7,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest-7.1.1,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pluggy-0.13.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rootdir:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/Users/landmaster/Downloads/landmasterlibrarylocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;plugins:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;freezegun-0.4.2,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;anyio-2.2.0,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mock-3.7.0,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cov-3.0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;collected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;test/test_input_controller.py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=================================================================================================&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;passed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1.69s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;失敗したケースその１&lt;a href=&quot;#失敗したケースその１&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、失敗したケースになりますが、このケースだと、”&lt;code&gt;OSError: pytest: reading from stdin while output is captured! Consider using -s&lt;/code&gt;.”と表示されます。&lt;/p&gt;&lt;p&gt;エラー文の意味は、「インプット時のメッセージが出る前にインプットする内容を読み取っている。」ということなんですかね？ よく分かりませんでした・・・が、とりあえずこれでは出来ないらしいと。&lt;/p&gt;&lt;p&gt;そこで、&lt;code&gt;-s&lt;/code&gt;のオプションを付けて再度pytestを実行すると、インタラクティブモードが途中で挟んできますので、自動化出来ません。&lt;/p&gt;&lt;p&gt;&lt;code&gt;test_input_controller.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.landmasterlibrarylocal.input_controller &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_Generaltool&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mock&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;builtins.input&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&apos;A&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_repeat_input_with_multi_choices_1_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;monkeypatch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;first_message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Select!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice_list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;B&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeat_input_with_multi_choices&lt;/span&gt;&lt;span&gt;(first_message, choice_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;===================================================================================================== FAILURES ======================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;_____________________________________________________________________________ Test_Generaltool.test_repeat_input_with_multi_choices_1_1 _____________________________________________________________________________&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;self = &amp;lt;test.test_input_controller.Test_Generaltool object at 0x7ff150e45550&amp;gt;, monkeypatch = &amp;lt;_pytest.monkeypatch.MonkeyPatch object at 0x7ff150e40eb0&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@pytest.mark.mock(&apos;builtins.input&apos;, lambda:&apos;A&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;def test_repeat_input_with_multi_choices_1_1(self):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;first_message = &quot;Select!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice_list = [&quot;A&quot;, &quot;B&quot;, &quot;C&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt;       actual = repeat_input_with_multi_choices(first_message, choice_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;test/test_input_controller.py:28:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/landmasterlibrarylocal/input_controller.py:68: in repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;input_chr = input(input_message)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;self = &amp;lt;_pytest.capture.DontReadFromInput object at 0x7ff15078e430&amp;gt;, args = ()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;def read(self, *args):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;gt;       raise OSError(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;pytest: reading from stdin while output is captured!  Consider using `-s`.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E       OSError: pytest: reading from stdin while output is captured!  Consider using `-s`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;../../opt/anaconda3/lib/python3.9/site-packages/_pytest/capture.py:192: OSError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;----------------------------------------------------------------------------------------------- Captured stdout call ------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Select!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;============================================================================================== short test summary info ==============================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FAILED test/test_input_controller.py::Test_Generaltool::test_repeat_input_with_multi_choices_1_1 - OSError: pytest: reading from stdin while output is captured!  Consider using `-s`.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;================================================================================================ 1 failed in 1.70s ==================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;失敗したケースその２&lt;a href=&quot;#失敗したケースその２&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これも失敗したケースになります。「builtinsの中に”input”とかいう属性は無いよ。」ということなんですかね。&lt;/p&gt;&lt;p&gt;でも、&lt;code&gt;&quot;input&quot;&lt;/code&gt;がキーの中にあると思うんだけどな・・・。まあ、これもでとりあえず出来ないらしい。&lt;/p&gt;&lt;p&gt;&lt;code&gt;test_input_controller.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.landmasterlibrarylocal.input_controller &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_Generaltool&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_repeat_input_with_multi_choices_1_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocker&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;first_message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Select!&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;choice_list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;A&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;B&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;C&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mocker.patch.&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__builtins__&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;input&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt;: choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeat_input_with_multi_choices&lt;/span&gt;&lt;span&gt;(first_message, choice_list)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; choice_list[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;（略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;===================================================================================================== FAILURES ======================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;_____________________________________________________________________________ Test_Generaltool.test_repeat_input_with_multi_choices_1_1 _____________________________________________________________________________&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;（略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           AttributeError: {&apos;__name__&apos;: &apos;builtins&apos;, &apos;__doc__&apos;: &quot;Built-in functions, exceptions, and other objects.\n\nNoteworthy: None is the `nil&apos; object; Ellipsis represents `...&apos; in slices.&quot;, &apos;__package__&apos;: &apos;&apos;, &apos;__loader__&apos;: &amp;lt;class &apos;_frozen_importlib.BuiltinImporter&apos;&amp;gt;, &apos;__spec__&apos;: ModuleSpec(name=&apos;builtins&apos;, loader=&amp;lt;class &apos;_frozen_importlib.BuiltinImporter&apos;&amp;gt;, origin=&apos;built-in&apos;), &apos;__build_class__&apos;: &amp;lt;built-in function __build_class__&amp;gt;, &apos;__import__&apos;: &amp;lt;built-in function __import__&amp;gt;, &apos;abs&apos;: &amp;lt;built-in function abs&amp;gt;, &apos;all&apos;: &amp;lt;built-in function all&amp;gt;, &apos;any&apos;: &amp;lt;built-in function any&amp;gt;, &apos;ascii&apos;: &amp;lt;built-in function ascii&amp;gt;, &apos;bin&apos;: &amp;lt;built-in function bin&amp;gt;, &apos;breakpoint&apos;: &amp;lt;built-in function breakpoint&amp;gt;, &apos;callable&apos;: &amp;lt;built-in function callable&amp;gt;, &apos;chr&apos;: &amp;lt;built-in function chr&amp;gt;, &apos;compile&apos;: &amp;lt;built-in function compile&amp;gt;, &apos;delattr&apos;: &amp;lt;built-in function delattr&amp;gt;, &apos;dir&apos;: &amp;lt;built-in function dir&amp;gt;, &apos;divmod&apos;: &amp;lt;built-in function divmod&amp;gt;, &apos;eval&apos;: &amp;lt;built-in function eval&amp;gt;, &apos;exec&apos;: &amp;lt;built-in function exec&amp;gt;, &apos;format&apos;: &amp;lt;built-in function format&amp;gt;, &apos;getattr&apos;: &amp;lt;built-in function getattr&amp;gt;, &apos;globals&apos;: &amp;lt;built-in function globals&amp;gt;, &apos;hasattr&apos;: &amp;lt;built-in function hasattr&amp;gt;, &apos;hash&apos;: &amp;lt;built-in function hash&amp;gt;, &apos;hex&apos;: &amp;lt;built-in function hex&amp;gt;, &apos;id&apos;: &amp;lt;built-in function id&amp;gt;, &apos;input&apos;: &amp;lt;built-in function input&amp;gt;, &apos;isinstance&apos;: &amp;lt;built-in function isinstance&amp;gt;, &apos;issubclass&apos;: &amp;lt;built-in function issubclass&amp;gt;, &apos;iter&apos;: &amp;lt;built-in function iter&amp;gt;, &apos;len&apos;: &amp;lt;built-in function len&amp;gt;, &apos;locals&apos;: &amp;lt;built-in function locals&amp;gt;, &apos;max&apos;: &amp;lt;built-in function max&amp;gt;, &apos;min&apos;: &amp;lt;built-in function min&amp;gt;, &apos;next&apos;: &amp;lt;built-in function next&amp;gt;, &apos;oct&apos;: &amp;lt;built-in function oct&amp;gt;, &apos;ord&apos;: &amp;lt;built-in function ord&amp;gt;, &apos;pow&apos;: &amp;lt;built-in function pow&amp;gt;, &apos;print&apos;: &amp;lt;built-in function print&amp;gt;, &apos;repr&apos;: &amp;lt;built-in function repr&amp;gt;, &apos;round&apos;: &amp;lt;built-in function round&amp;gt;, &apos;setattr&apos;: &amp;lt;built-in function setattr&amp;gt;, &apos;sorted&apos;: &amp;lt;built-in function sorted&amp;gt;, &apos;sum&apos;: &amp;lt;built-in function sum&amp;gt;, &apos;vars&apos;: &amp;lt;built-in function vars&amp;gt;, &apos;None&apos;: None, &apos;Ellipsis&apos;: Ellipsis, &apos;NotImplemented&apos;: NotImplemented, &apos;False&apos;: False, &apos;True&apos;: True, &apos;bool&apos;: &amp;lt;class &apos;bool&apos;&amp;gt;, &apos;memoryview&apos;: &amp;lt;class &apos;memoryview&apos;&amp;gt;, &apos;bytearray&apos;: &amp;lt;class &apos;bytearray&apos;&amp;gt;, &apos;bytes&apos;: &amp;lt;class &apos;bytes&apos;&amp;gt;, &apos;classmethod&apos;: &amp;lt;class &apos;classmethod&apos;&amp;gt;, &apos;complex&apos;: &amp;lt;class &apos;complex&apos;&amp;gt;, &apos;dict&apos;: &amp;lt;class &apos;dict&apos;&amp;gt;, &apos;enumerate&apos;: &amp;lt;class &apos;enumerate&apos;&amp;gt;, &apos;filter&apos;: &amp;lt;class &apos;filter&apos;&amp;gt;, &apos;float&apos;: &amp;lt;class &apos;float&apos;&amp;gt;, &apos;frozenset&apos;: &amp;lt;class &apos;frozenset&apos;&amp;gt;, &apos;property&apos;: &amp;lt;class &apos;property&apos;&amp;gt;, &apos;int&apos;: &amp;lt;class &apos;int&apos;&amp;gt;, &apos;list&apos;: &amp;lt;class &apos;list&apos;&amp;gt;, &apos;map&apos;: &amp;lt;class &apos;map&apos;&amp;gt;, &apos;object&apos;: &amp;lt;class &apos;object&apos;&amp;gt;, &apos;range&apos;: &amp;lt;class &apos;range&apos;&amp;gt;, &apos;reversed&apos;: &amp;lt;class &apos;reversed&apos;&amp;gt;, &apos;set&apos;: &amp;lt;class &apos;set&apos;&amp;gt;, &apos;slice&apos;: &amp;lt;class &apos;slice&apos;&amp;gt;, &apos;staticmethod&apos;: &amp;lt;class &apos;staticmethod&apos;&amp;gt;, &apos;str&apos;: &amp;lt;class &apos;str&apos;&amp;gt;, &apos;super&apos;: &amp;lt;class &apos;super&apos;&amp;gt;, &apos;tuple&apos;: &amp;lt;class &apos;tuple&apos;&amp;gt;, &apos;type&apos;: &amp;lt;class &apos;type&apos;&amp;gt;, &apos;zip&apos;: &amp;lt;class &apos;zip&apos;&amp;gt;, &apos;__debug__&apos;: True, &apos;BaseException&apos;: &amp;lt;class &apos;BaseException&apos;&amp;gt;, &apos;Exception&apos;: &amp;lt;class &apos;Exception&apos;&amp;gt;, &apos;TypeError&apos;: &amp;lt;class &apos;TypeError&apos;&amp;gt;, &apos;StopAsyncIteration&apos;: &amp;lt;class &apos;StopAsyncIteration&apos;&amp;gt;, &apos;StopIteration&apos;: &amp;lt;class &apos;StopIteration&apos;&amp;gt;, &apos;GeneratorExit&apos;: &amp;lt;class &apos;GeneratorExit&apos;&amp;gt;, &apos;SystemExit&apos;: &amp;lt;class &apos;SystemExit&apos;&amp;gt;, &apos;KeyboardInterrupt&apos;: &amp;lt;class &apos;KeyboardInterrupt&apos;&amp;gt;, &apos;ImportError&apos;: &amp;lt;class &apos;ImportError&apos;&amp;gt;, &apos;ModuleNotFoundError&apos;: &amp;lt;class &apos;ModuleNotFoundError&apos;&amp;gt;, &apos;OSError&apos;: &amp;lt;class &apos;OSError&apos;&amp;gt;, &apos;EnvironmentError&apos;: &amp;lt;class &apos;OSError&apos;&amp;gt;, &apos;IOError&apos;: &amp;lt;class &apos;OSError&apos;&amp;gt;, &apos;EOFError&apos;: &amp;lt;class &apos;EOFError&apos;&amp;gt;, &apos;RuntimeError&apos;: &amp;lt;class &apos;RuntimeError&apos;&amp;gt;, &apos;RecursionError&apos;: &amp;lt;class &apos;RecursionError&apos;&amp;gt;, &apos;NotImplementedError&apos;: &amp;lt;class &apos;NotImplementedError&apos;&amp;gt;, &apos;NameError&apos;: &amp;lt;class &apos;NameError&apos;&amp;gt;, &apos;UnboundLocalError&apos;: &amp;lt;class &apos;UnboundLocalError&apos;&amp;gt;, &apos;AttributeError&apos;: &amp;lt;class &apos;AttributeError&apos;&amp;gt;, &apos;SyntaxError&apos;: &amp;lt;class &apos;SyntaxError&apos;&amp;gt;, &apos;IndentationError&apos;: &amp;lt;class &apos;IndentationError&apos;&amp;gt;, &apos;TabError&apos;: &amp;lt;class &apos;TabError&apos;&amp;gt;, &apos;LookupError&apos;: &amp;lt;class &apos;LookupError&apos;&amp;gt;, &apos;IndexError&apos;: &amp;lt;class &apos;IndexError&apos;&amp;gt;, &apos;KeyError&apos;: &amp;lt;class &apos;KeyError&apos;&amp;gt;, &apos;ValueError&apos;: &amp;lt;class &apos;ValueError&apos;&amp;gt;, &apos;UnicodeError&apos;: &amp;lt;class &apos;UnicodeError&apos;&amp;gt;, &apos;UnicodeEncodeError&apos;: &amp;lt;class &apos;UnicodeEncodeError&apos;&amp;gt;, &apos;UnicodeDecodeError&apos;: &amp;lt;class &apos;UnicodeDecodeError&apos;&amp;gt;, &apos;UnicodeTranslateError&apos;: &amp;lt;class &apos;UnicodeTranslateError&apos;&amp;gt;, &apos;AssertionError&apos;: &amp;lt;class &apos;AssertionError&apos;&amp;gt;, &apos;ArithmeticError&apos;: &amp;lt;class &apos;ArithmeticError&apos;&amp;gt;, &apos;FloatingPointError&apos;: &amp;lt;class &apos;FloatingPointError&apos;&amp;gt;, &apos;OverflowError&apos;: &amp;lt;class &apos;OverflowError&apos;&amp;gt;, &apos;ZeroDivisionError&apos;: &amp;lt;class &apos;ZeroDivisionError&apos;&amp;gt;, &apos;SystemError&apos;: &amp;lt;class &apos;SystemError&apos;&amp;gt;, &apos;ReferenceError&apos;: &amp;lt;class &apos;ReferenceError&apos;&amp;gt;, &apos;MemoryError&apos;: &amp;lt;class &apos;MemoryError&apos;&amp;gt;, &apos;BufferError&apos;: &amp;lt;class &apos;BufferError&apos;&amp;gt;, &apos;Warning&apos;: &amp;lt;class &apos;Warning&apos;&amp;gt;, &apos;UserWarning&apos;: &amp;lt;class &apos;UserWarning&apos;&amp;gt;, &apos;DeprecationWarning&apos;: &amp;lt;class &apos;DeprecationWarning&apos;&amp;gt;, &apos;PendingDeprecationWarning&apos;: &amp;lt;class &apos;PendingDeprecationWarning&apos;&amp;gt;, &apos;SyntaxWarning&apos;: &amp;lt;class &apos;SyntaxWarning&apos;&amp;gt;, &apos;RuntimeWarning&apos;: &amp;lt;class &apos;RuntimeWarning&apos;&amp;gt;, &apos;FutureWarning&apos;: &amp;lt;class &apos;FutureWarning&apos;&amp;gt;, &apos;ImportWarning&apos;: &amp;lt;class &apos;ImportWarning&apos;&amp;gt;, &apos;UnicodeWarning&apos;: &amp;lt;class &apos;UnicodeWarning&apos;&amp;gt;, &apos;BytesWarning&apos;: &amp;lt;class &apos;BytesWarning&apos;&amp;gt;, &apos;ResourceWarning&apos;: &amp;lt;class &apos;ResourceWarning&apos;&amp;gt;, &apos;ConnectionError&apos;: &amp;lt;class &apos;ConnectionError&apos;&amp;gt;, &apos;BlockingIOError&apos;: &amp;lt;class &apos;BlockingIOError&apos;&amp;gt;, &apos;BrokenPipeError&apos;: &amp;lt;class &apos;BrokenPipeError&apos;&amp;gt;, &apos;ChildProcessError&apos;: &amp;lt;class &apos;ChildProcessError&apos;&amp;gt;, &apos;ConnectionAbortedError&apos;: &amp;lt;class &apos;ConnectionAbortedError&apos;&amp;gt;, &apos;ConnectionRefusedError&apos;: &amp;lt;class &apos;ConnectionRefusedError&apos;&amp;gt;, &apos;ConnectionResetError&apos;: &amp;lt;class &apos;ConnectionResetError&apos;&amp;gt;, &apos;FileExistsError&apos;: &amp;lt;class &apos;FileExistsError&apos;&amp;gt;, &apos;FileNotFoundError&apos;: &amp;lt;class &apos;FileNotFoundError&apos;&amp;gt;, &apos;IsADirectoryError&apos;: &amp;lt;class &apos;IsADirectoryError&apos;&amp;gt;, &apos;NotADirectoryError&apos;: &amp;lt;class &apos;NotADirectoryError&apos;&amp;gt;, &apos;InterruptedError&apos;: &amp;lt;class &apos;InterruptedError&apos;&amp;gt;, &apos;PermissionError&apos;: &amp;lt;class &apos;PermissionError&apos;&amp;gt;, &apos;ProcessLookupError&apos;: &amp;lt;class &apos;ProcessLookupError&apos;&amp;gt;, &apos;TimeoutError&apos;: &amp;lt;class &apos;TimeoutError&apos;&amp;gt;, &apos;open&apos;: &amp;lt;built-in function open&amp;gt;, &apos;quit&apos;: Use quit() or Ctrl-D (i.e. EOF) to exit, &apos;exit&apos;: Use exit() or Ctrl-D (i.e. EOF) to exit, &apos;copyright&apos;: Copyright (c) 2001-2021 Python Software Foundation.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           All Rights Reserved.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           Copyright (c) 2000 BeOpen.com.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           All Rights Reserved.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           Copyright (c) 1995-2001 Corporation for National Research Initiatives.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           All Rights Reserved.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E           All Rights Reserved., &apos;credits&apos;:     Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E               for supporting Python development.  See www.python.org for more information., &apos;license&apos;: Type license() to see the full license text, &apos;help&apos;: Type help() for interactive help, or help(object) for help about object.} does not have the attribute &apos;input&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;../../opt/anaconda3/lib/python3.9/unittest/mock.py:1378: AttributeError&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;============================================================================================== short test summary info ==============================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FAILED test/test_input_controller.py::Test_Generaltool::test_repeat_input_with_multi_choices_1_1 - AttributeError: {&apos;__name__&apos;: &apos;builtins&apos;, &apos;__doc__&apos;: &quot;Built-in functions, exceptions, and other objects.\n\nNote...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;================================================================================================= 1 failed in 1.76s =================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やったあ。ビルトイン関数も自動化出来たぞおお。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;mockerで出来る方法を探したけど、見つからなかったな・・・また機会があれば、格闘してみるか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;monkeypatchって、なんか可愛いよねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】pytestで同じディレクトリのモジュールをimportして、&quot;ModuleNotFoundError: No module named&quot;を出さなくする</title><link>https://endorphinbath.com/posts/python-pytest-importing-same-dir-modules/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-pytest-importing-same-dir-modules/</guid><description>Pythonスクリプトをpytestするとき、&quot;ModuleNotFoundError: No module named&quot;が表示されてしまった場合、この記事の方法でそのエラーが解決するかも。</description><pubDate>Sat, 16 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、`ModuleNotFoundError: No module named`だぁぁー！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;importするときによく出るやつか。これがめんどいよな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のディレクトリ構成&lt;a href=&quot;#今回のディレクトリ構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、紹介するimport方法におけるディレクトリ構成は、以下になっています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── landmasterlibrarylocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       ├── file_list_getter.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│       ├── input_controller.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── __init__.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── test_file_list_getter.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── test_input_controller.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;失敗するパターン&lt;a href=&quot;#失敗するパターン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上記のディレクトリ構成の場合に、&lt;code&gt;__init__.py&lt;/code&gt;と&lt;code&gt;file_list_getter.py&lt;/code&gt;のコードがこんな状態だったとします。&lt;code&gt;__init__.py&lt;/code&gt;には何も記述しません。&lt;/p&gt;&lt;p&gt;&lt;code&gt;__init__.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;file_list_getter.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;file_list_getter.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os, sys, platform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by third party&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; glob2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by landmasterlibrary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; input_controller &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ・・・以下略・・・&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この状態では、普通に.pyファイルを実行する分には問題ないのですが、pytestを実行すると以下のエラーが出ます。&lt;/p&gt;&lt;p&gt;実行:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;====================================================================================================== ERRORS =======================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;__________________________________________________________________________________ ERROR collecting test/test_file_list_getter.py ___________________________________________________________________________________&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ImportError while importing test module &apos;/Users/landmaster/Downloads/landmasterlibrarylocal/test/test_file_list_getter.py&apos;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Hint: make sure your test modules/packages have valid Python names.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Traceback:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;../../opt/anaconda3/lib/python3.9/importlib/__init__.py:127: in import_module&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return _bootstrap._gcd_import(name[level:], package, level)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;test/test_file_list_getter.py:5: in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;from src.landmasterlibrarylocal.file_list_getter import *&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/landmasterlibrarylocal/file_list_getter.py:10: in &amp;lt;module&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;from input_controller import repeat_input_with_multi_choices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E   ModuleNotFoundError: No module named &apos;input_controller&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;成功するパターン&lt;a href=&quot;#成功するパターン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この&lt;code&gt;&quot;ModuleNotFoundError: No module named&quot;&lt;/code&gt;が起きないようにするために、以下のように&lt;code&gt;__init__.py&lt;/code&gt;で記述します。&lt;/p&gt;&lt;p&gt;こうすることで、&lt;code&gt;&apos;../src/landmasterlibrarylocal&apos;&lt;/code&gt;がモジュールの参照先に追加されます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;__init__.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;__init.py__&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; sys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;sys.path.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;((os.path.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(os.path.&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;&apos;../src/landmasterlibrarylocal&apos;&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そうすると、以下のように、”ModuleNotFoundError: No module named”が起きなくなりました。&lt;/p&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;================================================================================================ test session starts ================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;platform darwin -- Python 3.9.7, pytest-7.1.1, pluggy-0.13.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rootdir: /Users/landmaster/Downloads/landmasterlibrarylocal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;plugins: freezegun-0.4.2, anyio-2.2.0, mock-3.7.0, cov-3.0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;collected 1 item&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;test/test_input_controller.py .                                                                                                                                                                               [100%]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;================================================================================================= 1 passed in 1.73s =================================================================================================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やったあ〜、`ModuleNotFoundError: No module named`が起きなくなったあ〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;困った時、解決法の一つとして検討してみてください。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年3月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202203/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202203/</guid><description>2022年3月に読んだ本のリストになります。「SQL徹底指南書」や「アジャイルサムライ」などプログラミングの視野を広げる本が多く、最も読んでいて楽しめたのが「GAMIFY ゲーミファイ」で最近のトレンドな考え方が載っています。</description><pubDate>Tue, 12 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;3月の読書メーター&lt;a href=&quot;#3月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：7&lt;/li&gt;
&lt;li&gt;読んだページ数：2339&lt;/li&gt;
&lt;li&gt;ナイス数：3&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;MBAより簡単で英語より大切な決算を読む習慣&lt;a href=&quot;#mbaより簡単で英語より大切な決算を読む習慣&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;MBAより簡単で英語より大切な決算を読む習慣&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/11.B6ZR7dle_Z21tC6V.webp&quot; srcset=&quot;/_astro/11.B6ZR7dle_Z21tC6V.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月30日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%B7%E3%83%90%E3%82%BF%E3%83%8A%E3%82%AA%E3%82%AD&quot; target=&quot;_blank&quot;&gt;シバタナオキ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;世界のエリートがやっている 最高の休息法――「脳科学×瞑想」で集中力が高まる&lt;a href=&quot;#世界のエリートがやっている-最高の休息法脳科学瞑想で集中力が高まる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;世界のエリートがやっている 最高の休息法――「脳科学×瞑想」で集中力が高まる&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/12.BAWu2Iz9_1qP1mq.webp&quot; srcset=&quot;/_astro/12.BAWu2Iz9_1qP1mq.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月26日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E4%B9%85%E8%B3%80%E8%B0%B7+%E4%BA%AE&quot; target=&quot;_blank&quot;&gt;久賀谷 亮&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビジネスパーソンのための　結婚を後悔しない50のリスト の 感想&lt;a href=&quot;#ビジネスパーソンのための結婚を後悔しない50のリスト-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;ビジネスパーソンのための　結婚を後悔しない50のリスト&quot; loading=&quot;lazy&quot; width=&quot;55&quot; height=&quot;75&quot; src=&quot;/_astro/13.zo3Yl-oV_1k8CsH.webp&quot; srcset=&quot;/_astro/13.zo3Yl-oV_1k8CsH.webp 55w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;書いてあるアクションプランは当然試してみるべきことなのですが、実際に行動に移すとなると感情が先走ってしまい、アクションプランを忘れてしまいがちになると思います。&lt;/p&gt;&lt;p&gt;そのため、何度か読み返して、潜在意識にそれらのアクションプランを刷り込ませておくことが必要な１冊だと感じました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月26日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E5%A4%A7%E5%A1%9A+%E5%AF%BF&quot; target=&quot;_blank&quot;&gt;大塚 寿&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GAMIFY　ゲーミファイ―エンゲージメントを高めるゲーミフィケーションの新しい未来 の 感想&lt;a href=&quot;#gamifyゲーミファイエンゲージメントを高めるゲーミフィケーションの新しい未来-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;GAMIFY　ゲーミファイ―エンゲージメントを高めるゲーミフィケーションの新しい未来&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/14.CxiftZuk_26Xf9J.webp&quot; srcset=&quot;/_astro/14.CxiftZuk_26Xf9J.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;現在、以下のサービスにハマっているのだが…&lt;/p&gt;&lt;p&gt;AniList、読書メータ、Last.fm&lt;/p&gt;&lt;p&gt;どれもゲーミフィケーションを取り入れて、ユーザーデータを可視化して、達成度的なものがあったり、SNS的な側面もあって、道理でハマるわけだ…!!&lt;/p&gt;&lt;p&gt;また、プログラムでツールを作る時にテストコードのケース数が増えていくのも、数字が積み上がっていって楽しい。さらにテストコードを書きたくなる。&lt;/p&gt;&lt;p&gt;昨今は、ゲーミフィケーションが意外と一般的にサービスに落とし込まれてきていますね。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月23日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%96%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%BB%E3%83%90%E3%83%BC%E3%82%AF&quot; target=&quot;_blank&quot;&gt;ブライアン・バーク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ の 感想&lt;a href=&quot;#達人に学ぶsql徹底指南書-第2版-初級者で終わりたくないあなたへ-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/15.FFXBKo-Z_Z1nK9bG.webp&quot; srcset=&quot;/_astro/15.FFXBKo-Z_Z1nK9bG.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;自分よりもレベルの高い内容ですごくためになりました。&lt;/p&gt;&lt;p&gt;直近でこのSQLの詳細な知識を使う機会が無さそうだったので斜め読みでしたが、その中でも特に印象的な箇所があります。&lt;/p&gt;&lt;p&gt;それは、単元集合も立派な集合だという点です。&lt;/p&gt;&lt;p&gt;この部分を踏まえると、SQLに限らずプログラミングする際に、関数の引数が作り始めた当時に単数想定でも、配列として処理させるようにコーディングするように気を付けています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月19日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%9F%E3%83%83%E3%82%AF&quot; target=&quot;_blank&quot;&gt;ミック&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「勉強」を「お金」に変える最強の法則50 の 感想&lt;a href=&quot;#勉強をお金に変える最強の法則50-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;「勉強」を「お金」に変える最強の法則50&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/16.DFhHXpQl_wFCmA.webp&quot; srcset=&quot;/_astro/16.DFhHXpQl_wFCmA.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;なるべく早い内に色々なことを試して、なるべく早い内にその中からやりたいことに没頭する。&lt;/p&gt;&lt;p&gt;それが、お金を生み出すレベルの教養・スキルを生み出すためのアクションプランかな。&lt;/p&gt;&lt;p&gt;と、この本を読んで思いました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月18日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E5%8D%83%E7%94%B0+%E7%90%A2%E5%93%89&quot; target=&quot;_blank&quot;&gt;千田 琢哉&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アジャイルサムライ――達人開発者への道 の 感想&lt;a href=&quot;#アジャイルサムライ達人開発者への道-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;アジャイルサムライ――達人開発者への道&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/17.NCarFp_E_Z2gglzJ.webp&quot; srcset=&quot;/_astro/17.NCarFp_E_Z2gglzJ.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;印象に残ったことを箇条書きで。&lt;/p&gt;&lt;p&gt;・今まで優先度付けを漠然と行っていましたが、これからはトレードオフ・スライダーを試してみたいと思います。&lt;/p&gt;&lt;p&gt;・テストコードは、自分が作ったプログラムの信頼性を保証して、かつ自分のそのプログラムに対する自信の源になる。&lt;/p&gt;&lt;p&gt;・継続的インテグレーションは、こまめに行うことでビルド作業が億劫なものにならず、不具合も小さい段階で検知できる。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：03月09日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%EF%BC%AA%EF%BD%8F%EF%BD%8E%EF%BD%81%EF%BD%94%EF%BD%88%EF%BD%81%EF%BD%8E%EF%BC%B2%EF%BD%81%EF%BD%93%EF%BD%8D%EF%BD%95%EF%BD%93%EF%BD%93%EF%BD%8F%EF%BD%8E%2C%E8%A5%BF%E6%9D%91%E7%9B%B4%E4%BA%BA%2C%E8%A7%92%E8%B0%B7%E4%BF%A1%E5%A4%AA%E9%83%8E&quot; target=&quot;_blank&quot;&gt;JonathanRasmusson,西村直人,角谷信太郎&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、7冊か。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回の記事は、この記事で紹介したツールの試験導入的な位置付けで投稿した記事になります！ 良ければ、このツールの記事も見てみてください！ どういうレイアウトを自動的に修正したかを紹介しています。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-manipulating-html-from-book-meter/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】読書メーターからブログ用に取得したHTMLをキレイに表示するように整形する（Beautiful Soupを使用）&lt;/div&gt;&lt;div&gt;読書メーターから取得したHTMLをブログで見栄え良く見せるために、PythonでBeautiful Soupを使って編集したので、その編集過程を紹介します。HTMLの入手方法も併せて紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220202_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】読書メーターからブログ用に取得したHTMLをキレイに表示するように整形する（Beautiful Soupを使用）</title><link>https://endorphinbath.com/posts/python-manipulating-html-from-book-meter/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-manipulating-html-from-book-meter/</guid><description>読書メーターから取得したHTMLをブログで見栄え良く見せるために、PythonでBeautiful Soupを使って編集したので、その編集過程を紹介します。HTMLの入手方法も併せて紹介します。</description><pubDate>Mon, 11 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、このブログで読書記録を付けるぞぉー&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほうほう、どう付けるんだい？ 映えらそうぜ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;読書メーターからHTMLを取得して、それをブログに貼り付けるのだよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、読書メーターからのHTMLの取得方法&lt;a href=&quot;#まず読書メーターからのhtmlの取得方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ページ上部のタブから「読書管理」→「まとめ」の順番でクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1896&quot; height=&quot;842&quot; src=&quot;/_astro/01.CiIrKkW-_ZBE9Ha.webp&quot; srcset=&quot;/_astro/01.CiIrKkW-_2aiX15.webp 640w, /_astro/01.CiIrKkW-_Z1hpyOb.webp 750w, /_astro/01.CiIrKkW-_ZEcUY0.webp 828w, /_astro/01.CiIrKkW-_3OYmH.webp 1080w, /_astro/01.CiIrKkW-_Z1m90DC.webp 1280w, /_astro/01.CiIrKkW-_Z1LceFb.webp 1668w, /_astro/01.CiIrKkW-_ZBE9Ha.webp 1896w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そしたら、このまとめページに飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;2416&quot; height=&quot;1532&quot; src=&quot;/_astro/02.B0ZETZxK_Z22cIlw.webp&quot; srcset=&quot;/_astro/02.B0ZETZxK_Z2d33I0.webp 640w, /_astro/02.B0ZETZxK_1aPjNe.webp 750w, /_astro/02.B0ZETZxK_Z1h9nP2.webp 828w, /_astro/02.B0ZETZxK_ZMjBfC.webp 1080w, /_astro/02.B0ZETZxK_Z31d9D.webp 1280w, /_astro/02.B0ZETZxK_2x1Flq.webp 1668w, /_astro/02.B0ZETZxK_Z21G9uk.webp 2048w, /_astro/02.B0ZETZxK_Z22cIlw.webp 2416w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「ブログでまとめる」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2160&quot; height=&quot;1576&quot; src=&quot;/_astro/03.D9-GbBAS_Z2q1VTy.webp&quot; srcset=&quot;/_astro/03.D9-GbBAS_10h7MN.webp 640w, /_astro/03.D9-GbBAS_Z1qcrvy.webp 750w, /_astro/03.D9-GbBAS_Z1n1gTF.webp 828w, /_astro/03.D9-GbBAS_ZTwoRt.webp 1080w, /_astro/03.D9-GbBAS_jAUet.webp 1280w, /_astro/03.D9-GbBAS_2lkiBt.webp 1668w, /_astro/03.D9-GbBAS_Z1aB7Uy.webp 2048w, /_astro/03.D9-GbBAS_Z2q1VTy.webp 2160w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、HTMLが出力されているテキストエリアが出現するのでそのHTMLをコピーして、ブログなど貼り付けたい場所に貼り付ければ表示できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2328&quot; height=&quot;1358&quot; src=&quot;/_astro/04.IXuLMlJT_ZkaTGT.webp&quot; srcset=&quot;/_astro/04.IXuLMlJT_ZBUfj6.webp 640w, /_astro/04.IXuLMlJT_ZrwqnD.webp 750w, /_astro/04.IXuLMlJT_kWDdt.webp 828w, /_astro/04.IXuLMlJT_P8p7J.webp 1080w, /_astro/04.IXuLMlJT_2ma8gB.webp 1280w, /_astro/04.IXuLMlJT_2mOm15.webp 1668w, /_astro/04.IXuLMlJT_Z1geWPS.webp 2048w, /_astro/04.IXuLMlJT_ZkaTGT.webp 2328w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;整形前のソースを貼ると・・・&lt;a href=&quot;#整形前のソースを貼ると&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;整形前のHTMLでブログに表示すると何だか殺風景で読みにくい記事になってしまっています・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1804&quot; height=&quot;1502&quot; src=&quot;/_astro/05.DRQZR8qU_ZHMifv.webp&quot; srcset=&quot;/_astro/05.DRQZR8qU_ZwfVn0.webp 640w, /_astro/05.DRQZR8qU_25kjuo.webp 750w, /_astro/05.DRQZR8qU_i0DFh.webp 828w, /_astro/05.DRQZR8qU_APQtb.webp 1080w, /_astro/05.DRQZR8qU_Z1p06tR.webp 1280w, /_astro/05.DRQZR8qU_6NaDw.webp 1668w, /_astro/05.DRQZR8qU_ZHMifv.webp 1804w&quot; /&gt;&lt;/p&gt;&lt;p&gt;imgタグのwidthをいじって大きく表示したら、画像の画素が低くてあまり見れたものではないです・・・。&lt;/p&gt;&lt;p&gt;大きさはいじらずに色々とレイアウトをいじっていきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1852&quot; height=&quot;1522&quot; src=&quot;/_astro/06.LPjOKI-p_1XOmN8.webp&quot; srcset=&quot;/_astro/06.LPjOKI-p_1rJRTX.webp 640w, /_astro/06.LPjOKI-p_1wj6Rb.webp 750w, /_astro/06.LPjOKI-p_ZhkmHF.webp 828w, /_astro/06.LPjOKI-p_1d5Jkw.webp 1080w, /_astro/06.LPjOKI-p_1PuDbC.webp 1280w, /_astro/06.LPjOKI-p_Z1zF9Vl.webp 1668w, /_astro/06.LPjOKI-p_1XOmN8.webp 1852w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;整形後のブログでの表示はこんな感じです&lt;a href=&quot;#整形後のブログでの表示はこんな感じです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CSSをいじったりもしましたが、段組みや見出しの追加をHTML操作で行ったので、整形前よりも見やすくなっているかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1614&quot; height=&quot;1566&quot; src=&quot;/_astro/07.rAB97XoK_1p2Nwc.webp&quot; srcset=&quot;/_astro/07.rAB97XoK_BaVxf.webp 640w, /_astro/07.rAB97XoK_DdBVy.webp 750w, /_astro/07.rAB97XoK_Cqlfe.webp 828w, /_astro/07.rAB97XoK_Z14fgS1.webp 1080w, /_astro/07.rAB97XoK_Z2rclpi.webp 1280w, /_astro/07.rAB97XoK_1p2Nwc.webp 1614w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;そして、今回のソースです。&lt;a href=&quot;#そして今回のソースです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のソースはこちらになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; bs4 &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; copy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# import pyperclip as pc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_p_tag_to_plaintext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;impressions &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(impressions)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(impressions) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentences &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; impressions[i].&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; j &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(sentences)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_p &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;p&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_p.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(sentences[j])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_p)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;impressions[i].&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(tmp_soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;edit_style_of_img_and_wrap_by_figure&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attrs_of_figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dict&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;images &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;img&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; element &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; images:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element.attrs[&lt;/span&gt;&lt;span&gt;&quot;style&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element.parent.&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(element) &lt;/span&gt;&lt;span&gt;# remove &amp;lt;a&amp;gt; tag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_figure &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;figure&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;attrs_of_figure)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element.&lt;/span&gt;&lt;span&gt;wrap&lt;/span&gt;&lt;span&gt;(new_figure)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_ul_tag_about_dates_and_author&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_dates &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;読了日&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(read_dates)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_dates[i].&lt;/span&gt;&lt;span&gt;find_next&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_date_and_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_dates[i].&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_date &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_date.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; list_of_date_and_author[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_a_for_author.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; list_of_date_and_author[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(preexist_a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ul&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_date)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_dates[i].&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(tmp_soup_date_and_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_word_in_soup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raw_no_strings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(pattern))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; string_element &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; raw_no_strings:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string_element.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_h3_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# add &amp;lt;h3&amp;gt; to title with impression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;impression_titles &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;感想&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(impression_titles)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_title_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(impression_titles[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_a_for_no &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_a_for_no.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;の&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_title &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; impression_titles[i].&lt;/span&gt;&lt;span&gt;find_previous&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_title_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(a_for_title)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_h3_for_title &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;h3&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_h3_for_title.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(preexist_a_for_title_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_h3_for_title.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_for_no)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_h3_for_title.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(preexist_a_for_title_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_title.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;impression_titles[i].&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(new_h3_for_title)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# add &amp;lt;h3&amp;gt; to title without impression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_titles &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(a_titles)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(a_titles) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(a_titles[i].parent) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; BeautifulSoup:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_titles[i].&lt;/span&gt;&lt;span&gt;wrap&lt;/span&gt;&lt;span&gt;(soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;h3&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_h2_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_title_for_h2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_title_for_h2.&lt;/span&gt;&lt;span&gt;wrap&lt;/span&gt;&lt;span&gt;(soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_ul_tag_about_beginning&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;limit_of_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# create &amp;lt;ul&amp;gt; contents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_ul_for_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ul&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; string &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; soup.strings:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; limit_of_beginning:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_beginning.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(string))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_ul_for_beginning.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_beginning)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(count_of_beginning)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# remove strings not required&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings_copied &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(list_of_index_to_remove_strings)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; list_of_index_to_remove_strings_copied:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_strings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.strings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; string &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; tmp_soup_strings:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; list_of_index_to_remove_strings[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(list_of_index_to_remove_strings) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings.&lt;/span&gt;&lt;span&gt;pop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;insert_after&lt;/span&gt;&lt;span&gt;(new_ul_for_beginning)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;brs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;br&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;removing_count &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(list_of_index_to_remove_strings_copied) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, removing_count):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;brs[i].&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;move_tag_to_behind&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;moving_tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;destination_tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;figures &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(moving_tag)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(figures)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;figure_copied &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(figures[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;figures[i].&lt;/span&gt;&lt;span&gt;find_next&lt;/span&gt;&lt;span&gt;(destination_tag).&lt;/span&gt;&lt;span&gt;insert_after&lt;/span&gt;&lt;span&gt;(figure_copied)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;figures[i].&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_bookmeter_blogcard_by_a_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a_tag&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bookmeter_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title_of_blogcard&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag : bs4.element.Tag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;return : bs4.element.Tag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.attrs[&lt;/span&gt;&lt;span&gt;&quot;href&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; a_tag.attrs[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;href&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;bookmeter_id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.attrs[&lt;/span&gt;&lt;span&gt;&quot;rel&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;noopener&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.attrs[&lt;/span&gt;&lt;span&gt;&quot;target&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;_blank&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.attrs[&lt;/span&gt;&lt;span&gt;&quot;title&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; title_of_blogcard&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.attrs[&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;blogcard-wrap external-blogcard-wrap a-wrap cf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_tag.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard external-blogcard eb-left cf&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-label external-blogcard-label&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_1.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;span&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;fa&quot;&lt;/span&gt;&lt;span&gt;}))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;figure&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-thumbnail external-blogcard-thumbnail&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_2_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;img&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;src&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;https://www.endorphinbath.com/wp-content/uploads/cocoon-resources/blog-card-cache/1383df5cdd9020df38904c80c880706d.png&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-thumb-image external-blogcard-thumb-image&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;width&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;160&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;height&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;90&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;alt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_2.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_2_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-content external-blogcard-content&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-title external-blogcard-title&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3_1.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; title_of_blogcard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-snippet external-blogcard-snippet&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_3_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_3.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_3_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-footer external-blogcard-footer cf&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-site external-blogcard-site&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon external-blogcard-favicon&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1_1_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;img&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;src&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/s2/favicons?domain=https://bookmeter.com/users/1313175&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon-image external-blogcard-favicon-image&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;width&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;height&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;alt&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1_1.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_4_1_1_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;div&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;attrs&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;blogcard-domain external-blogcard-domain&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1_2.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bookmeter.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_4_1_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4_1.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_4_1_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;part_4.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_4_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(part_4)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; blog_card&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_bookmeter_blogcard&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;soup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; BeautifulSoup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bookmeter_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title_of_blogcard&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bsset_a &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;link_of_bookmeter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bsset_a[&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(bsset_a) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;blog_card &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_bookmeter_blogcard_by_a_tag&lt;/span&gt;&lt;span&gt;(link_of_bookmeter, bookmeter_id, title_of_blogcard)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;link_of_bookmeter.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(blog_card)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;manipulate_bookmeter_html&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;target_html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; BeautifulSoup:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(target_html, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_p_tag_to_plaintext&lt;/span&gt;&lt;span&gt;(soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;edit_style_of_img_and_wrap_by_figure&lt;/span&gt;&lt;span&gt;(soup, {&lt;/span&gt;&lt;span&gt;&quot;class&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_ul_tag_about_dates_and_author&lt;/span&gt;&lt;span&gt;(soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Execution adding &amp;lt;h3&amp;gt;: start -------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_word_in_soup&lt;/span&gt;&lt;span&gt;(soup, &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&quot;^の$&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_h3_tag&lt;/span&gt;&lt;span&gt;(soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Execution adding &amp;lt;h3&amp;gt;: end -------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_h2_tag&lt;/span&gt;&lt;span&gt;(soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add_ul_tag_about_beginning&lt;/span&gt;&lt;span&gt;(soup)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;move_tag_to_behind&lt;/span&gt;&lt;span&gt;(soup, &lt;/span&gt;&lt;span&gt;&quot;figure&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;h3&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;my_bookmeter_id &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;users/1313175&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;title_of_blogcard &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;kinkinbeer135ml - 読書メーター&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_bookmeter_blogcard&lt;/span&gt;&lt;span&gt;(soup, my_bookmeter_id, title_of_blogcard)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; soup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmeter_html &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;a href=&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&amp;gt;2月の読書メーター&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読んだ本の数：5&amp;lt;br&amp;gt;読んだページ数：1998&amp;lt;br&amp;gt;ナイス数：1&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/8189791&quot;&amp;gt;&amp;lt;img alt=&quot;人生は20代で決まる&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/8189791?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF20&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BB%A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B1%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B&quot;&amp;gt;人生は20代で決まる&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104504909&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&amp;lt;br&amp;gt;読了日：02月14日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4%2CMeg+Jay&quot;&amp;gt;メグ ジェイ,Meg Jay&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11185007&quot;&amp;gt;&amp;lt;img alt=&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51TvUiUY+tL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11185007?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B2&lt;/span&gt;&lt;span&gt;%88%&lt;/span&gt;&lt;span&gt;E9%BB&lt;/span&gt;&lt;span&gt;%99%&lt;/span&gt;&lt;span&gt;E3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AEWeb&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94Web&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;83&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;BF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%BF&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;E9&lt;/span&gt;&lt;span&gt;%97%&lt;/span&gt;&lt;span&gt;98&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;88SEO&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;81&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%AC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104294763&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SEOなど実践してみたいと思います。&amp;lt;br&amp;gt;読了日：02月06日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9D%BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%B0%BE+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%8C&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;E8%B5%B7&quot;&amp;gt;松尾 茂起&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11884421&quot;&amp;gt;&amp;lt;img alt=&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51y8GIycbyL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11884421?title=MIND+OVER+MONEY+193&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%BF&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A0&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;E7%A9%B6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8A&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;91&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;95&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8413&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%9C&lt;/span&gt;&lt;span&gt;%9F%E&lt;/span&gt;&lt;span&gt;5%AE&lt;/span&gt;&lt;span&gt;%9F&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読了日：02月06日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;87&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;クラウディア・ハモンド&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/17071653&quot;&amp;gt;&amp;lt;img alt=&quot;シゴトがはかどる Python自動処理の教科書&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51gFnBtbrWL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/17071653?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;88&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B+Python&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8B&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;E5&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A7&lt;/span&gt;&lt;span&gt;%91%&lt;/span&gt;&lt;span&gt;E6%9B%B8&quot;&amp;gt;シゴトがはかどる Python自動処理の教科書&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104275292&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&amp;lt;br&amp;gt;読了日：02月05日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9%A3%9B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A1%8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%BA&quot;&amp;gt;クジラ飛行机&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11204117&quot;&amp;gt;&amp;lt;img alt=&quot;新装版 達人プログラマー 職人から名匠への道&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51aDNpMj8hL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11204117?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%96%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A3&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%89%&lt;/span&gt;&lt;span&gt;88+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;97&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;AD&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;89&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8C%A0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;93&quot;&amp;gt;新装版 達人プログラマー 職人から名匠への道&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読了日：02月05日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot;&amp;gt;Andrew Hunt,David Thomas&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/&quot;&amp;gt;読書メーター&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;manipulate_bookmeter_html&lt;/span&gt;&lt;span&gt;(bookmeter_html)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;======================= prettify start ===========================&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;&lt;span&gt;(soup.&lt;/span&gt;&lt;span&gt;prettify&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# pc.copy(soup.prettify())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# print(&quot;copied to your clipboard!&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;======================= prettify end ===========================&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# main()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# test: start -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_manipulate_bookmeter_html_1_1&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmeter_html &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;a href=&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&amp;gt;2月の読書メーター&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読んだ本の数：5&amp;lt;br&amp;gt;読んだページ数：1998&amp;lt;br&amp;gt;ナイス数：1&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/8189791&quot;&amp;gt;&amp;lt;img alt=&quot;人生は20代で決まる&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/8189791?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF20&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BB%A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B1%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B&quot;&amp;gt;人生は20代で決まる&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104504909&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&amp;lt;br&amp;gt;読了日：02月14日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4%2CMeg+Jay&quot;&amp;gt;メグ ジェイ,Meg Jay&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11185007&quot;&amp;gt;&amp;lt;img alt=&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51TvUiUY+tL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11185007?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B2&lt;/span&gt;&lt;span&gt;%88%&lt;/span&gt;&lt;span&gt;E9%BB&lt;/span&gt;&lt;span&gt;%99%&lt;/span&gt;&lt;span&gt;E3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AEWeb&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94Web&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;83&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;BF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%BF&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;E9&lt;/span&gt;&lt;span&gt;%97%&lt;/span&gt;&lt;span&gt;98&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;88SEO&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;81&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%AC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104294763&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SEOなど実践してみたいと思います。&amp;lt;br&amp;gt;読了日：02月06日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9D%BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%B0%BE+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%8C&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;E8%B5%B7&quot;&amp;gt;松尾 茂起&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11884421&quot;&amp;gt;&amp;lt;img alt=&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51y8GIycbyL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11884421?title=MIND+OVER+MONEY+193&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%BF&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A0&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;E7%A9%B6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8A&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;91&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;95&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8413&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%9C&lt;/span&gt;&lt;span&gt;%9F%E&lt;/span&gt;&lt;span&gt;5%AE&lt;/span&gt;&lt;span&gt;%9F&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読了日：02月06日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;87&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;クラウディア・ハモンド&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/17071653&quot;&amp;gt;&amp;lt;img alt=&quot;シゴトがはかどる Python自動処理の教科書&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51gFnBtbrWL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/17071653?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;88&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B+Python&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8B&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;E5&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A7&lt;/span&gt;&lt;span&gt;%91%&lt;/span&gt;&lt;span&gt;E6%9B%B8&quot;&amp;gt;シゴトがはかどる Python自動処理の教科書&amp;lt;/a&amp;gt;の&amp;lt;a href=&quot;https://bookmeter.com/reviews/104275292&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&amp;lt;br&amp;gt;読了日：02月05日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9%A3%9B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A1%8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%BA&quot;&amp;gt;クジラ飛行机&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11204117&quot;&amp;gt;&amp;lt;img alt=&quot;新装版 達人プログラマー 職人から名匠への道&quot; align=&quot;left&quot; style=&quot;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&quot; src=&quot;https://m.media-amazon.com/images/I/51aDNpMj8hL._SL75_.jpg&quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11204117?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%96%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A3&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%89%&lt;/span&gt;&lt;span&gt;88+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;97&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;AD&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;89&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8C%A0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;93&quot;&amp;gt;新装版 達人プログラマー 職人から名匠への道&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;読了日：02月05日 著者：&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot;&amp;gt;Andrew Hunt,David Thomas&amp;lt;/a&amp;gt;&amp;lt;br clear=&quot;left&quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/&quot;&amp;gt;読書メーター&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;manipulate_bookmeter_html&lt;/span&gt;&lt;span&gt;(bookmeter_html)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_html &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;h2&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&amp;gt;2月の読書メーター&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読んだ本の数：5&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;読んだページ数：1998&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;ナイス数：1&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/8189791?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF20&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BB%A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B1%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B&quot;&amp;gt;人生は20代で決まる&amp;lt;/a&amp;gt;&amp;lt;a&amp;gt;の&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/reviews/104504909&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;figure class=&quot;wp-block-image size-large&quot;&amp;gt;&amp;lt;img align=&quot;left&quot; alt=&quot;人生は20代で決まる&quot; src=&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot; style=&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;p&amp;gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&amp;lt;/p&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読了日：02月14日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;著者：&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4%2CMeg+Jay&quot;&amp;gt;メグ ジェイ,Meg Jay&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br clear=&quot;left&quot;/&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11185007?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%B2&lt;/span&gt;&lt;span&gt;%88%&lt;/span&gt;&lt;span&gt;E9%BB&lt;/span&gt;&lt;span&gt;%99%&lt;/span&gt;&lt;span&gt;E3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AEWeb&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94Web&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B1&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;83&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;BF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%BF&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;E9&lt;/span&gt;&lt;span&gt;%97%&lt;/span&gt;&lt;span&gt;98&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;88SEO&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;81&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%AC&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%80%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&amp;lt;/a&amp;gt;&amp;lt;a&amp;gt;の&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/reviews/104294763&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;figure class=&quot;wp-block-image size-large&quot;&amp;gt;&amp;lt;img align=&quot;left&quot; alt=&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot; src=&quot;https://m.media-amazon.com/images/I/51TvUiUY+tL._SL75_.jpg&quot; style=&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;p&amp;gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;SEOなど実践してみたいと思います。&amp;lt;/p&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読了日：02月06日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;著者：&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9D%BE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%B0%BE+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%8C&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;E8%B5%B7&quot;&amp;gt;松尾 茂起&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br clear=&quot;left&quot;/&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11884421?title=MIND+OVER+MONEY+193&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%BF&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A0&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;E7%A9%B6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;9F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8A&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;91&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%94%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;95&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8413&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%9C&lt;/span&gt;&lt;span&gt;%9F%E&lt;/span&gt;&lt;span&gt;5%AE&lt;/span&gt;&lt;span&gt;%9F&lt;/span&gt;&lt;span&gt;&quot;&amp;gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;figure class=&quot;wp-block-image size-large&quot;&amp;gt;&amp;lt;img align=&quot;left&quot; alt=&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot; src=&quot;https://m.media-amazon.com/images/I/51y8GIycbyL._SL75_.jpg&quot; style=&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読了日：02月06日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;著者：&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;87&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;8F&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A2&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;B3&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;89&quot;&amp;gt;クラウディア・ハモンド&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br clear=&quot;left&quot;/&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/17071653?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B4&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;88&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;8B+Python&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8B&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;E5&lt;/span&gt;&lt;span&gt;%87%&lt;/span&gt;&lt;span&gt;A6&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;86&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%95%&lt;/span&gt;&lt;span&gt;99&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;7%A7&lt;/span&gt;&lt;span&gt;%91%&lt;/span&gt;&lt;span&gt;E6%9B%B8&quot;&amp;gt;シゴトがはかどる Python自動処理の教科書&amp;lt;/a&amp;gt;&amp;lt;a&amp;gt;の&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/reviews/104275292&quot;&amp;gt;感想&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;figure class=&quot;wp-block-image size-large&quot;&amp;gt;&amp;lt;img align=&quot;left&quot; alt=&quot;シゴトがはかどる Python自動処理の教科書&quot; src=&quot;https://m.media-amazon.com/images/I/51gFnBtbrWL._SL75_.jpg&quot; style=&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;br/&amp;gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&amp;lt;br/&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読了日：02月05日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;著者：&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;AF&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9%A3%9B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A1%8C&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6%9C%BA&quot;&amp;gt;クジラ飛行机&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br clear=&quot;left&quot;/&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/books/11204117?title=&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;%96%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8%A3&lt;/span&gt;&lt;span&gt;%85%&lt;/span&gt;&lt;span&gt;E7&lt;/span&gt;&lt;span&gt;%89%&lt;/span&gt;&lt;span&gt;88+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;94&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;97&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;AD&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;B0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;A9&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;9E&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%83%&lt;/span&gt;&lt;span&gt;BC+&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B7&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;4%BA%BA&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;8B&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%82%&lt;/span&gt;&lt;span&gt;89&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;%90%&lt;/span&gt;&lt;span&gt;8D&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;5%8C%A0&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;B8&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;AE&lt;/span&gt;&lt;span&gt;%E&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;%81%&lt;/span&gt;&lt;span&gt;93&quot;&amp;gt;新装版 達人プログラマー 職人から名匠への道&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;figure class=&quot;wp-block-image size-large&quot;&amp;gt;&amp;lt;img align=&quot;left&quot; alt=&quot;新装版 達人プログラマー 職人から名匠への道&quot; src=&quot;https://m.media-amazon.com/images/I/51aDNpMj8hL._SL75_.jpg&quot; style=&quot;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;読了日：02月05日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;a&amp;gt;著者：&amp;lt;/a&amp;gt;&amp;lt;a href=&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot;&amp;gt;Andrew Hunt,David Thomas&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;br clear=&quot;left&quot;/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;a class=&quot;blogcard-wrap external-blogcard-wrap a-wrap cf&quot; href=&quot;https://bookmeter.com/users/1313175&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;kinkinbeer135ml - 読書メーター&quot;&amp;gt;&amp;lt;div class=&quot;blogcard external-blogcard eb-left cf&quot;&amp;gt;&amp;lt;div class=&quot;blogcard-label external-blogcard-label&quot;&amp;gt;&amp;lt;span class=&quot;fa&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;figure class=&quot;blogcard-thumbnail external-blogcard-thumbnail&quot;&amp;gt;&amp;lt;img alt=&quot;&quot; class=&quot;blogcard-thumb-image external-blogcard-thumb-image&quot; height=&quot;90&quot; src=&quot;https://www.endorphinbath.com/wp-content/uploads/cocoon-resources/blog-card-cache/1383df5cdd9020df38904c80c880706d.png&quot; width=&quot;160&quot;/&amp;gt;&amp;lt;/figure&amp;gt;&amp;lt;div class=&quot;blogcard-content external-blogcard-content&quot;&amp;gt;&amp;lt;div class=&quot;blogcard-title external-blogcard-title&quot;&amp;gt;kinkinbeer135ml - 読書メーター&amp;lt;/div&amp;gt;&amp;lt;div class=&quot;blogcard-snippet external-blogcard-snippet&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&quot;blogcard-footer external-blogcard-footer cf&quot;&amp;gt;&amp;lt;div class=&quot;blogcard-site external-blogcard-site&quot;&amp;gt;&amp;lt;div class=&quot;blogcard-favicon external-blogcard-favicon&quot;&amp;gt;&amp;lt;img alt=&quot;&quot; class=&quot;blogcard-favicon-image external-blogcard-favicon-image&quot; height=&quot;16&quot; src=&quot;https://www.google.com/s2/favicons?domain=https://bookmeter.com/users/1313175&quot; width=&quot;16&quot;/&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&quot;blogcard-domain external-blogcard-domain&quot;&amp;gt;bookmeter.com&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(expected_html, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;&lt;span&gt;(actual) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(expected)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# test: end -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Before and After&lt;a href=&quot;#before-and-after&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Before. まず、整形前の読書メーターから取得したHTMLになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;2月の読書メーター&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読んだ本の数：5&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読んだページ数：1998&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;ナイス数：1&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;人生は20代で決まる&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;の&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;感想&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読了日：02月14日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;メグ ジェイ,Meg Jay&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11185007&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51TvUiUY+tL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11185007?title=%E6%B2%88%E9%BB%99%E3%81%AEWeb%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0+%E2%80%94Web%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%82%BF%E3%83%BC+%E3%83%9C%E3%83%BC%E3%83%B3%E3%81%AE%E6%BF%80%E9%97%98%E2%80%94%E3%80%88SEO%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%95%99%E6%9C%AC%E3%80%89&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;の&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104294763&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;感想&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;SEOなど実践してみたいと思います。&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読了日：02月06日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E6%9D%BE%E5%B0%BE+%E8%8C%82%E8%B5%B7&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;松尾 茂起&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11884421&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51y8GIycbyL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11884421?title=MIND+OVER+MONEY+193%E3%81%AE%E5%BF%83%E7%90%86%E7%A0%94%E7%A9%B6%E3%81%A7%E3%82%8F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%8A%E9%87%91%E3%81%AB%E6%94%AF%E9%85%8D%E3%81%95%E3%82%8C%E3%81%AA%E3%81%8413%E3%81%AE%E7%9C%9F%E5%AE%9F&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読了日：02月06日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%87%E3%82%A3%E3%82%A2%E3%83%BB%E3%83%8F%E3%83%A2%E3%83%B3%E3%83%89&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;クラウディア・ハモンド&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/17071653&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;シゴトがはかどる Python自動処理の教科書&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51gFnBtbrWL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/17071653?title=%E3%82%B7%E3%82%B4%E3%83%88%E3%81%8C%E3%81%AF%E3%81%8B%E3%81%A9%E3%82%8B+Python%E8%87%AA%E5%8B%95%E5%87%A6%E7%90%86%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;シゴトがはかどる Python自動処理の教科書&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;の&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104275292&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;感想&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読了日：02月05日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;クジラ飛行机&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11204117&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;新装版 達人プログラマー 職人から名匠への道&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51aDNpMj8hL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11204117?title=%E6%96%B0%E8%A3%85%E7%89%88+%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC+%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;新装版 達人プログラマー 職人から名匠への道&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;読了日：02月05日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;Andrew Hunt,David Thomas&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;読書メーター&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;After. 最終的に整形したHTMLはこんな感じになりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2月の読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読んだ本の数：5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読んだページ数：1998&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ナイス数：1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;人生は20代で決まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月14日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;メグ ジェイ,Meg Jay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11185007?title=%E6%B2%88%E9%BB%99%E3%81%AEWeb%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0+%E2%80%94Web%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%82%BF%E3%83%BC+%E3%83%9C%E3%83%BC%E3%83%B3%E3%81%AE%E6%BF%80%E9%97%98%E2%80%94%E3%80%88SEO%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%95%99%E6%9C%AC%E3%80%89&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104294763&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51TvUiUY+tL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SEOなど実践してみたいと思います。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月06日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E6%9D%BE%E5%B0%BE+%E8%8C%82%E8%B5%B7&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;松尾 茂起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11884421?title=MIND+OVER+MONEY+193%E3%81%AE%E5%BF%83%E7%90%86%E7%A0%94%E7%A9%B6%E3%81%A7%E3%82%8F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%8A%E9%87%91%E3%81%AB%E6%94%AF%E9%85%8D%E3%81%95%E3%82%8C%E3%81%AA%E3%81%8413%E3%81%AE%E7%9C%9F%E5%AE%9F&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51y8GIycbyL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月06日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%87%E3%82%A3%E3%82%A2%E3%83%BB%E3%83%8F%E3%83%A2%E3%83%B3%E3%83%89&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;クラウディア・ハモンド&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/17071653?title=%E3%82%B7%E3%82%B4%E3%83%88%E3%81%8C%E3%81%AF%E3%81%8B%E3%81%A9%E3%82%8B+Python%E8%87%AA%E5%8B%95%E5%87%A6%E7%90%86%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;シゴトがはかどる Python自動処理の教科書&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104275292&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;シゴトがはかどる Python自動処理の教科書&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51gFnBtbrWL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月05日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;クジラ飛行机&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11204117?title=%E6%96%B0%E8%A3%85%E7%89%88+%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC+%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;新装版 達人プログラマー 職人から名匠への道&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;新装版 達人プログラマー 職人から名匠への道&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/51aDNpMj8hL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月05日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Andrew Hunt,David Thomas&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-wrap external-blogcard-wrap a-wrap cf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rel&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;noopener&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;_blank&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;kinkinbeer135ml - 読書メーター&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard external-blogcard eb-left cf&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-label external-blogcard-label&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;fa&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-thumbnail external-blogcard-thumbnail&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-thumb-image external-blogcard-thumb-image&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;90&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://www.endorphinbath.com/wp-content/uploads/cocoon-resources/blog-card-cache/1383df5cdd9020df38904c80c880706d.png&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;160&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-content external-blogcard-content&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-title external-blogcard-title&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kinkinbeer135ml - 読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-snippet external-blogcard-snippet&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-footer external-blogcard-footer cf&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-site external-blogcard-site&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon external-blogcard-favicon&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon-image external-blogcard-favicon-image&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/s2/favicons?domain=https://bookmeter.com/users/1313175&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-domain external-blogcard-domain&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmeter.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;編集したタグ一覧&lt;a href=&quot;#編集したタグ一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回編集したタグの部分はこちらになります。&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;編集分類&lt;/th&gt;&lt;th&gt;タグ名&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;更新&lt;/td&gt;&lt;td&gt;&lt;img /&gt;タグ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;削除&lt;/td&gt;&lt;td&gt;&lt;a&gt;タグ&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（囲む）&lt;/td&gt;&lt;td&gt;&lt;figure&gt;タグ&lt;/figure&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（囲む）&lt;/td&gt;&lt;td&gt;&lt;p&gt;タグ&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（囲む）&lt;/td&gt;&lt;td&gt;&lt;a&gt;タグ&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（囲む）&lt;/td&gt;&lt;td&gt;&lt;h3&gt;タグ&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（囲む）&lt;/td&gt;&lt;td&gt;&lt;h2&gt;タグ&lt;/h2&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;挿入（移動）&lt;/td&gt;&lt;td&gt;&lt;figure&gt;タグ&lt;/figure&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;埋め込み&lt;/td&gt;&lt;td&gt;&lt;a&gt;タグ&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h3&gt;更新：&lt;img /&gt;タグ&lt;a href=&quot;#更新タグ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 5px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;　　 &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;削除：&lt;a&gt;タグ&lt;/a&gt;&lt;a href=&quot;#削除タグ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（囲む）：&lt;figure&gt;タグ&lt;a href=&quot;#挿入囲むタグ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（囲む）：&lt;p&gt;タグ&lt;a href=&quot;#挿入囲むタグ-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（囲む）：&lt;a&gt;タグ&lt;/a&gt;&lt;a href=&quot;#挿入囲むタグ-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;読了日：02月14日 著者：&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;メグ ジェイ,Meg Jay&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月14日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;メグ ジェイ,Meg Jay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ul&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（囲む）：&lt;/h3&gt;&lt;h3&gt;タグ&lt;a href=&quot;#挿入囲むタグ-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更新前（感想あり）:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;　　&lt;/span&gt;&lt;/span&gt;&lt;span&gt;人生は20代で決まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;　　&lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後（感想あり）:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;人生は20代で決まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新前（感想なし）:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11204117?title=%E6%96%B0%E8%A3%85%E7%89%88+%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC+%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;新装版 達人プログラマー 職人から名匠への道&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後（感想なし）:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/11204117?title=%E6%96%B0%E8%A3%85%E7%89%88+%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC+%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;新装版 達人プログラマー 職人から名匠への道&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（囲む）：&lt;/h3&gt;&lt;h2&gt;タグ&lt;a href=&quot;#挿入囲むタグ-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2月の読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175/summary/monthly/2022/2&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2月の読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h2&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;挿入（移動）：&lt;figure&gt;タグ&lt;a href=&quot;#挿入移動タグ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;人生は20代で決まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/books/8189791?title=%E4%BA%BA%E7%94%9F%E3%81%AF20%E4%BB%A3%E3%81%A7%E6%B1%BA%E3%81%BE%E3%82%8B&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;人生は20代で決まる&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;の&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/reviews/104504909&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;h3&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;wp-block-image size-large&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;人生は20代で決まる&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://m.media-amazon.com/images/I/41z9XyhfOLL._SL75_.jpg&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;margin: 0 20px 5px 0; border: 1px solid #dcdcdc;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;埋め込み：&lt;a&gt;タグ&lt;/a&gt;&lt;a href=&quot;#埋め込みタグ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更新前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更新後:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-wrap external-blogcard-wrap a-wrap cf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/users/1313175&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rel&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;noopener&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;_blank&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;kinkinbeer135ml - 読書メーター&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard external-blogcard eb-left cf&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-label external-blogcard-label&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;fa&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-thumbnail external-blogcard-thumbnail&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-thumb-image external-blogcard-thumb-image&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;90&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://www.endorphinbath.com/wp-content/uploads/cocoon-resources/blog-card-cache/1383df5cdd9020df38904c80c880706d.png&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;160&quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;figure&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-content external-blogcard-content&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-title external-blogcard-title&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;kinkinbeer135ml - 読書メーター&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-snippet external-blogcard-snippet&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-footer external-blogcard-footer cf&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-site external-blogcard-site&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon external-blogcard-favicon&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-favicon-image external-blogcard-favicon-image&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://www.google.com/s2/favicons?domain=https://bookmeter.com/users/1313175&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;16&quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;blogcard-domain external-blogcard-domain&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmeter.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Beautiful Soupを使うときに気をつけるべきこと&lt;a href=&quot;#beautiful-soupを使うときに気をつけるべきこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、Beautiful Soupを使っていて、個人的にハマりやすかったことを記載しておきます。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;リストを作る時は、後からwrapするより、先にnew_tagしてappendしていく方が良い&lt;/li&gt;
&lt;li&gt;置換後の要素に置換前の要素を使うのであれば、extract()とかdecompose()は使わない&lt;/li&gt;
&lt;li&gt;tagsを取得するとセットで、stringsを取得するとジェネレータで取得される&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;1．リストを作る時は、後からwrapするより、先にnew_tagしてappendしていく方が良い&lt;a href=&quot;#1リストを作る時は後からwrapするより先にnew_tagしてappendしていく方が良い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先にnew_tagして、appendしていくと上手くタグをネストできる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_1.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;test_a_1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_2.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;test_a_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_1)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(new_li)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかし、後からタグで囲もうとすると、なんかエラーが出る。&lt;/p&gt;&lt;p&gt;変数名&lt;code&gt;new_li&lt;/code&gt;もこっちの方が分かりにくい気がします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_1.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;test_a_1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_a_2.string &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;test_a_2&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_1)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_a_2)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_li.&lt;/span&gt;&lt;span&gt;wrap&lt;/span&gt;&lt;span&gt;(soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(new_li)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージ:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ValueError:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Cannot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;one&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;another&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;theelement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;be&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;replaced&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tree.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2．置換後の要素に置換前の要素を使うのであれば、extract()とかdecompose()は使わない&lt;a href=&quot;#2置換後の要素に置換前の要素を使うのであればextractとかdecomposeは使わない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;例えば、こんな風に書くと、&lt;code&gt;a_for_author&lt;/code&gt;の部分は置換後の要素に反映されません。消えてしまいます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(bookmeter_html, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;read_dates &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;読了日&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(read_dates)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_dates[i].&lt;/span&gt;&lt;span&gt;find_next&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(preexist_a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ul&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()　&lt;/span&gt;&lt;span&gt;# ここで消える。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_dates[i].&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(tmp_soup_date_and_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力例:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月14日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;なので、&lt;code&gt;copy.deepcopy&lt;/code&gt;をしてしまいます。すると、消えません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; copy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;soup &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BeautifulSoup&lt;/span&gt;&lt;span&gt;(bookmeter_html, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;html.parser&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;read_dates &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;読了日&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(read_dates)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_dates[i].&lt;/span&gt;&lt;span&gt;find_next&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;a&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# preexist_a_for_author = BeautifulSoup(&quot;&quot;, &quot;html.parser&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# preexist_a_for_author.append(a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;preexist_a_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(preexist_a_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ul&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_date_and_author.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a_for_author.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()　&lt;/span&gt;&lt;span&gt;# ここで消える。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_dates[i].&lt;/span&gt;&lt;span&gt;replace_with&lt;/span&gt;&lt;span&gt;(tmp_soup_date_and_author)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力例:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;読了日：02月14日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;著者：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;メグ ジェイ,Meg Jay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;li&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3．tagsを取得するとセットで、stringsを取得するとジェネレータで取得される&lt;a href=&quot;#3tagsを取得するとセットでstringsを取得するとジェネレータで取得される&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要素を削除する時に、tagsに対して消すか、stringsに対して消すかどうかで削除方法が変わります。
セットの場合は、インデックスを指定して、extract()とかをすれば消えますが、&lt;/p&gt;&lt;p&gt;ジェネレータの場合は、インデクスを指定できないので、以下の手順を踏んで要素を削除しました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;要素を作る時に、ループした回数を、メモ用のリストに格納する。&lt;/li&gt;
&lt;li&gt;要素を消す時に、そのメモ用のリストの末尾の数字とループ回数が同じにだったら、要素を消す。（なぜこんな面倒くさいことをしているかと言うと、リストの先頭の数字から消していくと、ループ回数がズレるため。また、コードが要素を作る時と形が似るため可読性が上がる。）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;stringsに対して、ジェネレータを使って、削除する場合。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# create &amp;lt;ul&amp;gt; contents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;new_ul_for_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ul&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; string &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; soup.strings:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; limit_of_beginning:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;new_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;li&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_li_for_beginning.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(string))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;new_ul_for_beginning.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(new_li_for_beginning)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(count_of_beginning)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# remove strings not required&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;list_of_index_to_remove_strings_copied &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; copy.&lt;/span&gt;&lt;span&gt;deepcopy&lt;/span&gt;&lt;span&gt;(list_of_index_to_remove_strings)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; list_of_index_to_remove_strings_copied:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp_soup_strings &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.strings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; string &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; tmp_soup_strings:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_beginning &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; count_of_beginning &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; list_of_index_to_remove_strings[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(list_of_index_to_remove_strings) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;string.&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_index_to_remove_strings.&lt;/span&gt;&lt;span&gt;pop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;soup.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;h2&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;insert_after&lt;/span&gt;&lt;span&gt;(new_ul_for_beginning)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;tagsに対して、セットを使って、削除する場合。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# remove &amp;lt;br&amp;gt; tag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;brs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; soup.&lt;/span&gt;&lt;span&gt;find_all&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;br&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;removing_count &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(list_of_index_to_remove_strings_copied) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, removing_count):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;brs[i].&lt;/span&gt;&lt;span&gt;extract&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーし、出来たなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この整形前のテキストはどこに貼るんだい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Colab Notebooksに貼って運用していこうと思っています。ファイル作ってどうのこうのするの面倒くさいし。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで脳死でペタペタ貼るだけで、読書記録を付けられますなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;早速、付けたものがこちらになります！&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/list-of-book-read-in-202202/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【読書】2022年2月に読んだ本の一覧&lt;/div&gt;&lt;div&gt;2022年2月に読んだ本のリストになります。「人生は20代で決まる」や「新装版 達人プログラマー 職人から名匠への道」など、生活的にも技術的にも良い本があった月でした。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220201_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【読書】2022年2月に読んだ本の一覧</title><link>https://endorphinbath.com/posts/list-of-book-read-in-202202/</link><guid isPermaLink="true">https://endorphinbath.com/posts/list-of-book-read-in-202202/</guid><description>2022年2月に読んだ本のリストになります。「人生は20代で決まる」や「新装版 達人プログラマー 職人から名匠への道」など、生活的にも技術的にも良い本があった月でした。</description><pubDate>Sun, 10 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあさ〜、読んだ本のリストだよ〜&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;2月の読書メーター&lt;a href=&quot;#2月の読書メーター&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;読んだ本の数：5&lt;/li&gt;
&lt;li&gt;読んだページ数：1998&lt;/li&gt;
&lt;li&gt;ナイス数：1&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;人生は20代で決まる の 感想&lt;a href=&quot;#人生は20代で決まる-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;人生は20代で決まる&quot; loading=&quot;lazy&quot; width=&quot;52&quot; height=&quot;75&quot; src=&quot;/_astro/01.Br5AU7l0_Z1vsGhr.webp&quot; srcset=&quot;/_astro/01.Br5AU7l0_Z1vsGhr.webp 52w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;本書の進行形式として、色々な人の人生設計を具体的にどのようにより良いものにしていくかどうかを1つずつケーススタディしていく流れである。&lt;/p&gt;&lt;p&gt;僕が本書から汲み取ったことは、目標を立てて行動し、若い内にとっととその目標を実現できるように行動していこう、ということである。&lt;/p&gt;&lt;p&gt;特に、結婚して子作りすることにおいては、年齢が重要な要素になってくるため、長期的な目標は子作りよりも早く実現もしくは形にできるように人生設計を行っていかなくてはならない。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月14日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%83%A1%E3%82%B0+%E3%82%B8%E3%82%A7%E3%82%A4%2CMeg+Jay&quot; target=&quot;_blank&quot;&gt;メグ ジェイ,Meg Jay&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉 の 感想&lt;a href=&quot;#沈黙のwebライティング-webマーケッター-ボーンの激闘seoのためのライティング教本-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;沈黙のWebライティング —Webマーケッター ボーンの激闘—〈SEOのためのライティング教本〉&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/02.Cixd0Qu7_P1g88.webp&quot; srcset=&quot;/_astro/02.Cixd0Qu7_P1g88.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;自分のブログへ何か参考できないかどうか興味があり読んでみました。&lt;/p&gt;&lt;p&gt;漫画になっていたり、所々必殺技みたいなものが展開されたり、分かりやすく楽しんで読むことができました。&lt;/p&gt;&lt;p&gt;SEOなど実践してみたいと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月06日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E6%9D%BE%E5%B0%BE+%E8%8C%82%E8%B5%B7&quot; target=&quot;_blank&quot;&gt;松尾 茂起&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&lt;a href=&quot;#mind-over-money-193の心理研究でわかったお金に支配されない13の真実&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;MIND OVER MONEY 193の心理研究でわかったお金に支配されない13の真実&quot; loading=&quot;lazy&quot; width=&quot;51&quot; height=&quot;75&quot; src=&quot;/_astro/03.C9IAopg4_Z2rFmHX.webp&quot; srcset=&quot;/_astro/03.C9IAopg4_Z2rFmHX.webp 51w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月06日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%87%E3%82%A3%E3%82%A2%E3%83%BB%E3%83%8F%E3%83%A2%E3%83%B3%E3%83%89&quot; target=&quot;_blank&quot;&gt;クラウディア・ハモンド&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シゴトがはかどる Python自動処理の教科書 の 感想&lt;a href=&quot;#シゴトがはかどる-python自動処理の教科書-の-感想&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;シゴトがはかどる Python自動処理の教科書&quot; loading=&quot;lazy&quot; width=&quot;58&quot; height=&quot;75&quot; src=&quot;/_astro/04.Cq_RlJln_Z1kCBDn.webp&quot; srcset=&quot;/_astro/04.Cq_RlJln_Z1kCBDn.webp 58w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Pythonの入門編といった感じの一冊となっている。Excelの処理が多め。個人的にはダウンロード処理とメール送信処理の部分を行ったことがないので、今度試してみようと思う。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA&quot; target=&quot;_blank&quot;&gt;クジラ飛行机&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;新装版 達人プログラマー 職人から名匠への道&lt;a href=&quot;#新装版-達人プログラマー-職人から名匠への道&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;新装版 達人プログラマー 職人から名匠への道&quot; loading=&quot;lazy&quot; width=&quot;53&quot; height=&quot;75&quot; src=&quot;/_astro/05.Ej0SFkz1_1Ow4op.webp&quot; srcset=&quot;/_astro/05.Ej0SFkz1_1Ow4op.webp 53w&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;読了日：02月05日&lt;/li&gt;
&lt;li&gt;著者： &lt;a href=&quot;https://bookmeter.com/search?keyword=Andrew+Hunt%2CDavid+Thomas&quot; target=&quot;_blank&quot;&gt;Andrew Hunt,David Thomas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://bookmeter.com/users/1313175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/assets/apple-touch-icon-1882167a78a9b84d8ff9c01eb462fb01ebc27dabc41f672cd3ac07507435647a.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;読書メーター&lt;/span&gt;&lt;/div&gt;&lt;div&gt;kinkinbeer135ml - 読書メーター&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;bookmeter.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://bookmeter.com/images/common/ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今月は、5冊か。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回の記事は、この記事で紹介したツールの試験導入的な位置付けで投稿した記事になります！ 良ければ、このツールの記事も見てみてください！ どういうレイアウトを自動的に修正したかを紹介しています。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-manipulating-html-from-book-meter/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】読書メーターからブログ用に取得したHTMLをキレイに表示するように整形する（Beautiful Soupを使用）&lt;/div&gt;&lt;div&gt;読書メーターから取得したHTMLをブログで見栄え良く見せるために、PythonでBeautiful Soupを使って編集したので、その編集過程を紹介します。HTMLの入手方法も併せて紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220202_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】PythonとGitHub ActionsでProjectsにIssuesを作る作業を自動化する（後編：GitHub Actionの内容）</title><link>https://endorphinbath.com/posts/github-action-automake-issue-to-projects-latter/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-action-automake-issue-to-projects-latter/</guid><description>日々のタスクをGitHub IssuesおよびGitHub Projectsで管理する時に登録する作業が面倒くさいと思います。いちいちオプションを選択して入力する手間が面倒くさいと思います。本記事では、その作業を省略したツールを紹介します。</description><pubDate>Fri, 08 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;私は、ふと思った。日々のタスクをGitHub上で管理したいと。しかし、GitHubのissuesを登録する時にいちいちオプションを選択して入力する手間が面倒くさい。そして、GitHub Projectsでも管理したいけど、その場合は尚更である。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふむふむ、どうしたどうした。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ということで、GitHub IssuesとGitHub Projectsを一気に登録するツールとかないですか！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作ってみますかぁ。第2弾だ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回、取り組んだこと&lt;a href=&quot;#今回取り組んだこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、自分がリポジトリ内に用意したCSVのタイトルと内容を読み取って、その内容をGitHub Projects内にカードとして登録させるツールです。&lt;/p&gt;&lt;p&gt;例えば、このようにCSVを編集しておいて、・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2948&quot; height=&quot;1278&quot; src=&quot;/_astro/01.B7W_GqcU_Zw3xBO.webp&quot; srcset=&quot;/_astro/01.B7W_GqcU_n2yml.webp 640w, /_astro/01.B7W_GqcU_zVUPH.webp 750w, /_astro/01.B7W_GqcU_Z168T4r.webp 828w, /_astro/01.B7W_GqcU_Z77uJO.webp 1080w, /_astro/01.B7W_GqcU_Z1fqRvy.webp 1280w, /_astro/01.B7W_GqcU_Z887gC.webp 1668w, /_astro/01.B7W_GqcU_Z2x2XsS.webp 2048w, /_astro/01.B7W_GqcU_19ECKw.webp 2560w, /_astro/01.B7W_GqcU_Zw3xBO.webp 2948w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このGitHub Actionsが動くと、CSV内のレコード数と同じ数のワークフローファイルが作成されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2856&quot; height=&quot;1172&quot; src=&quot;/_astro/02.DtmGXFpq_jc3p3.webp&quot; srcset=&quot;/_astro/02.DtmGXFpq_Z1S5oMP.webp 640w, /_astro/02.DtmGXFpq_Z1DA3AA.webp 750w, /_astro/02.DtmGXFpq_ZNPAnI.webp 828w, /_astro/02.DtmGXFpq_1WjTVg.webp 1080w, /_astro/02.DtmGXFpq_1GopJK.webp 1280w, /_astro/02.DtmGXFpq_Z2dVrN1.webp 1668w, /_astro/02.DtmGXFpq_ZOdqfc.webp 2048w, /_astro/02.DtmGXFpq_19aGKw.webp 2560w, /_astro/02.DtmGXFpq_jc3p3.webp 2856w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、色々動いた後に、このようにkanban形式内でcardが登録されます。Issueも登録されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2732&quot; height=&quot;1358&quot; src=&quot;/_astro/03.VJRhBE6g_2iT5hF.webp&quot; srcset=&quot;/_astro/03.VJRhBE6g_ZI4hE8.webp 640w, /_astro/03.VJRhBE6g_Z2mYzmv.webp 750w, /_astro/03.VJRhBE6g_Z2fOWsp.webp 828w, /_astro/03.VJRhBE6g_Q1479.webp 1080w, /_astro/03.VJRhBE6g_1922do.webp 1280w, /_astro/03.VJRhBE6g_Z2wl0a0.webp 1668w, /_astro/03.VJRhBE6g_28UcYJ.webp 2048w, /_astro/03.VJRhBE6g_dWxU3.webp 2560w, /_astro/03.VJRhBE6g_2iT5hF.webp 2732w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;システム構成&lt;a href=&quot;#システム構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ざっと、今回のツールのシステム構成を書きます。&lt;/p&gt;&lt;p&gt;概要図はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;2870&quot; height=&quot;1532&quot; src=&quot;/_astro/04.beQKcgRI_Z1sKPAP.webp&quot; srcset=&quot;/_astro/04.beQKcgRI_1hdkmJ.webp 640w, /_astro/04.beQKcgRI_Z151CGg.webp 750w, /_astro/04.beQKcgRI_ZfVzmg.webp 828w, /_astro/04.beQKcgRI_Z1NucfE.webp 1080w, /_astro/04.beQKcgRI_Z2rXD0q.webp 1280w, /_astro/04.beQKcgRI_292Mx1.webp 1668w, /_astro/04.beQKcgRI_Z1XQskU.webp 2048w, /_astro/04.beQKcgRI_NhR0a.webp 2560w, /_astro/04.beQKcgRI_Z1sKPAP.webp 2870w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ざっくりした流れは以下の感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Issueを作るために、Pythonファイルを動かすGitHub Actionsが動く。（夜中の4時に設定）&lt;/li&gt;
&lt;li&gt;Pythonファイルが動いて、Issueを作るためのGitHub Actionsのワークフローファイルが作成される。&lt;/li&gt;
&lt;li&gt;そのワークフローファイルは、そのPythonファイルが動いた10分後に起動する。&lt;/li&gt;
&lt;li&gt;ワークフローファイルが起動。Issueに登録したと同時にGitHub Projectsにもカードを追加する。&lt;/li&gt;
&lt;li&gt;その日に登録した分のワークフローファイルとCSVの内容を削除するために、Pythonファイルを動かすGitHub Actionsが動く。（1. の30分後に設定。設定処理は、2. で行っていた。）&lt;/li&gt;
&lt;li&gt;Pythonファイルが動いて、ワークフローファイルとCSVの内容を削除する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;流れと概要図を対応させるとこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;2870&quot; height=&quot;1532&quot; src=&quot;/_astro/05.CbcYU_1V_Z2hYdDf.webp&quot; srcset=&quot;/_astro/05.CbcYU_1V_Z1GvwHI.webp 640w, /_astro/05.CbcYU_1V_11qD2d.webp 750w, /_astro/05.CbcYU_1V_1PvGmd.webp 828w, /_astro/05.CbcYU_1V_2rtyvR.webp 1080w, /_astro/05.CbcYU_1V_1N07L6.webp 1280w, /_astro/05.CbcYU_1V_1jOpuB.webp 1668w, /_astro/05.CbcYU_1V_2h7iqB.webp 2048w, /_astro/05.CbcYU_1V_ZUv2f.webp 2560w, /_astro/05.CbcYU_1V_Z2hYdDf.webp 2870w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回作ったツールの肝となるGitHub Actionsがこれです。GitHub公式のものみたいなので、長い期間利用できそうです。&lt;/p&gt;&lt;a href=&quot;https://github.com/imjohnbo/issue-bot&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;imjohnbo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;issue-bot&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GitHub Actionsの中身&lt;a href=&quot;#github-actionsの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、後編として、GitHub Actionsを設定しているYAMLファイルの中身を見ていきたいと思います。&lt;/p&gt;&lt;p&gt;ちなみに、前編はこの記事に上がっています。この記事を見るほうが流れを汲み取りやすいかなと思います。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/github-action-automake-issue-to-projects-former/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GitHub】PythonとGitHub ActionsでProjectsにIssuesを作る作業を自動化する（前編：Pythonのソース）&lt;/div&gt;&lt;div&gt;日々のタスクをGitHub IssuesおよびGitHub Projectsで管理する時に登録する作業が面倒くさいと思います。いちいちオプションを選択して入力する手間が面倒くさいと思います。本記事では、その作業を省略したツールを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220208_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;まず、ワークフローファイルがあるフォルダ構成はこの様になっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2964&quot; height=&quot;1342&quot; src=&quot;/_astro/01.CknT1l1o_U2Mvy.webp&quot; srcset=&quot;/_astro/01.CknT1l1o_1xdOf3.webp 640w, /_astro/01.CknT1l1o_1K06JP.webp 750w, /_astro/01.CknT1l1o_Z2tfP44.webp 828w, /_astro/01.CknT1l1o_bLqHl.webp 1080w, /_astro/01.CknT1l1o_KdvTJ.webp 1280w, /_astro/01.CknT1l1o_ZSVDd3.webp 1668w, /_astro/01.CknT1l1o_1MSEEb.webp 2048w, /_astro/01.CknT1l1o_ZSaVoQ.webp 2560w, /_astro/01.CknT1l1o_U2Mvy.webp 2964w&quot; /&gt;&lt;/p&gt;&lt;p&gt;赤い部分は、デフォルトで用意するファイルで、
青い部分は、&lt;code&gt;generateWfForIssues.yml&lt;/code&gt;を実行することで、生成されるワークフローファイルになっています。
この青い部分のファイルはPythonファイル上で作成されています。そして、それらのワークフローファイルを作成する元になるのが、&lt;code&gt;generateIssues.yml&lt;/code&gt;になります。&lt;/p&gt;&lt;p&gt;と、少し解説したところで、GitHub Actionsの処理の流れは以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;generateWfForIssues.yml&lt;/code&gt;を実行して、Issuesを生成するためのワークフローファイル（青い部分のファイル群）を作成する。&lt;/li&gt;
&lt;li&gt;青い部分のファイル群をcron実行して、IssuesとProjectのカードを生成する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;removeWfForIssuesAndCsvContent.yml&lt;/code&gt;を実行して、生成したissuesの元となったCSVやワークフローファイルを削除する。&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;1-1．「generateWfForIssues.yml」を実行して、Issuesを生成するためのワークフローファイル（青い部分のファイル群）を作成する。（「generateIssues.yml」の解説）&lt;a href=&quot;#1-1generatewfforissuesymlを実行してissuesを生成するためのワークフローファイル青い部分のファイル群を作成するgenerateissuesymlの解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、&lt;code&gt;generateWfForIssues.yml&lt;/code&gt;を実行して、ワークフローファイルを作成するのですが、そのために&lt;code&gt;generateIssues.yml&lt;/code&gt;が何をしているのかを知る必要があります。&lt;/p&gt;&lt;p&gt;この&lt;code&gt;generateIssues.yml&lt;/code&gt;自体は実行されないワークフローファイルになるのですが、ワークフローファイル生成のために必要なものになります。&lt;/p&gt;&lt;p&gt;中身はこんな感じで、これを元に編集してワークフローファイルを作成します。
詳しい編集内容は、&lt;a href=&quot;https://www.endorphinbath.com/github-action-automake-issue-to-projects-former&quot; target=&quot;_blank&quot;&gt;Python編&lt;/a&gt;の方でご確認ください。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate issues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;generate_issues&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate Issues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Repo code checkout required if `template` is used&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# https://stackoverflow.com/a/60942437&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get current date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;echo &quot;::set-output name=date::$(date +&apos;%Y/%m/%d&apos;)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Scheduled Issue to landmaster135&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;imjohnbo/issue-bot@v3.3.6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ steps.date.outputs.date }}_(txtのタイトルが入る)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assignees&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;landmaster135&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Github Account name without @.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;labels&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;book&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pinned&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;close-previous&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;.github/ISSUE_TEMPLATE/custom.md&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;column&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Todo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;milestone&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;description1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ISSUEBOT_TOKEN }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Get current date&lt;/code&gt;のstepは、念の為残しているだけで、今回の処理には全く使用しません。以降の処理の&lt;code&gt;title&lt;/code&gt;に使用されていますが、実際にIssuesを作成する時は使用しません。
&lt;code&gt;uses: imjohnbo/issue-bot@v3.3.6&lt;/code&gt;のGitHub Actionsを使って、IssuesとProjectのカードに登録していきます。このアクションには、色々とオプションを設定できます。&lt;/p&gt;&lt;p&gt;その設定できるオプションに対して、このように設定しています。&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;No&lt;/th&gt;&lt;th&gt;オプション&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;title&lt;/td&gt;&lt;td&gt;Issuesのタイトルです。今回は、CSVのtitleフィールドの値を入れています。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;labels&lt;/td&gt;&lt;td&gt;ラベルです。デフォルトだと、「bug」とか「enhanced」とかあるやつです。今回は、「book」とか「blog」とかを指定しています。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;templates&lt;/td&gt;&lt;td&gt;Issues作成時に利用できるテンプレートMarkdownを指定します。ぶっちゃけ、登録する内容が毎回異なるので、指定はしていますが実際のところ使っていません。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;project&lt;/td&gt;&lt;td&gt;プロジェクト。IDで指定します。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;column&lt;/td&gt;&lt;td&gt;プロジェクトのkanbanのカラム。「To do」とか「Done」とか。（カラム名は空白文字が無いほうが良いです。結局設定の仕方が分かりませんでした。）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;milestone&lt;/td&gt;&lt;td&gt;プロジェクトごとに設定できるマイルストーン&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;body&lt;/td&gt;&lt;td&gt;Issuesの内容（Description）です。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;さらに、Issue、ProjectおよびMarkdownテンプレートがある画面と番号を照らし合わせてみてみます。&lt;/p&gt;&lt;p&gt;これがIssueのページになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2780&quot; height=&quot;1548&quot; src=&quot;/_astro/14.D2NlQnIg_1rV5Fu.webp&quot; srcset=&quot;/_astro/14.D2NlQnIg_Z1wYUO1.webp 640w, /_astro/14.D2NlQnIg_1aG4XL.webp 750w, /_astro/14.D2NlQnIg_1Xjeys.webp 828w, /_astro/14.D2NlQnIg_1pBPrT.webp 1080w, /_astro/14.D2NlQnIg_yNNRL.webp 1280w, /_astro/14.D2NlQnIg_2kfMLH.webp 1668w, /_astro/14.D2NlQnIg_1ARrP2.webp 2048w, /_astro/14.D2NlQnIg_Z1KRO2p.webp 2560w, /_astro/14.D2NlQnIg_1rV5Fu.webp 2780w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがProjectのページ。
&lt;img loading=&quot;lazy&quot; width=&quot;2916&quot; height=&quot;1372&quot; src=&quot;/_astro/15.FDE0A5Yi_Zlv28C.webp&quot; srcset=&quot;/_astro/15.FDE0A5Yi_Zh4veX.webp 640w, /_astro/15.FDE0A5Yi_Z1ToOes.webp 750w, /_astro/15.FDE0A5Yi_1s6uVr.webp 828w, /_astro/15.FDE0A5Yi_18c0RF.webp 1080w, /_astro/15.FDE0A5Yi_ZVBKJ5.webp 1280w, /_astro/15.FDE0A5Yi_Z20hWxS.webp 1668w, /_astro/15.FDE0A5Yi_ZeW3wF.webp 2048w, /_astro/15.FDE0A5Yi_ZopP4z.webp 2560w, /_astro/15.FDE0A5Yi_Zlv28C.webp 2916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがMarkdownテンプレートがある画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2578&quot; height=&quot;1292&quot; src=&quot;/_astro/16.ox4HYk7z_Z1A9jxg.webp&quot; srcset=&quot;/_astro/16.ox4HYk7z_ZYi7M9.webp 640w, /_astro/16.ox4HYk7z_Z4ItP2.webp 750w, /_astro/16.ox4HYk7z_2q844.webp 828w, /_astro/16.ox4HYk7z_ce289.webp 1080w, /_astro/16.ox4HYk7z_Z24TkiX.webp 1280w, /_astro/16.ox4HYk7z_ZJbK9d.webp 1668w, /_astro/16.ox4HYk7z_1lU7sa.webp 2048w, /_astro/16.ox4HYk7z_ZC93Sj.webp 2560w, /_astro/16.ox4HYk7z_Z1A9jxg.webp 2578w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、&lt;code&gt;project&lt;/code&gt;と&lt;code&gt;milestone&lt;/code&gt;の値は、これらの値が対応して、Issuesのオプションが登録されます。&lt;/p&gt;&lt;p&gt;project
&lt;img loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;760&quot; src=&quot;/_astro/02.Bybe7i7j_Z17pB2m.webp&quot; srcset=&quot;/_astro/02.Bybe7i7j_1PuVeJ.webp 640w, /_astro/02.Bybe7i7j_Z29Mcrk.webp 750w, /_astro/02.Bybe7i7j_ZDUtHW.webp 828w, /_astro/02.Bybe7i7j_gFhOr.webp 1080w, /_astro/02.Bybe7i7j_ZoQId5.webp 1280w, /_astro/02.Bybe7i7j_1PEIlf.webp 1668w, /_astro/02.Bybe7i7j_Z17pB2m.webp 2048w&quot; /&gt;&lt;/p&gt;&lt;p&gt;milestone
&lt;img loading=&quot;lazy&quot; width=&quot;2370&quot; height=&quot;1354&quot; src=&quot;/_astro/03.BSsmbGl1_ZpA8MG.webp&quot; srcset=&quot;/_astro/03.BSsmbGl1_2bhqVy.webp 640w, /_astro/03.BSsmbGl1_ZbdG4A.webp 750w, /_astro/03.BSsmbGl1_Bgnww.webp 828w, /_astro/03.BSsmbGl1_Zeruwa.webp 1080w, /_astro/03.BSsmbGl1_FBs8C.webp 1280w, /_astro/03.BSsmbGl1_Z10tL52.webp 1668w, /_astro/03.BSsmbGl1_Z1VbGQ4.webp 2048w, /_astro/03.BSsmbGl1_ZpA8MG.webp 2370w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-2．「generateWfForIssues.yml」を実行して、Issuesを生成するためのワークフローファイル（青い部分のファイル群）を作成する。（「generateWfForIssues.yml」の解説）&lt;a href=&quot;#1-2generatewfforissuesymlを実行してissuesを生成するためのワークフローファイル青い部分のファイル群を作成するgeneratewfforissuesymlの解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先程、&lt;code&gt;generateIssues.yml&lt;/code&gt;を解説しました。&lt;/p&gt;&lt;p&gt;次に、大元の&lt;code&gt;generateWfForIssues.yml&lt;/code&gt;の中身に関して解説します。
このワークフローの中身はこうなっています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate workflow files to make issue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;0 19 * * *&apos;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# At 04:00. – https://crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;generate_workflows&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate workflow files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Repo code checkout required if `template` is used&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ISSUEBOT_TOKEN }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Setup Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-python@v3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;python-version&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;3.8&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;architecture&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;x64&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get Python version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;python -V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install dependencies&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pip install --no-cache-dir -r requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;working-directory&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./generateIssueWf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Run Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;python generate_workflow_to_make_issue.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;working-directory&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./generateIssueWf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git setting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.email &quot;52403447+landmaster135@users.noreply.github.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.name &quot;landmaster135&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git log -1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add .github/workflows/generateIssues_*.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add .github/workflows/generatedWfFiles.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add .github/workflows/removeWfForIssuesAndCsvContent.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git diff --cached --quiet || (git commit -m &quot;Generate workflow to make issues&quot; &amp;amp;&amp;amp; git push origin master)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;行っていることは以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;AM4:00にcron起動する。&lt;/li&gt;
&lt;li&gt;リポジトリからチェックアウト。&lt;/li&gt;
&lt;li&gt;Python環境をセットアップ。&lt;/li&gt;
&lt;li&gt;依存先をインストール。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generate_workflow_to_make_issue.py&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;li&gt;git設定する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git add&lt;/code&gt; → &lt;code&gt;git commit&lt;/code&gt; → &lt;code&gt;git push&lt;/code&gt;する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;大体の処理の説明は割愛しますが、「リポジトリからチェックアウト」の部分の設定で僕自身がハマったので、ここだけ説明します。&lt;/p&gt;&lt;p&gt;このワークフローでは、ワークフローファイルをpushするのですが、そのためにこの工程で権限をしっかり開放してあげないとエラーになります。
設定するのは、GitHub上で、&lt;code&gt;Settings&lt;/code&gt;＞&lt;code&gt;Develpper settings&lt;/code&gt;＞&lt;code&gt;Personal access tokens&lt;/code&gt;で発行したトークンなのですが、この&lt;code&gt;workflow&lt;/code&gt;の箇所にチェックを付けましょう。&lt;/p&gt;&lt;p&gt;そうしないと、ワークフローファイルをpushできません。
&lt;img loading=&quot;lazy&quot; width=&quot;1478&quot; height=&quot;616&quot; src=&quot;/_astro/04.lcn_Ufv2_Z1PJWSN.webp&quot; srcset=&quot;/_astro/04.lcn_Ufv2_Z5Xk4m.webp 640w, /_astro/04.lcn_Ufv2_Z1OCm8h.webp 750w, /_astro/04.lcn_Ufv2_vDLtf.webp 828w, /_astro/04.lcn_Ufv2_115cEO.webp 1080w, /_astro/04.lcn_Ufv2_28wtuo.webp 1280w, /_astro/04.lcn_Ufv2_Z1PJWSN.webp 1478w&quot; /&gt;&lt;/p&gt;&lt;p&gt;あとは、working-directoryを忘れないようにしましょう！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2．青い部分のファイル群をcron実行して、IssuesとProjectのカードを生成する。&lt;a href=&quot;#2青い部分のファイル群をcron実行してissuesとprojectのカードを生成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ワークフローファイルを作成したので、それがcron実行されます。&lt;/p&gt;&lt;p&gt;例として、以下のような感じになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Generate issues&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;40 6 * * *&apos;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# https://crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;donelist_generate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Friday Standup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Repo code checkout required if `template` is used&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# https://stackoverflow.com/a/60942437&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get current date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;echo &quot;::set-output name=date::$(date +&apos;%Y/%m/%d&apos;)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Scheduled Issue to landmaster135&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;imjohnbo/issue-bot@v3.3.6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;FP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assignees&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;landmaster135&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Github Account name without @.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;labels&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;book&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pinned&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;close-previous&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;.github/ISSUE_TEMPLATE/custom.md&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;column&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Todo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;milestone&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;参考書２冊保持済み&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ISSUEBOT_TOKEN }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3．「removeWfForIssuesAndCsvContent.yml」を実行して、生成したissuesの元となったCSVやワークフローファイルを削除する。&lt;a href=&quot;#3removewfforissuesandcsvcontentymlを実行して生成したissuesの元となったcsvやワークフローファイルを削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、最後に、Issuesを作成したワークフローファイルとそれの元となったCSVファイルの内容などを削除します。&lt;/p&gt;&lt;p&gt;ここでも、チェックアウトのときのトークン設定に気を付けます。そうしないと、ワークフローファイルを削除することが出来ません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Remove workflow files making issue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;30 4 * * *&apos;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# https://crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;remove_workflows&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Remove workflow files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Repo code checkout required if `template` is used&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ secrets.ISSUEBOT_TOKEN }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Setup Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-python@v3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;python-version&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;3.8&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;architecture&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;x64&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Get Python version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;python -V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install dependencies&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;pip install --no-cache-dir -r requirements.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;working-directory&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./generateIssueWf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Run Python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;python remove_workflow_files_making_issue.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;working-directory&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;./generateIssueWf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git setting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.email &quot;52403447+landmaster135@users.noreply.github.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.name &quot;landmaster135&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git log -1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git rm .github/workflows/generateIssues_*.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add .github/workflows/generatedWfFiles.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add ./generateIssueWf/*.csv -u&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git diff --cached --quiet || (git commit -m &quot;Remove workflow making issues&quot; &amp;amp;&amp;amp; git push origin master)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ちなみに、この部分は、その日に登録するIssuesがなかったら、コメントアウトされます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;30 4 * * *&apos;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# https://crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;コメントアウトして、&lt;code&gt;removeWfForIssuesAndCsvContent.yml&lt;/code&gt;が実行されないようにします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   schedule:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   - cron: &apos;30 4 * * *&apos;  # https://crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とまあ、前回のPython編に引き続き、2回に渡って今回のツールに関して紹介してきました！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで、GitHub Issuesへのタスクの入力がだいぶ楽になるかもしれん！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonの中身の方を解説した記事はこちらです。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-make-cron/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】cronを生成するモジュールを作った&lt;/div&gt;&lt;div&gt;Pythonでcron時間を生成するモジュールを作りました。タイムゾーンを引数にして生成できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220211_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回のツールのソースを載せたリポジトリが、以下にあります。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/generateIssueWf_Dev&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;generateIssueWf_Dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】自分がブログで書いた記事のURLからスクレイピングしてドキュメントに出力する</title><link>https://endorphinbath.com/posts/javascript-object-type-summarize/</link><guid isPermaLink="true">https://endorphinbath.com/posts/javascript-object-type-summarize/</guid><description>下書きを書かずに投稿してしまったブログの記事をスクレイピングして、Googleドライブ上に出力するツールを作りました。スクレイピングにエラーにならずに失敗した時のログを出力する処理も施しています。</description><pubDate>Thu, 07 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;avaScriptでオブジェクトの型を判別したい・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、Object.prototype.toString.call()を使ってみませんか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どれどれ・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;型の判別に使うメソッド&lt;a href=&quot;#型の判別に使うメソッド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、型の判別に使うメソッドは、こちらです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;使用するメソッド&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例えば、以下のように使うと、以下のような返り値が取得できます。返り値は文字列で返ってきます。
&lt;code&gt;使用例と返り値&lt;/code&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;test&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;type_a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type_a&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// [object String]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;型のまとめ&lt;a href=&quot;#型のまとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、型と例をまとめた表になります。&lt;/p&gt;
























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;型&lt;/th&gt;&lt;th&gt;具体例&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;“test”、’hogehoge’&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Number&lt;/td&gt;&lt;td&gt;11、34.5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Array&lt;/td&gt;&lt;td&gt;[“1”, 1]、[“ho”, “ge”]&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Object&lt;/td&gt;&lt;td&gt;{test: “abc”}, {test: 234}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Function&lt;/td&gt;&lt;td&gt;function objTestFunc(){return “test”;}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Null&lt;/td&gt;&lt;td&gt;null&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Undefined&lt;/td&gt;&lt;td&gt;「let hoge;」だけして変数を入れなかった場合。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Set&lt;/td&gt;&lt;td&gt;new Set([1, 2])&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Symbol&lt;/td&gt;&lt;td&gt;Symbol(“test”)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Error&lt;/td&gt;&lt;td&gt;new TypeError()&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;BigInt&lt;/td&gt;&lt;td&gt;2n ** 53n&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;これを使った型判別するための関数&lt;a href=&quot;#これを使った型判別するための関数&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この&lt;code&gt;Object.prototype.toString.call()&lt;/code&gt;を利用した関数を作りましたので、よければ使ってみてください。例外処理でよく使っています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{any}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{string}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isObjectType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;String&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;type must be String type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、これで判別してみてください。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あざっした！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】PythonとGitHub ActionsでProjectsにIssuesを作る作業を自動化する（前編：Pythonのソース）</title><link>https://endorphinbath.com/posts/github-action-automake-issue-to-projects-former/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-action-automake-issue-to-projects-former/</guid><description>日々のタスクをGitHub IssuesおよびGitHub Projectsで管理する時に登録する作業が面倒くさいと思います。いちいちオプションを選択して入力する手間が面倒くさいと思います。本記事では、その作業を省略したツールを紹介します。</description><pubDate>Wed, 06 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;私は、ふと思った。日々のタスクをGitHub上で管理したいと。しかし、GitHubのissuesを登録する時にいちいちオプションを選択して入力する手間が面倒くさい。そして、GitHub Projectsでも管理したいけど、その場合は尚更である。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふむふむ、どうしたどうした。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ということで、GitHub IssuesとGitHub Projectsを一気に登録するツールとかないですか！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;作ってみますかぁ。まずは、第1弾だ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回、取り組んだこと&lt;a href=&quot;#今回取り組んだこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、自分がリポジトリ内に用意したCSVのタイトルと内容を読み取って、その内容をGitHub Projects内にカードとして登録させるツールです。&lt;/p&gt;&lt;p&gt;例えば、このようにCSVを編集しておいて、・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2948&quot; height=&quot;1278&quot; src=&quot;/_astro/01.B7W_GqcU_Zw3xBO.webp&quot; srcset=&quot;/_astro/01.B7W_GqcU_n2yml.webp 640w, /_astro/01.B7W_GqcU_zVUPH.webp 750w, /_astro/01.B7W_GqcU_Z168T4r.webp 828w, /_astro/01.B7W_GqcU_Z77uJO.webp 1080w, /_astro/01.B7W_GqcU_Z1fqRvy.webp 1280w, /_astro/01.B7W_GqcU_Z887gC.webp 1668w, /_astro/01.B7W_GqcU_Z2x2XsS.webp 2048w, /_astro/01.B7W_GqcU_19ECKw.webp 2560w, /_astro/01.B7W_GqcU_Zw3xBO.webp 2948w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このGitHub Actionsが動くと、CSV内のレコード数と同じ数のワークフローファイルが作成されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2856&quot; height=&quot;1172&quot; src=&quot;/_astro/02.DtmGXFpq_jc3p3.webp&quot; srcset=&quot;/_astro/02.DtmGXFpq_Z1S5oMP.webp 640w, /_astro/02.DtmGXFpq_Z1DA3AA.webp 750w, /_astro/02.DtmGXFpq_ZNPAnI.webp 828w, /_astro/02.DtmGXFpq_1WjTVg.webp 1080w, /_astro/02.DtmGXFpq_1GopJK.webp 1280w, /_astro/02.DtmGXFpq_Z2dVrN1.webp 1668w, /_astro/02.DtmGXFpq_ZOdqfc.webp 2048w, /_astro/02.DtmGXFpq_19aGKw.webp 2560w, /_astro/02.DtmGXFpq_jc3p3.webp 2856w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、色々動いた後に、このようにkanban形式内でcardが登録されます。Issueも登録されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2732&quot; height=&quot;1358&quot; src=&quot;/_astro/03.VJRhBE6g_2iT5hF.webp&quot; srcset=&quot;/_astro/03.VJRhBE6g_ZI4hE8.webp 640w, /_astro/03.VJRhBE6g_Z2mYzmv.webp 750w, /_astro/03.VJRhBE6g_Z2fOWsp.webp 828w, /_astro/03.VJRhBE6g_Q1479.webp 1080w, /_astro/03.VJRhBE6g_1922do.webp 1280w, /_astro/03.VJRhBE6g_Z2wl0a0.webp 1668w, /_astro/03.VJRhBE6g_28UcYJ.webp 2048w, /_astro/03.VJRhBE6g_dWxU3.webp 2560w, /_astro/03.VJRhBE6g_2iT5hF.webp 2732w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;システム構成&lt;a href=&quot;#システム構成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ざっと、今回のツールのシステム構成を書きます。&lt;/p&gt;&lt;p&gt;概要図はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;2870&quot; height=&quot;1532&quot; src=&quot;/_astro/04.beQKcgRI_Z1sKPAP.webp&quot; srcset=&quot;/_astro/04.beQKcgRI_1hdkmJ.webp 640w, /_astro/04.beQKcgRI_Z151CGg.webp 750w, /_astro/04.beQKcgRI_ZfVzmg.webp 828w, /_astro/04.beQKcgRI_Z1NucfE.webp 1080w, /_astro/04.beQKcgRI_Z2rXD0q.webp 1280w, /_astro/04.beQKcgRI_292Mx1.webp 1668w, /_astro/04.beQKcgRI_Z1XQskU.webp 2048w, /_astro/04.beQKcgRI_NhR0a.webp 2560w, /_astro/04.beQKcgRI_Z1sKPAP.webp 2870w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ざっくりした流れは以下の感じです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Issueを作るために、Pythonファイルを動かすGitHub Actionsが動く。（夜中の4時に設定）&lt;/li&gt;
&lt;li&gt;Pythonファイルが動いて、Issueを作るためのGitHub Actionsのワークフローファイルが作成される。&lt;/li&gt;
&lt;li&gt;そのワークフローファイルは、そのPythonファイルが動いた10分後に起動する。&lt;/li&gt;
&lt;li&gt;ワークフローファイルが起動。Issueに登録したと同時にGitHub Projectsにもカードを追加する。&lt;/li&gt;
&lt;li&gt;その日に登録した分のワークフローファイルとCSVの内容を削除するために、Pythonファイルを動かすGitHub Actionsが動く。（1. の30分後に設定。設定処理は、2. で行っていた。）&lt;/li&gt;
&lt;li&gt;Pythonファイルが動いて、ワークフローファイルとCSVの内容を削除する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;流れと概要図を対応させるとこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;2870&quot; height=&quot;1532&quot; src=&quot;/_astro/05.CbcYU_1V_Z2hYdDf.webp&quot; srcset=&quot;/_astro/05.CbcYU_1V_Z1GvwHI.webp 640w, /_astro/05.CbcYU_1V_11qD2d.webp 750w, /_astro/05.CbcYU_1V_1PvGmd.webp 828w, /_astro/05.CbcYU_1V_2rtyvR.webp 1080w, /_astro/05.CbcYU_1V_1N07L6.webp 1280w, /_astro/05.CbcYU_1V_1jOpuB.webp 1668w, /_astro/05.CbcYU_1V_2h7iqB.webp 2048w, /_astro/05.CbcYU_1V_ZUv2f.webp 2560w, /_astro/05.CbcYU_1V_Z2hYdDf.webp 2870w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回作ったツールの肝となるGitHub Actionsがこれです。GitHub公式のものみたいなので、長い期間利用できそうです。&lt;/p&gt;&lt;a href=&quot;https://github.com/imjohnbo/issue-bot&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;imjohnbo&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;issue-bot&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonスクリプトの中身&lt;a href=&quot;#pythonスクリプトの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、前編として、Pythonの中身を見てみたいと思います。&lt;/p&gt;&lt;p&gt;Pythonを実行するディレクトリ内の構成は、以下の感じになっています。&lt;code&gt;img/&lt;/code&gt;と&lt;code&gt;README.md&lt;/code&gt;は使いません。&lt;code&gt;requirements.txt&lt;/code&gt;では、僕用に色々な処理をまとめたライブラリだけをインストールします。
&lt;img loading=&quot;lazy&quot; width=&quot;2902&quot; height=&quot;1468&quot; src=&quot;/_astro/06.CPudna7O_Z1gJse8.webp&quot; srcset=&quot;/_astro/06.CPudna7O_ZA9Y8q.webp 640w, /_astro/06.CPudna7O_joDNG.webp 750w, /_astro/06.CPudna7O_Z26APaX.webp 828w, /_astro/06.CPudna7O_2dQBoQ.webp 1080w, /_astro/06.CPudna7O_2rL3ej.webp 1280w, /_astro/06.CPudna7O_t9sO3.webp 1668w, /_astro/06.CPudna7O_2v9O9D.webp 2048w, /_astro/06.CPudna7O_rY6wn.webp 2560w, /_astro/06.CPudna7O_Z1gJse8.webp 2902w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonファイルその1：generate_workflow_to_make_issue.py&lt;a href=&quot;#pythonファイルその1generate_workflow_to_make_issuepy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下がソースです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; distutils.log &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; time &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; time&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; traceback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pathlib &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by third party&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library in the local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library in landmasterlibrary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; landmasterlibrary.generaltool &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; get_str_by_zero_padding, get_src_path_from_test_path, read_txt_lines, read_csv_lines, get_indcies_containing_words, append_items, generate_cron_from_datetime_now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rewrite_cron_of_remove_workflow&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;is_there_issue_to_generate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;minutes_scheduled_later&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;time_difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;removeWfForIssuesAndCsvContent.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dir_having_file &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.github/workflows&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_full_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_src_path_from_test_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, file_name, dir_having_file, &lt;/span&gt;&lt;span&gt;isChecking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_txt_lines&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, [file_name], dir_having_file)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mark_of_schedule &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  schedule:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index_of_workflow_schedule &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_indcies_containing_words&lt;/span&gt;&lt;span&gt;(read_wf_lines, [mark_of_schedule])[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;mark_of_cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  - cron: &apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index_of_workflow_cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_indcies_containing_words&lt;/span&gt;&lt;span&gt;(read_wf_lines, [mark_of_cron])[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_workflow_schedule] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  schedule:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_workflow_cron] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;  - cron: &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;  # https://crontab.guru&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, read_wf_lines))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_full_name, &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fw:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fw.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(read_wf_lines_str)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(read_wf_lines_str)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;==================================&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_workflow&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;labels &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;book&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;blog&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_files &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_zero_length &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_there_issue_to_generate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(labels)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_files.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;labels[i]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;s.csv&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_csv_lines&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, read_files, &lt;/span&gt;&lt;span&gt;&quot;generateIssueWf&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(txt_lines)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_lines[i].&lt;/span&gt;&lt;span&gt;pop&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;# remove &quot;title,milestone&quot; row.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(txt_lines[i]) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count_of_zero_length &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(txt_lines)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; count_of_zero_length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(labels):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;txt_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [[[&lt;/span&gt;&lt;span&gt;&quot;dummytitle&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;dummybody&quot;&lt;/span&gt;&lt;span&gt;]]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;is_there_issue_to_generate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rewrite_cron_of_remove_workflow&lt;/span&gt;&lt;span&gt;(is_there_issue_to_generate, minutes_scheduled_later &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; is_there_issue_to_generate:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_lines.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;  schedule:&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_lines.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;  - cron: &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;  # https://crontab.guru&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_lines.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;#   schedule:&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_lines.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;#   - cron: &apos;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&apos;  # https://crontab.guru&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;No generated workflows to make issues today.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# return False&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str_of_workflow_dispatch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  workflow_dispatch:&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_txt_lines&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;&quot;generateIssues.yml&quot;&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&quot;.github/workflows&quot;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index_of_workflow_dispatch &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_wf_lines.&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;(str_of_workflow_dispatch)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;append_items&lt;/span&gt;&lt;span&gt;(read_wf_lines, cron_lines, index_of_workflow_dispatch &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;str_of_scheduled_issue &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;    - name: Scheduled Issue to landmaster135&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; read_wf_lines.&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;(str_of_scheduled_issue)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;src_file_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;generateIssues.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generated_files &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(txt_lines)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; j &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(txt_lines[i])):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# write contents&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        title: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;txt_lines[i][j][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# title&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;label &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(labels[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        labels: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# labels&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        template: &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;.github/ISSUE_TEMPLATE/custom.md&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# template&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        project: 1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        column: Todo&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# column&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;milestone &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;initial_of_milestone &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;        milestone: &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; txt_lines[i][j][&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;milestone &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;initial_of_milestone&lt;/span&gt;&lt;span&gt;}{&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(txt_lines[i][j][&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; milestone &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# milestone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines[index_of_name_of_scheduled_issue &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;        body: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;txt_lines[i][j][&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# body&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# decide file name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j_padded &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_str_by_zero_padding&lt;/span&gt;&lt;span&gt;(j, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;src_file_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;generateIssues_&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;j_padded&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;.yml&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generated_file_full_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_src_path_from_test_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, src_file_name, &lt;/span&gt;&lt;span&gt;&quot;.github/workflows&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isChecking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# generate workflow files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_wf_lines_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, read_wf_lines))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(generated_file_full_name, &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fw:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fw.&lt;/span&gt;&lt;span&gt;writelines&lt;/span&gt;&lt;span&gt;(read_wf_lines_str)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generated_files.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(src_file_name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# genereate text memo file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generated_files_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;, generated_files))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_name_written_file_to_remove &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;generatedWfFiles.txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generated_file_full_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_src_path_from_test_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, file_name_written_file_to_remove, &lt;/span&gt;&lt;span&gt;&quot;.github/workflows&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isChecking&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(generated_file_full_name, &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fw:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fw.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(generated_files_str)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; read_wf_lines:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(i)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;generate_workflow&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;処理の流れとしては、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Pythonファイル内で読み取るラベルを指定。今回は、&lt;code&gt;book&lt;/code&gt;と&lt;code&gt;blog&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;ラベルに対応したCSVファイルを読み取る。今回で言うと、&lt;code&gt;books.csv&lt;/code&gt;と&lt;code&gt;blogs.csv&lt;/code&gt;を読み取る。&lt;/li&gt;
&lt;li&gt;issueを登録するワークフローファイルのcronを実行時の10分後に設定する。（まだファイル生成は行わない。）&lt;/li&gt;
&lt;li&gt;もう一つのPythonファイル（&lt;code&gt;remove_workflow_files_making_issue.py&lt;/code&gt;：登録したIssueの元情報（CSVとかワークフローファイル）を消すためのファイル）を実行するワークフローファイルのcronを3.の20分後に設定する。こっちはここでファイル編集を行う。&lt;/li&gt;
&lt;li&gt;登録したいissueがCSVになかったら、ワークフローファイル用にダミーの内容を1つ用意する。&lt;/li&gt;
&lt;li&gt;登録する個々のIssueに対して、色々なオプションを設定して、設定するためのワークフローファイルを作成する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それでは、以下で詳しく解説していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1．Pythonファイル内で読み取るラベルを指定。&lt;a href=&quot;#1pythonファイル内で読み取るラベルを指定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回は、&lt;code&gt;book&lt;/code&gt;と&lt;code&gt;blog&lt;/code&gt;を指定したので、&lt;code&gt;books.csv&lt;/code&gt;と&lt;code&gt;blogs.csv&lt;/code&gt;を作成しておいて、Pythonファイルに読み取らせます。
&lt;img loading=&quot;lazy&quot; width=&quot;2902&quot; height=&quot;1468&quot; src=&quot;/_astro/07.BsVa6YP2_ZlsoTr.webp&quot; srcset=&quot;/_astro/07.BsVa6YP2_zGuv2.webp 640w, /_astro/07.BsVa6YP2_1ug8s9.webp 750w, /_astro/07.BsVa6YP2_ZUJlwv.webp 828w, /_astro/07.BsVa6YP2_Z1V3t5o.webp 1080w, /_astro/07.BsVa6YP2_Z1H92fV.webp 1280w, /_astro/07.BsVa6YP2_1oqw8J.webp 1668w, /_astro/07.BsVa6YP2_Z1DKgkB.webp 2048w, /_astro/07.BsVa6YP2_1ng9Q4.webp 2560w, /_astro/07.BsVa6YP2_ZlsoTr.webp 2902w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2．ラベルに対応したCSVファイルを読み取る。&lt;a href=&quot;#2ラベルに対応したcsvファイルを読み取る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、CSVファイルを読み取ります。取得する内容は、ヘッダーの行以外になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2926&quot; height=&quot;1018&quot; src=&quot;/_astro/08.CyLn1BCG_ZQHsO5.webp&quot; srcset=&quot;/_astro/08.CyLn1BCG_Z1kzcp1.webp 640w, /_astro/08.CyLn1BCG_Znu0T0.webp 750w, /_astro/08.CyLn1BCG_Z22IH97.webp 828w, /_astro/08.CyLn1BCG_H912L.webp 1080w, /_astro/08.CyLn1BCG_1A2vwD.webp 1280w, /_astro/08.CyLn1BCG_Z6KSVa.webp 1668w, /_astro/08.CyLn1BCG_ZSDgmr.webp 2048w, /_astro/08.CyLn1BCG_1UlnJI.webp 2560w, /_astro/08.CyLn1BCG_ZQHsO5.webp 2926w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3．issueを登録するワークフローファイルのcronを実行時の10分後に設定する。&lt;a href=&quot;#3issueを登録するワークフローファイルのcronを実行時の10分後に設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これらのIssueを登録するためのワークフローの実行時間を設定します。&lt;/p&gt;&lt;p&gt;ワークフローファイルを作った直後はこんなファイル構成になります。（この工程ではまだ作りません。5.の工程での判定を超えてから作ります。）
&lt;img loading=&quot;lazy&quot; width=&quot;2926&quot; height=&quot;1152&quot; src=&quot;/_astro/09.CUZFOxmd_6UDKV.webp&quot; srcset=&quot;/_astro/09.CUZFOxmd_Z2rlRay.webp 640w, /_astro/09.CUZFOxmd_12ubiu.webp 750w, /_astro/09.CUZFOxmd_Z1lw52y.webp 828w, /_astro/09.CUZFOxmd_J3kGI.webp 1080w, /_astro/09.CUZFOxmd_Z1WNqtz.webp 1280w, /_astro/09.CUZFOxmd_Z2qB5TK.webp 1668w, /_astro/09.CUZFOxmd_Z5nEuU.webp 2048w, /_astro/09.CUZFOxmd_Z2bzJbk.webp 2560w, /_astro/09.CUZFOxmd_6UDKV.webp 2926w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これらのワークフローファイルにcronを設定します。例えば、AM4:00にこのPythonスクリプトが実行されたら、AM4:10にこれらのワークフローファイルが実行されるように設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;2290&quot; height=&quot;854&quot; src=&quot;/_astro/10.Cz0A0uAV_Z2aJucF.webp&quot; srcset=&quot;/_astro/10.Cz0A0uAV_Z2fbaIs.webp 640w, /_astro/10.Cz0A0uAV_1rLdOG.webp 750w, /_astro/10.Cz0A0uAV_ZeqWsk.webp 828w, /_astro/10.Cz0A0uAV_Z21TJG3.webp 1080w, /_astro/10.Cz0A0uAV_2mJn5m.webp 1280w, /_astro/10.Cz0A0uAV_ZtncTy.webp 1668w, /_astro/10.Cz0A0uAV_1E3phv.webp 2048w, /_astro/10.Cz0A0uAV_Z2aJucF.webp 2290w&quot; /&gt;&lt;/p&gt;&lt;p&gt;cron設定の詳細は、この記事でも紹介していますので、よければご参考ください。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/python-make-cron/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】cronを生成するモジュールを作った&lt;/div&gt;&lt;div&gt;Pythonでcron時間を生成するモジュールを作りました。タイムゾーンを引数にして生成できます。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/04/20220211_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4．もう一つのPythonファイルを実行するワークフローファイルのcronを3.の20分後に設定する。&lt;a href=&quot;#4もう一つのpythonファイルを実行するワークフローファイルのcronを3の20分後に設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、&lt;code&gt;remove_workflow_files_making_issue.py&lt;/code&gt;という、登録したIssueの元情報（CSVとかワークフローファイル）を消すためのPythonファイルを実行するワークフローファイルのスケジュールを設定します。&lt;/p&gt;&lt;p&gt;そのワークフローファイルの名前が、&lt;code&gt;removeWfForIssuesAndCsvContent.yml&lt;/code&gt;と言います。
&lt;img loading=&quot;lazy&quot; width=&quot;2482&quot; height=&quot;960&quot; src=&quot;/_astro/11.CaJhZVQs_Z1TiE1K.webp&quot; srcset=&quot;/_astro/11.CaJhZVQs_1kscUp.webp 640w, /_astro/11.CaJhZVQs_ZBN1Uu.webp 750w, /_astro/11.CaJhZVQs_j2bcL.webp 828w, /_astro/11.CaJhZVQs_2hvYrx.webp 1080w, /_astro/11.CaJhZVQs_1znYG8.webp 1280w, /_astro/11.CaJhZVQs_1g2gEf.webp 1668w, /_astro/11.CaJhZVQs_Z1HriE5.webp 2048w, /_astro/11.CaJhZVQs_Z1TiE1K.webp 2482w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このワークフローファイルにcronを設定します。
例えば、AM4:00にこのPythonスクリプトが実行されたら、先程はAM4:10にこれらのワークフローファイルが実行されるように設定しましたが、&lt;/p&gt;&lt;p&gt;このファイルでは、AM4:30に実行されるように設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;768&quot; src=&quot;/_astro/12.CmyKhwmr_Z2g9IYt.webp&quot; srcset=&quot;/_astro/12.CmyKhwmr_6Bfj2.webp 640w, /_astro/12.CmyKhwmr_ZxS46b.webp 750w, /_astro/12.CmyKhwmr_1inVqk.webp 828w, /_astro/12.CmyKhwmr_2vCdFz.webp 1080w, /_astro/12.CmyKhwmr_1RkAeN.webp 1280w, /_astro/12.CmyKhwmr_1EkM5s.webp 1668w, /_astro/12.CmyKhwmr_1kf9yQ.webp 2048w, /_astro/12.CmyKhwmr_Z2g9IYt.webp 2536w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程も含めて、10分と20分と間を空けていますが、この時間に特別な意味はありません。大体、そのくらいの時間でGitHub Actionsが終わるだろうという見込みの数値です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5．登録したいissueがCSVになかったら、ダミーの内容でワークフローファイルを1つ作成する。&lt;a href=&quot;#5登録したいissueがcsvになかったらダミーの内容でワークフローファイルを1つ作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;日によっては、登録したいissueが無いことがあると思います。その場合は、ダミーの内容で、6.の処理を行います。
&lt;img loading=&quot;lazy&quot; width=&quot;2422&quot; height=&quot;814&quot; src=&quot;/_astro/13.DZW6cBJZ_2hIHuD.webp&quot; srcset=&quot;/_astro/13.DZW6cBJZ_25Xz7Q.webp 640w, /_astro/13.DZW6cBJZ_Zbf3LR.webp 750w, /_astro/13.DZW6cBJZ_2p6blW.webp 828w, /_astro/13.DZW6cBJZ_Z1gglzK.webp 1080w, /_astro/13.DZW6cBJZ_2qIuHT.webp 1280w, /_astro/13.DZW6cBJZ_Z2bEjrE.webp 1668w, /_astro/13.DZW6cBJZ_Z2wxqOH.webp 2048w, /_astro/13.DZW6cBJZ_2hIHuD.webp 2422w&quot; /&gt;&lt;/p&gt;&lt;p&gt;元々は、6.の処理を行わずに、Pythonスクリプトを終了させるようにしていたのですが、そうすると&lt;code&gt;git add&lt;/code&gt;する際にファイルがないので、GitHub Actions実行中にエラーが発生します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;continue-on-error: true&lt;/code&gt;にして、GitHub Actionsのエラーを無視することも試したのですが、エラーが起きた旨の通知メールは届いてしまうので、&lt;code&gt;git add&lt;/code&gt;を空振りさせない方法に落ち着きました。&lt;/p&gt;&lt;p&gt;これがそのメール。これが毎日届くのは煩わしい・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2142&quot; src=&quot;/_astro/22.BfARRIot_1qixm.webp&quot; srcset=&quot;/_astro/22.BfARRIot_ZmY3Ix.webp 640w, /_astro/22.BfARRIot_15Uhr3.webp 750w, /_astro/22.BfARRIot_6Dnf6.webp 828w, /_astro/22.BfARRIot_1qixm.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6．登録する個々のIssueに対して、色々なオプションを設定して、設定するためのワークフローファイルを作成する。&lt;a href=&quot;#6登録する個々のissueに対して色々なオプションを設定して設定するためのワークフローファイルを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;5.の壁を超えたら、Issueを設定するためのワークフローファイルを作成する処理に入ります。
作成するための元のワークフローファイル&lt;code&gt;generateIssues.yml&lt;/code&gt;を読み取ってそのオプション値を変えていきます。&lt;/p&gt;&lt;p&gt;まず、Issue、ProjectおよびMarkdownテンプレートがある画面と照らし合わせてみてみます。&lt;/p&gt;&lt;p&gt;これがIssueのページになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2780&quot; height=&quot;1548&quot; src=&quot;/_astro/14.D2NlQnIg_1rV5Fu.webp&quot; srcset=&quot;/_astro/14.D2NlQnIg_Z1wYUO1.webp 640w, /_astro/14.D2NlQnIg_1aG4XL.webp 750w, /_astro/14.D2NlQnIg_1Xjeys.webp 828w, /_astro/14.D2NlQnIg_1pBPrT.webp 1080w, /_astro/14.D2NlQnIg_yNNRL.webp 1280w, /_astro/14.D2NlQnIg_2kfMLH.webp 1668w, /_astro/14.D2NlQnIg_1ARrP2.webp 2048w, /_astro/14.D2NlQnIg_Z1KRO2p.webp 2560w, /_astro/14.D2NlQnIg_1rV5Fu.webp 2780w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがProjectのページ。
&lt;img loading=&quot;lazy&quot; width=&quot;2916&quot; height=&quot;1372&quot; src=&quot;/_astro/15.FDE0A5Yi_Zlv28C.webp&quot; srcset=&quot;/_astro/15.FDE0A5Yi_Zh4veX.webp 640w, /_astro/15.FDE0A5Yi_Z1ToOes.webp 750w, /_astro/15.FDE0A5Yi_1s6uVr.webp 828w, /_astro/15.FDE0A5Yi_18c0RF.webp 1080w, /_astro/15.FDE0A5Yi_ZVBKJ5.webp 1280w, /_astro/15.FDE0A5Yi_Z20hWxS.webp 1668w, /_astro/15.FDE0A5Yi_ZeW3wF.webp 2048w, /_astro/15.FDE0A5Yi_ZopP4z.webp 2560w, /_astro/15.FDE0A5Yi_Zlv28C.webp 2916w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これがMarkdownテンプレートがある画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2578&quot; height=&quot;1292&quot; src=&quot;/_astro/16.ox4HYk7z_Z1A9jxg.webp&quot; srcset=&quot;/_astro/16.ox4HYk7z_ZYi7M9.webp 640w, /_astro/16.ox4HYk7z_Z4ItP2.webp 750w, /_astro/16.ox4HYk7z_2q844.webp 828w, /_astro/16.ox4HYk7z_ce289.webp 1080w, /_astro/16.ox4HYk7z_Z24TkiX.webp 1280w, /_astro/16.ox4HYk7z_ZJbK9d.webp 1668w, /_astro/16.ox4HYk7z_1lU7sa.webp 2048w, /_astro/16.ox4HYk7z_ZC93Sj.webp 2560w, /_astro/16.ox4HYk7z_Z1A9jxg.webp 2578w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのIssueなどのオプションに対して、このように設定しています。&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;No&lt;/th&gt;&lt;th&gt;オプション&lt;/th&gt;&lt;th&gt;説明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;title&lt;/td&gt;&lt;td&gt;Issuesのタイトルです。今回は、CSVのtitleフィールドの値を入れています。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;labels&lt;/td&gt;&lt;td&gt;ラベルです。デフォルトだと、「bug」とか「enhanced」とかあるやつです。今回は、「book」とか「blog」とかを指定しています。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;templates&lt;/td&gt;&lt;td&gt;Issues作成時に利用できるテンプレートMarkdownを指定します。ぶっちゃけ、登録する内容が毎回異なるので、指定はしていますが実際のところ使っていません。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;project&lt;/td&gt;&lt;td&gt;プロジェクト。IDで指定します。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;column&lt;/td&gt;&lt;td&gt;プロジェクトのkanbanのカラム。「To do」とか「Done」とか。（カラム名は空白文字が無いほうが良いです。結局設定の仕方が分かりませんでした。）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;milestone&lt;/td&gt;&lt;td&gt;プロジェクトごとに設定できるマイルストーン&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;body&lt;/td&gt;&lt;td&gt;Issuesの内容（Description）です。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;そして、色々設定したら、ワークフローファイルを書き出して、&lt;code&gt;git push&lt;/code&gt;します。&lt;/p&gt;&lt;p&gt;ワークフローファイル作成前のフォルダ構成は、こんな感じですが、
&lt;img loading=&quot;lazy&quot; width=&quot;2866&quot; height=&quot;768&quot; src=&quot;/_astro/17.CDf6ng7T_1Fcnf2.webp&quot; srcset=&quot;/_astro/17.CDf6ng7T_Z10VLdp.webp 640w, /_astro/17.CDf6ng7T_BDTIP.webp 750w, /_astro/17.CDf6ng7T_YUw1i.webp 828w, /_astro/17.CDf6ng7T_1uAiIk.webp 1080w, /_astro/17.CDf6ng7T_9DoNN.webp 1280w, /_astro/17.CDf6ng7T_Hpop0.webp 1668w, /_astro/17.CDf6ng7T_Z2683Ei.webp 2048w, /_astro/17.CDf6ng7T_22hG2P.webp 2560w, /_astro/17.CDf6ng7T_1Fcnf2.webp 2866w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ワークフローファイル作成後は、こうなります。
&lt;img loading=&quot;lazy&quot; width=&quot;2926&quot; height=&quot;1152&quot; src=&quot;/_astro/09.CUZFOxmd_6UDKV.webp&quot; srcset=&quot;/_astro/09.CUZFOxmd_Z2rlRay.webp 640w, /_astro/09.CUZFOxmd_12ubiu.webp 750w, /_astro/09.CUZFOxmd_Z1lw52y.webp 828w, /_astro/09.CUZFOxmd_J3kGI.webp 1080w, /_astro/09.CUZFOxmd_Z1WNqtz.webp 1280w, /_astro/09.CUZFOxmd_Z2qB5TK.webp 1668w, /_astro/09.CUZFOxmd_Z5nEuU.webp 2048w, /_astro/09.CUZFOxmd_Z2bzJbk.webp 2560w, /_astro/09.CUZFOxmd_6UDKV.webp 2926w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上で、&lt;code&gt;generate_workflow_to_make_issue.py&lt;/code&gt;の解説になります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Pythonファイルその2：remove_workflow_files_making_issue.py&lt;a href=&quot;#pythonファイルその2remove_workflow_files_making_issuepy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、ワークフローでIssuesが登録された後に行う処理の解説になります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; distutils.log &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; traceback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; pathlib &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library by third party&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library in the local&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Library in landmasterlibrary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; landmasterlibrary.generaltool &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; get_src_path_from_test_path, read_txt_lines, get_files_by_extensions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_workflow&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# remove workflow files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_names_written_file_to_remove &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;generatedWfFiles.txt&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;target_dir &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.github/workflows&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_names &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read_txt_lines&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, file_names_written_file_to_remove, target_dir)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(file_names)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_full_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_src_path_from_test_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, file_names[i], target_dir)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;(file_full_name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_full_name_written_file_to_remove &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_src_path_from_test_path&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;, file_names_written_file_to_remove[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], target_dir)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_full_name_written_file_to_remove, &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fw:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fw.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# delete issue titles from csv files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extension &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;.csv&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;csv_files &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_files_by_extensions&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;./&quot;&lt;/span&gt;&lt;span&gt;, extension)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(csv_files)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(csv_files)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(csv_files[i], &lt;/span&gt;&lt;span&gt;&quot;r&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fr:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; fr.&lt;/span&gt;&lt;span&gt;readlines&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(read_lines)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(csv_files[i], &lt;/span&gt;&lt;span&gt;&quot;w&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fw:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fw.&lt;/span&gt;&lt;span&gt;writelines&lt;/span&gt;&lt;span&gt;(read_lines[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(csv_files[i], &lt;/span&gt;&lt;span&gt;&quot;r&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; fr:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;read_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; fr.&lt;/span&gt;&lt;span&gt;readlines&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(read_lines)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;remove_workflow&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;処理の流れとしては、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Issuesを作成したワークフローファイルの名前の一覧が載っている&lt;code&gt;generatedWfFiles.txt&lt;/code&gt;を読み取る。&lt;/li&gt;
&lt;li&gt;読み取ったファイル名のファイルを削除する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;generatedWfFiles.txt&lt;/code&gt;の内容を削除する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;books.csv&lt;/code&gt;や&lt;code&gt;blogs.csv&lt;/code&gt;に記載されているレコード部分の内容を削除する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;それでは、以下で詳しく解説していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1．Issuesを作成したワークフローファイルの名前の一覧が載っている「generatedWfFiles.txt」を読み取る。&lt;a href=&quot;#1issuesを作成したワークフローファイルの名前の一覧が載っているgeneratedwffilestxtを読み取る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、Issuesを作成したワークフローファイルを削除します。
そのために、&lt;code&gt;generatedWfFiles.txt&lt;/code&gt;に書いてあるファイル名を取得します。このファイルの内容は、実は先程、&lt;code&gt;generate_workflow_to_make_issue.py&lt;/code&gt;で記述していたのです。&lt;/p&gt;&lt;p&gt;例えば、このフォルダ構成になっている場合、
&lt;img loading=&quot;lazy&quot; width=&quot;2418&quot; height=&quot;970&quot; src=&quot;/_astro/18.B-dlVU6s_Z1lX3f.webp&quot; srcset=&quot;/_astro/18.B-dlVU6s_1DCNdm.webp 640w, /_astro/18.B-dlVU6s_141LkF.webp 750w, /_astro/18.B-dlVU6s_Z15QIgC.webp 828w, /_astro/18.B-dlVU6s_ZHn1E4.webp 1080w, /_astro/18.B-dlVU6s_Z27OGL6.webp 1280w, /_astro/18.B-dlVU6s_MCWyw.webp 1668w, /_astro/18.B-dlVU6s_2aqQYC.webp 2048w, /_astro/18.B-dlVU6s_Z1lX3f.webp 2418w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この内容が「generatedWfFiles.txt」に記載されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2386&quot; height=&quot;680&quot; src=&quot;/_astro/19.BA_1yhVE_1uk6DY.webp&quot; srcset=&quot;/_astro/19.BA_1yhVE_2e1vJ9.webp 640w, /_astro/19.BA_1yhVE_28xGU3.webp 750w, /_astro/19.BA_1yhVE_1VMNBo.webp 828w, /_astro/19.BA_1yhVE_2cIOY1.webp 1080w, /_astro/19.BA_1yhVE_1yHmuo.webp 1280w, /_astro/19.BA_1yhVE_ZroNuC.webp 1668w, /_astro/19.BA_1yhVE_1MnIyY.webp 2048w, /_astro/19.BA_1yhVE_1uk6DY.webp 2386w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2．読み取ったファイル名のファイルを削除する。&lt;a href=&quot;#2読み取ったファイル名のファイルを削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、読み取ったファイルを元に、ファイルを削除します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3．「generatedWfFiles.txt」の内容を削除する。&lt;a href=&quot;#3generatedwffilestxtの内容を削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ファイルの削除が完了したら、&lt;code&gt;generatedWfFiles.txt&lt;/code&gt;に記載されている内容を削除します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4．「books.csv」や「blogs.csv」に記載されているレコード部分の内容を削除する。&lt;a href=&quot;#4bookscsvやblogscsvに記載されているレコード部分の内容を削除する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;CSVの内容を削除して、また同じタイトルのIssuesが登録されることに起こらないようにします。&lt;/p&gt;&lt;p&gt;以下のような状態になっているCSVに対して、
&lt;img loading=&quot;lazy&quot; width=&quot;2926&quot; height=&quot;1018&quot; src=&quot;/_astro/08.CyLn1BCG_ZQHsO5.webp&quot; srcset=&quot;/_astro/08.CyLn1BCG_Z1kzcp1.webp 640w, /_astro/08.CyLn1BCG_Znu0T0.webp 750w, /_astro/08.CyLn1BCG_Z22IH97.webp 828w, /_astro/08.CyLn1BCG_H912L.webp 1080w, /_astro/08.CyLn1BCG_1A2vwD.webp 1280w, /_astro/08.CyLn1BCG_Z6KSVa.webp 1668w, /_astro/08.CyLn1BCG_ZSDgmr.webp 2048w, /_astro/08.CyLn1BCG_1UlnJI.webp 2560w, /_astro/08.CyLn1BCG_ZQHsO5.webp 2926w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このようにヘッダー部が残るようにレコード部分だけ削除します。
&lt;img loading=&quot;lazy&quot; width=&quot;2360&quot; height=&quot;633&quot; src=&quot;/_astro/21.DZRP3LjF_rbSEv.webp&quot; srcset=&quot;/_astro/21.DZRP3LjF_1BO6bR.webp 640w, /_astro/21.DZRP3LjF_Z1OLlEO.webp 750w, /_astro/21.DZRP3LjF_Z1ruJnm.webp 828w, /_astro/21.DZRP3LjF_1NLeIH.webp 1080w, /_astro/21.DZRP3LjF_uheyu.webp 1280w, /_astro/21.DZRP3LjF_133e9G.webp 1668w, /_astro/21.DZRP3LjF_Z1KudTB.webp 2048w, /_astro/21.DZRP3LjF_rbSEv.webp 2360w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、色々設定したら、編集もしくは削除したファイルに対してgit pushします。&lt;/p&gt;&lt;p&gt;以上で、&lt;code&gt;remove_workflow_files_making_issue.py&lt;/code&gt;の解説になります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;バックアップは大事です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;意味深か？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Markdown、HTML】Visual Basicのコードブロックの中に&quot;&amp;lt;TODAY()&quot;を入れると、その周辺の行が表示されなくなる</title><link>https://endorphinbath.com/posts/markdown-html-today-vanishes-row/</link><guid isPermaLink="true">https://endorphinbath.com/posts/markdown-html-today-vanishes-row/</guid><description>MarkdownやHTMLの中にのコードブロックに&quot;&lt;TODAY()&quot;を入れると、その周辺の行が表示されなくなることが発生しました。その原因は、あっけないものでしたが、ちゃんと事象を見ないと気づきにくいものでした。</description><pubDate>Tue, 05 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんじゃそりゃ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうしたんだい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;HTMLの中に`TODAY`を入れたら、何かおかしいことになった&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんじゃそりゃあ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の事象&lt;a href=&quot;#今回の事象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なんじゃそりゃ。&lt;/p&gt;&lt;p&gt;って感じのタイトルですが、そういうことが起きたので、記事に起こしてみました。&lt;/p&gt;&lt;p&gt;今回、起きた事象は、以下のMarkdown（HTML）を書いた時に、一部分だけテキストが表示されなくなってしまった事象です。&lt;/p&gt;&lt;p&gt;まず、ExcelとかGoogle Spreadsheetの関数をコードブロックにして表示させようとしました。言語を「Visual Basic」にすると、イイ感じにシンタックスハイライトされるのでそうしています。&lt;/p&gt;&lt;p&gt;しかし、このコードをブロックに入れると途中の2行が表示されないのです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_01.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_02.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_03.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codeBlock&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-info&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;code:visualbasic&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;language-code:visualbasic&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;=AND($L9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$L9&amp;gt;$G9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($L9=&quot;&quot;,$G9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$G9&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;$F9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9=&quot;&quot;,$F9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;/&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;まず、コードブロックにしたかったので、&lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;タグで書いてみたら・・・、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codeBlock&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-info&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;code:visualbasic&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;language-code:visualbasic&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;=AND($L9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$L9&amp;gt;$G9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($L9=&quot;&quot;,$G9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$G9&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;$F9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9=&quot;&quot;,$F9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;/&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;なんだか一部消えてしまっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;298&quot; src=&quot;/_astro/01.DCAbs4wf_2wYFOP.webp&quot; srcset=&quot;/_astro/01.DCAbs4wf_2gE5fJ.webp 640w, /_astro/01.DCAbs4wf_1nxy3x.webp 750w, /_astro/01.DCAbs4wf_ZMEKju.webp 828w, /_astro/01.DCAbs4wf_1I1got.webp 1080w, /_astro/01.DCAbs4wf_2wYFOP.webp 1128w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;タグは諦めて、ただのテキストにしても・・・、&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;=AND($L9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$L9&amp;gt;$G9)&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($L9=&quot;&quot;,$G9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$G9&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY())&amp;lt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;$F9)&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9=&quot;&quot;,$F9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;)&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この有様です。
&lt;img loading=&quot;lazy&quot; width=&quot;1014&quot; height=&quot;304&quot; src=&quot;/_astro/02.vvUt2JHw_Z1tS7Lt.webp&quot; srcset=&quot;/_astro/02.vvUt2JHw_ZTYiib.webp 640w, /_astro/02.vvUt2JHw_Z1ztBHo.webp 750w, /_astro/02.vvUt2JHw_Z2lg0Ba.webp 828w, /_astro/02.vvUt2JHw_Z1tS7Lt.webp 1014w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因と解決&lt;a href=&quot;#原因と解決&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あまり、HTMLに慣れていない僕なので、今回の事象にハマってしまいましたが、&lt;/p&gt;&lt;p&gt;原因は、&lt;code&gt;TODAY()&lt;/code&gt;の前の&lt;code&gt;&amp;lt;&lt;/code&gt;をエスケープしていなかったことでした！&lt;/p&gt;&lt;p&gt;例えば、&lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;タグの中で言えば、この部分が一つのタグとして認識されてしまっていたようです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(&lt;/span&gt;&lt;span&gt;ROW&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND(&lt;/span&gt;&lt;span&gt;$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;まず、&lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;タグのコードブロックの方はこれでテキストの端折れは起きませんでした！&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_01.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_02.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_03.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codeBlock&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-info&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;code:visualbasic&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;language-code:visualbasic&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;=AND($L9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$L9&amp;gt;$G9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($L9=&quot;&quot;,$G9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$G9&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;$F9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9=&quot;&quot;,$F9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;/&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;pre&lt;/code&gt;タグがレンダリングされたものです。
&lt;img loading=&quot;lazy&quot; width=&quot;1134&quot; height=&quot;384&quot; src=&quot;/_astro/03.DD5iiPFv_269tMH.webp&quot; srcset=&quot;/_astro/03.DD5iiPFv_25YeEq.webp 640w, /_astro/03.DD5iiPFv_Zbeofi.webp 750w, /_astro/03.DD5iiPFv_vYB5Y.webp 828w, /_astro/03.DD5iiPFv_1h6gSd.webp 1080w, /_astro/03.DD5iiPFv_269tMH.webp 1134w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、ただの&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;タグにしても、テキストの端折れは起きませんでした！&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_01.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_02.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;🐧&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;./20210401_LedgerForPcBringing/img_03.jpg&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-role&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;codeBlock&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data-info&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;code:visualbasic&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;language-code:visualbasic&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;=AND($L9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$L9&amp;gt;$G9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($L9=&quot;&quot;,$G9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$G9&amp;lt;&lt;/span&gt;&lt;span&gt;TODAY())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;,$K9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;$F9)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=AND($K9=&quot;&quot;,$F9&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&amp;gt;&quot;&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=MOD(ROW(),2)=1&amp;lt;/&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;a&lt;/code&gt;タグがレンダリングされたものです。
&lt;img loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;356&quot; src=&quot;/_astro/04.BU1wqzbp_AvD0P.webp&quot; srcset=&quot;/_astro/04.BU1wqzbp_Z28bGfl.webp 640w, /_astro/04.BU1wqzbp_Z1nf5bi.webp 750w, /_astro/04.BU1wqzbp_t1Uld.webp 828w, /_astro/04.BU1wqzbp_ZdjGqW.webp 1080w, /_astro/04.BU1wqzbp_AvD0P.webp 1128w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんじゃこりゃあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;って感じだけど、原因が分かればなるほどと思えるよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、HTML使ってコードを直に書いたら表現できない時がある？ そんなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おまけ&lt;a href=&quot;#おまけ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回の記事を最初投稿したら・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1744&quot; height=&quot;1096&quot; src=&quot;/_astro/05.D6vlXM-A_Z1bAT1j.webp&quot; srcset=&quot;/_astro/05.D6vlXM-A_1xaGFc.webp 640w, /_astro/05.D6vlXM-A_2o23hf.webp 750w, /_astro/05.D6vlXM-A_Z3WEm1.webp 828w, /_astro/05.D6vlXM-A_23pMM0.webp 1080w, /_astro/05.D6vlXM-A_Z2dmpEa.webp 1280w, /_astro/05.D6vlXM-A_qM07G.webp 1668w, /_astro/05.D6vlXM-A_Z1bAT1j.webp 1744w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そんなことあるぅ？（タイトルもエスケープしました。）&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】ブログに使用した画像をGoogleドライブで管理するために書いたスクリプト</title><link>https://endorphinbath.com/posts/gas-manage-images-googledrive/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-manage-images-googledrive/</guid><description>僕は、既に公開した記事で使用したファイルをGoogleドライブの所定のフォルダに保存しています。その画像を完了済みのフォルダに定期的に移動してくれるスクリプトを作りました。</description><pubDate>Sun, 03 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、このブログで使用した画像を管理するために書いたスクリプトを紹介するよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Google Drive.&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このツールは、ブログの記事を管理する台帳を元に動きます。
&lt;img loading=&quot;lazy&quot; width=&quot;2440&quot; height=&quot;1083&quot; src=&quot;/_astro/01.f7EVIEqL_xRNLf.webp&quot; srcset=&quot;/_astro/01.f7EVIEqL_C9Cfx.webp 640w, /_astro/01.f7EVIEqL_Z1H679Q.webp 750w, /_astro/01.f7EVIEqL_ZQ9U9O.webp 828w, /_astro/01.f7EVIEqL_2l3gpL.webp 1080w, /_astro/01.f7EVIEqL_18Cmnf.webp 1280w, /_astro/01.f7EVIEqL_Z17uydC.webp 1668w, /_astro/01.f7EVIEqL_2nC5W3.webp 2048w, /_astro/01.f7EVIEqL_xRNLf.webp 2440w&quot; /&gt;&lt;/p&gt;&lt;p&gt;既に公開した記事（F列が”済”になっている記事）で使用した画像を、Googleドライブの所定のフォルダに保存していて、その画像を完了済みのフォルダに移動します。&lt;/p&gt;&lt;p&gt;ツールを動かす前のGoogleドライブの状況がこんな感じで、動かすと「20211123_Eyecatch.jpgのコピー」と「20211205_02.jpgのコピー」の画像ファイルが動きます。
&lt;img loading=&quot;lazy&quot; width=&quot;2067&quot; height=&quot;1119&quot; src=&quot;/_astro/02.BlddUNKc_Z1akh0O.webp&quot; srcset=&quot;/_astro/02.BlddUNKc_1v1zp1.webp 640w, /_astro/02.BlddUNKc_ZQlsCy.webp 750w, /_astro/02.BlddUNKc_Z2gpiy.webp 828w, /_astro/02.BlddUNKc_1O5K3b.webp 1080w, /_astro/02.BlddUNKc_16uM1C.webp 1280w, /_astro/02.BlddUNKc_Z12RlWr.webp 1668w, /_astro/02.BlddUNKc_2llMXl.webp 2048w, /_astro/02.BlddUNKc_Z1akh0O.webp 2067w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、ツールを動かすと、このようにファイルが動きます。
&lt;img loading=&quot;lazy&quot; width=&quot;2046&quot; height=&quot;1112&quot; src=&quot;/_astro/03.jNb96NwW_Z1lHrv2.webp&quot; srcset=&quot;/_astro/03.jNb96NwW_ZxRNg6.webp 640w, /_astro/03.jNb96NwW_29Vhvg.webp 750w, /_astro/03.jNb96NwW_pwpaL.webp 828w, /_astro/03.jNb96NwW_Z18Ex1a.webp 1080w, /_astro/03.jNb96NwW_DMidQ.webp 1280w, /_astro/03.jNb96NwW_10rWvm.webp 1668w, /_astro/03.jNb96NwW_Z1lHrv2.webp 2046w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちゃんと、目当ての年月の完了フォルダに移動しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2056&quot; height=&quot;811&quot; src=&quot;/_astro/04.BftKzopr_1gbuY5.webp&quot; srcset=&quot;/_astro/04.BftKzopr_Z15mGVY.webp 640w, /_astro/04.BftKzopr_Z2iyHbz.webp 750w, /_astro/04.BftKzopr_Z1VJYDq.webp 828w, /_astro/04.BftKzopr_Z1DOxaI.webp 1080w, /_astro/04.BftKzopr_Zw76o0.webp 1280w, /_astro/04.BftKzopr_Z8xnYY.webp 1668w, /_astro/04.BftKzopr_1fPu90.webp 2048w, /_astro/04.BftKzopr_1gbuY5.webp 2056w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、タイマーを設定して、定期的に動くようにしました。
&lt;img loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;487&quot; src=&quot;/_astro/05.ap9gBzXG_GvCWT.webp&quot; srcset=&quot;/_astro/05.ap9gBzXG_Z2vdTPd.webp 640w, /_astro/05.ap9gBzXG_Z20dkjS.webp 750w, /_astro/05.ap9gBzXG_Z1mRBv8.webp 828w, /_astro/05.ap9gBzXG_Y28Kn.webp 1080w, /_astro/05.ap9gBzXG_oY7yX.webp 1280w, /_astro/05.ap9gBzXG_12w3jO.webp 1668w, /_astro/05.ap9gBzXG_1zhXt9.webp 2048w, /_astro/05.ap9gBzXG_GvCWT.webp 2536w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールのソース&lt;a href=&quot;#ツールのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下がソースになります。&lt;code&gt;manageFilesGoogleDrive()&lt;/code&gt;を動かします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;moveFileToFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; [], &lt;/span&gt;&lt;span&gt;alreadyPostedChr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;済&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of aticle already posted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedChr&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for get list of folders.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// Folder ID of image for article.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder_now&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_folder&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;prefix_folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;◆完了分_&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// prefix of folder of image for article already posted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_format_8&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;yyyyMMdd&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_format_6&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;yyyyMM&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of folders.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolders&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder_now&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;prefix_folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prefix_folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;prefix_folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;prefix_folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;date_format_6&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;key_date_folder&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for get list of image files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_file_6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_file_8&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of image files.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFiles&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_file_6&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;date_format_6&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key_date_file_8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;date_format_8&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key_date_file_8&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;key_date_file_8&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;key_date_file_6&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;()]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for move file to folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetFile&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;toFolder&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// move file to folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;toFolder&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;movingList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;moveTo&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;toFolder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssColumns&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ブログ_記事&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_for_postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_for_postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_postedNumber&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for get list from GSS.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index of row to start reading sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_date&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index of 「起票日」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_posted&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index og 「投稿済」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get dateList and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_date&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&apos;JST&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;yyyyMMdd&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get postedList.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_posted&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// create returnList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;manageFilesGoogleDrive&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for execute.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssColumns&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;moveFileToFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;苦労した点&lt;a href=&quot;#苦労した点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;作る時に最も引っかかった部分が、getValues()の部分ですね・・・&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// get dateList and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_date&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&apos;JST&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;yyyyMMdd&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この&lt;code&gt;getValue()&lt;/code&gt;で、僕は1列しか指定していないのに、それで取得した値が配列で入っていたんですよね。&lt;/p&gt;&lt;p&gt;それが原因で、&lt;code&gt;Utilities.formatDate(dateList[j][0], &apos;JST&apos;, &apos;yyyyMMdd&apos;)&lt;/code&gt;で、「&lt;code&gt;dateList[j][0]&lt;/code&gt;がNumber[]で型が違うよ。」というエラーメッセージを出されて、「俺はNumberなんて取得した覚えはないぞ！(# ﾟДﾟ)ｳｶﾞｱｱｱｱ」と、ムカつきながら長時間原因を探していました・・・。&lt;/p&gt;&lt;p&gt;インデックス1つ分でも配列で取ってきます・・・。同じようなバグに当たったら、みなさんも気をつけてくださいね・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;配列の間違いって、けっこうハマるんだよなぁ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;デバッグログを仕込んでも見逃す時は見逃しちゃようね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;オレでなきゃ見逃しちゃうね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】cronを生成するモジュールを作った</title><link>https://endorphinbath.com/posts/python-make-cron/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-make-cron/</guid><description>Pythonでcron時間を生成するモジュールを作りました。タイムゾーンを引数にして生成できます。</description><pubDate>Sat, 02 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うわ〜、cronをいちいち設定するのがめんどくせええ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、cronって時差を考慮したり、どの＊が分だっけ、曜日だっけ？ って感じで、めんどいよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_007.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回はcronを生成するモジュールを作ってしまおうじゃないか！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お！作ってくれるか！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回作ったモジュール&lt;a href=&quot;#今回作ったモジュール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回作ったモジュールのソースはこちらになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;generaltool.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; datetime&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;minutes_scheduled_later&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;time_difference&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;e.g.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;0 19 * * *&apos;  # At 04:00. – https://crontab.guru&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(minutes_scheduled_later) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;TypeError: minutes_scheduled_later must be int type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt;(time_difference) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;raise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;TypeError: time_difference must be int type.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_minute &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_hour &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dt_now &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; datetime.datetime.&lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;datetime.&lt;/span&gt;&lt;span&gt;timezone&lt;/span&gt;&lt;span&gt;(datetime.&lt;/span&gt;&lt;span&gt;timedelta&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;hours&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;time_difference))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_from_an_hour &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; dt_now.minute &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; minutes_scheduled_later &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; minutes_from_an_hour:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_minute &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dt_now.minute &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; minutes_scheduled_later &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; minutes_from_an_hour&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_hour &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dt_now.hour &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_minute &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dt_now.minute &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; minutes_scheduled_later&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_hour &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dt_now.hour&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hours_from_a_day &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; cron_hour &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; hours_from_a_day:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron_hour &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cron_hour &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; hours_from_a_day&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;cron_minute&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;cron_hour&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; cron&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実は、GitHub Actions内でcronを設定する際、時差の考慮が要らない？&lt;a href=&quot;#実はgithub-actions内でcronを設定する際時差の考慮が要らない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;cronを設定する時に、時差の考慮は必須です。&lt;/p&gt;&lt;p&gt;例えば、日本時間で生活している方は、時差を+9:00としてcronを生成するかどうかを考慮すべきでしょう。本モジュールですと、例えば、こんな風に時差を設けます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;しかしながら、サーバ時間が&lt;code&gt;Asia/Tokyo&lt;/code&gt;に設定してあれば、おそらく必要ないでしょう。
そして、そこに加えて、GitHub Actions内でcronを設定する際は、時差の考慮が不要のようです。&lt;/p&gt;&lt;p&gt;例えば、この記事で紹介しているツールは、GitHub Actions内でPythonファイルを実行して、本モジュールから時差0:00（UTC）でcronを設定しています。&lt;/p&gt;&lt;p&gt;しかし、GitHub ActionsもUTCで実行されているみたいなので、GitHub Actions内のコンテナ内のOS時間をUTCにしていれば、cronのずれは発生しないということです。
なので、こんな感じで、&lt;code&gt;time_difference&lt;/code&gt;（時差）を0にしてcronを設定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cron &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;テストコード&lt;a href=&quot;#テストコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のテストは、&lt;code&gt;pytest-freezegun&lt;/code&gt;を使用しました。とても使いやすかったので、おすすめです。&lt;/p&gt;&lt;p&gt;shell session:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pytest-freezegun&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;テストコードはこちらになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;test_generaltool.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; pytest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; src.landmasterlibrary.generaltool &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; generate_cron_from_datetime_now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_Generaltool&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 13:23:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_1_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;33&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 13:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_1_2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_1_3&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 13:23:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_2_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;33&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 13:23:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_2_2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;33&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 13:23:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_3_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_hours &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected_minutes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;33&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;expected &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_minutes&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;expected_hours&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; * * *&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; actual &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; expected&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_4_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;10&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; pytest.&lt;/span&gt;&lt;span&gt;raises&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_4_2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; pytest.&lt;/span&gt;&lt;span&gt;raises&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_4_3&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; pytest.&lt;/span&gt;&lt;span&gt;raises&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_4_4&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;minutes_scheduled_later &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time_difference &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; pytest.&lt;/span&gt;&lt;span&gt;raises&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;(minutes_scheduled_later, time_difference)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;@pytest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mark&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;freeze_time&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;2022-01-12 23:53:43&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_generate_cron_from_datetime_now_5_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt; pytest.&lt;/span&gt;&lt;span&gt;raises&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; e:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generate_cron_from_datetime_now&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;`pytest-freezegun`とは、また良いモジュールを見つけたね。楽に、datetimeをモック出来るよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん、スゴイ楽でテストコードも見やすくなった！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;cronの設定方法を忘れてた時に役立ちました。ちなみに、cronの行でチラホラ出てきてたURLです。&lt;/p&gt;&lt;a href=&quot;https://crontab.guru/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://crontab.guru/favicon.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;crontab.guru&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Crontab.guru - The cron schedule expression generator&lt;/div&gt;&lt;div&gt;An easy to use editor for crontab schedules.&lt;/div&gt;&lt;div&gt;crontab.guru&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://og.cronitor.io/api/blog?title=*%20*%20*%20*%20*%20%0ACrontab%20Guru&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;このページにあるcronチートシートもコメントアウトすれば、ソース内で使えると思うので、それもアリかも。&lt;/p&gt;&lt;a href=&quot;https://zenn.dev/masaaania/articles/c930f2f755a577&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://static.zenn.studio/images/logo-transparent.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Zenn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Github Actions チートシート&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zenn.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://res.cloudinary.com/zenn/image/upload/s--R5aUs-B7--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Github%2520Actions%2520%25E3%2583%2581%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25B7%25E3%2583%25BC%25E3%2583%2588%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:masaaania%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzM1OGU3YmRmMzAuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【画像編集】Affinity Designerで論理差分（Boolean Difference）などの論理処理を行う時に気をつけること</title><link>https://endorphinbath.com/posts/affinity-designer-boolean-difference-precaution/</link><guid isPermaLink="true">https://endorphinbath.com/posts/affinity-designer-boolean-difference-precaution/</guid><description>Affinity Designerで論理差分したが、オブジェクトが思惑通りの形にならなかったときの原因は、もしかしたら本記事で紹介していることかもしれません。</description><pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なぜできない！？！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おあ〜、どうしたあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Affinity DesignerでBoolean Differenceしようとしたんだけど、オブジェクトが消えちゃって、ちゃんと引き算してくれないんだよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、それじゃあ、今回は「Affinity Designerで論理処理ができないときに気をつけること」と題して、いっちょ行くかあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;やりたいこと&lt;a href=&quot;#やりたいこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕が今回行おうとしていたことは、以下の画像の右側のような黄色いカーブを取り出すことでした。&lt;/p&gt;&lt;p&gt;しかし、途中、論理差分を行っても思った通りの挙動にならずに、ハマっていました。
（ちなみに、論理差分は画面右上の赤枠で囲っているボタンで行える処理のことです。）
&lt;img loading=&quot;lazy&quot; width=&quot;3012&quot; height=&quot;1522&quot; src=&quot;/_astro/01.6E-KjwDh_ZILN4S.webp&quot; srcset=&quot;/_astro/01.6E-KjwDh_Z1ez4KQ.webp 640w, /_astro/01.6E-KjwDh_2d1A6r.webp 750w, /_astro/01.6E-KjwDh_2kbd0x.webp 828w, /_astro/01.6E-KjwDh_Z2f0nY.webp 1080w, /_astro/01.6E-KjwDh_bEqqt.webp 1280w, /_astro/01.6E-KjwDh_Mcbyz.webp 1668w, /_astro/01.6E-KjwDh_Z2fYATL.webp 2048w, /_astro/01.6E-KjwDh_L1OgT.webp 2560w, /_astro/01.6E-KjwDh_ZILN4S.webp 3012w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因&lt;a href=&quot;#原因&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上手く論理差分が出来なかった直接原因というのが、涙型のオブジェクトが2つではなく3つ以上重なっていることっぽかったです。&lt;/p&gt;&lt;p&gt;例えば、このように、3つ重なっている状態で論理差分を行うと・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1312&quot; height=&quot;876&quot; src=&quot;/_astro/02.Bq1ENGdJ_Z1l3VNI.webp&quot; srcset=&quot;/_astro/02.Bq1ENGdJ_ZPR9SV.webp 640w, /_astro/02.Bq1ENGdJ_16pK9Y.webp 750w, /_astro/02.Bq1ENGdJ_Z1CCk10.webp 828w, /_astro/02.Bq1ENGdJ_ZuEteD.webp 1080w, /_astro/02.Bq1ENGdJ_rrqpb.webp 1280w, /_astro/02.Bq1ENGdJ_Z1l3VNI.webp 1312w&quot; /&gt;&lt;/p&gt;&lt;p&gt;選択した部分が丸っきり消えてしまいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1368&quot; height=&quot;854&quot; src=&quot;/_astro/03.D-tOEAxH_ZsXbF3.webp&quot; srcset=&quot;/_astro/03.D-tOEAxH_Z1SwHqz.webp 640w, /_astro/03.D-tOEAxH_ZjKEcg.webp 750w, /_astro/03.D-tOEAxH_1aWXxx.webp 828w, /_astro/03.D-tOEAxH_Z1xrHuh.webp 1080w, /_astro/03.D-tOEAxH_ZylzbQ.webp 1280w, /_astro/03.D-tOEAxH_ZsXbF3.webp 1368w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかしながら、大きい色付きの方の涙型オブジェクトを2つ→1つに減らして、小さい白い涙型は1つのままで、論理差分を取ると、思惑通りのカーブが抽出できました。&lt;/p&gt;&lt;p&gt;このように、2つ選んでいる状態で、論理差分を行うと・・・、
&lt;img loading=&quot;lazy&quot; width=&quot;1684&quot; height=&quot;924&quot; src=&quot;/_astro/04.q4oRsE_-_12y43j.webp&quot; srcset=&quot;/_astro/04.q4oRsE_-_ZOg1pG.webp 640w, /_astro/04.q4oRsE_-_2cbBhV.webp 750w, /_astro/04.q4oRsE_-_20iD0H.webp 828w, /_astro/04.q4oRsE_-_Z1jXpXE.webp 1080w, /_astro/04.q4oRsE_-_Z10xkun.webp 1280w, /_astro/04.q4oRsE_-_10FizY.webp 1668w, /_astro/04.q4oRsE_-_12y43j.webp 1684w&quot; /&gt;&lt;/p&gt;&lt;p&gt;カーブが作成できることが確認できます！
&lt;img loading=&quot;lazy&quot; width=&quot;1674&quot; height=&quot;942&quot; src=&quot;/_astro/05.Dx97jlri_Z12D1hd.webp&quot; srcset=&quot;/_astro/05.Dx97jlri_1oQ8Yk.webp 640w, /_astro/05.Dx97jlri_Z1dTQH6.webp 750w, /_astro/05.Dx97jlri_2vliDn.webp 828w, /_astro/05.Dx97jlri_Z1vwS8f.webp 1080w, /_astro/05.Dx97jlri_21vPUn.webp 1280w, /_astro/05.Dx97jlri_Z12PSIU.webp 1668w, /_astro/05.Dx97jlri_Z12D1hd.webp 1674w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;なぜ、こんな事が起きるのか？&lt;a href=&quot;#なぜこんな事が起きるのか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なぜ、起きるのかはかなり骨が折れそうだったので、諦めました・・・。&lt;/p&gt;&lt;p&gt;しかし、何だか「戻る」を使ったときに起こる感じがするのですよね・・・。
今回のケースで言うと、確かに色付きの涙型オブジェクトと白の涙型オブジェクトを一対で残したはずなのに、「戻る」を押した後に消した涙型オブジェクトが復活していることがありました。&lt;/p&gt;&lt;p&gt;重複オブジェクトを削除するとか出来たら良いんですけど、それもおそらく出来ないっぽい・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1730&quot; src=&quot;/_astro/06.CCykMynN_2axTi1.webp&quot; srcset=&quot;/_astro/06.CCykMynN_aQTWB.webp 640w, /_astro/06.CCykMynN_Z2d66MQ.webp 750w, /_astro/06.CCykMynN_18RSsK.webp 828w, /_astro/06.CCykMynN_kOX4u.webp 1080w, /_astro/06.CCykMynN_1UXdu9.webp 1280w, /_astro/06.CCykMynN_Z2khlgR.webp 1668w, /_astro/06.CCykMynN_1K6kuf.webp 2048w, /_astro/06.CCykMynN_ZMhlYi.webp 2560w, /_astro/06.CCykMynN_2axTi1.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なぜ、2つある・・・！😫&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_020.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う〜ん、原因は分からずじまいかあ・・・。Illustratorに比べてかなり安いくせに便利ではあるんだけど、一応お金は払ってるから、直してほしいなあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、「戻る」処理って作るのが意外と面倒くさいっていうのはあるけど・・・。とりあえず、Affinity Designerで論理処理をする際には、オブジェクトが重なっていないかどうかを確認するように気をつけてください！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ビジネス、キャリア】開発工数の見積もり手法とWBS作成の手法を少しまとめてみた</title><link>https://endorphinbath.com/posts/business-methods-for-quotation-and-wbs/</link><guid isPermaLink="true">https://endorphinbath.com/posts/business-methods-for-quotation-and-wbs/</guid><description>見積もりとWBSの種類やそのプロセスに関して、少しまとめてみました。初めて、工数を見積もる際に少しでもお役に立てれば嬉しいです。</description><pubDate>Sun, 06 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐふう・・・、今日はこのプロジェクトの開発工数を見積もるのか・・・。一体、どう見積もるのやら・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う〜ん、なんか、ちょっくら、見積もりの仕方とかWBSの作り方とか調べてみっかあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;見積もりプロセス&lt;a href=&quot;#見積もりプロセス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;見積もりプロセスは、まず要件定義とスコープ定義から始まり、
規模→生産性→工数→費用および期間の順番に見積もっていきます。&lt;/p&gt;&lt;p&gt;商談時の見積もりでは、精度はそこまで求められない傾向にあります。&lt;/p&gt;&lt;p&gt;精度の目安としては、以下のようです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;超概算見積もり：-25%〜+75%&lt;/li&gt;
&lt;li&gt;概念見積もり：-15〜+50%&lt;/li&gt;
&lt;li&gt;予算見積もり：-10〜+25%&lt;/li&gt;
&lt;li&gt;確定見積もり：-5〜+10%&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1986&quot; height=&quot;806&quot; src=&quot;/_astro/00.CcuglrvS_IT3H1.webp&quot; srcset=&quot;/_astro/00.CcuglrvS_11NzAI.webp 640w, /_astro/00.CcuglrvS_2kjMvz.webp 750w, /_astro/00.CcuglrvS_ZoAcFP.webp 828w, /_astro/00.CcuglrvS_Z26VEDa.webp 1080w, /_astro/00.CcuglrvS_ZYmiP1.webp 1280w, /_astro/00.CcuglrvS_ZCvE8s.webp 1668w, /_astro/00.CcuglrvS_IT3H1.webp 1986w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;見積もり手法&lt;a href=&quot;#見積もり手法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;見積もり手法は、上記したように、大きく３種類に分けることが出来ます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;トップダウン見積もり&lt;/li&gt;
&lt;li&gt;パラメトリック見積もり&lt;/li&gt;
&lt;li&gt;ボトムアップ見積もり&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;それぞれ、長所と短所を抱えていて、ざっと図にまとめるとこんなイメージになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1828&quot; height=&quot;874&quot; src=&quot;/_astro/01.BNhitJzZ_wI9ga.webp&quot; srcset=&quot;/_astro/01.BNhitJzZ_Z1ppK23.webp 640w, /_astro/01.BNhitJzZ_tqLeE.webp 750w, /_astro/01.BNhitJzZ_Z1UvOSV.webp 828w, /_astro/01.BNhitJzZ_Z1MUHHj.webp 1080w, /_astro/01.BNhitJzZ_1MXnEW.webp 1280w, /_astro/01.BNhitJzZ_25bbbq.webp 1668w, /_astro/01.BNhitJzZ_wI9ga.webp 1828w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それでは、詳しく紹介していきます。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;トップダウン見積もり（類推見積もり）&lt;a href=&quot;#トップダウン見積もり類推見積もり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;トップダウン見積もりは、とある分野において専門的知識を備えている人や、プロジェクトに対して経験豊富な人などの、知識、経験は然ることながら、勘や度胸などを利かせて見積もる手法になります。
そのため、見積もりに必要な情報は少なく済みますし、その分かかる見積もりに必要な時間も少なくて済みます。&lt;/p&gt;&lt;p&gt;しかし、それを見積もった人の特性に依存したり、見積もりの精度としては粗くなります。&lt;/p&gt;&lt;p&gt;商談の段階プロジェクトの発足時など、話のタネとして本当に大まかに見積もり工数を算出したい時は、この見積もり方になるでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1344&quot; height=&quot;846&quot; src=&quot;/_astro/02.B80O3iCH_Z28NlgF.webp&quot; srcset=&quot;/_astro/02.B80O3iCH_Z1hI2MO.webp 640w, /_astro/02.B80O3iCH_Z2b5IWa.webp 750w, /_astro/02.B80O3iCH_ZFm6cm.webp 828w, /_astro/02.B80O3iCH_1RAw1p.webp 1080w, /_astro/02.B80O3iCH_29v3VM.webp 1280w, /_astro/02.B80O3iCH_Z28NlgF.webp 1344w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;パラメトリック見積もり（係数見積もり）&lt;a href=&quot;#パラメトリック見積もり係数見積もり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;パラメトリック見積もりというのは、作業を数値にして、その作業数を乗じたりして、客観的なデータで工数を見積もる手法となります。
&lt;img loading=&quot;lazy&quot; width=&quot;1392&quot; height=&quot;864&quot; src=&quot;/_astro/03.5cdtIcv8_edPfL.webp&quot; srcset=&quot;/_astro/03.5cdtIcv8_Z1PO6kE.webp 640w, /_astro/03.5cdtIcv8_Zdtzky.webp 750w, /_astro/03.5cdtIcv8_1Qgy0m.webp 828w, /_astro/03.5cdtIcv8_1DlPg9.webp 1080w, /_astro/03.5cdtIcv8_5pVDo.webp 1280w, /_astro/03.5cdtIcv8_edPfL.webp 1392w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、工程や成果物にかかる工数を大・中・小の３段階などに工数を何個かの数値に分けて、それらにその大・中・小にそれぞれ分類された作業の数を乗じたりなどします。
&lt;img loading=&quot;lazy&quot; width=&quot;1082&quot; height=&quot;552&quot; src=&quot;/_astro/04.DG--XFCy_1CzTGR.webp&quot; srcset=&quot;/_astro/04.DG--XFCy_fvpb1.webp 640w, /_astro/04.DG--XFCy_Z1rNN7a.webp 750w, /_astro/04.DG--XFCy_Z2u7chx.webp 828w, /_astro/04.DG--XFCy_ZTzfAG.webp 1080w, /_astro/04.DG--XFCy_1CzTGR.webp 1082w&quot; /&gt;&lt;/p&gt;&lt;p&gt;メリットとしては、具体的な数値に落とし込むため、客観性の取れた見積もりになります。
そして、その見積もったプロジェクトとは違ったプロジェクトをまた見積もることになっても、類似の作業があれば、その既に行った見積もり方を踏襲することが出来ます。&lt;/p&gt;&lt;p&gt;しかし、この数値に落とし込む段階で、業務への理解度がある程度必要だったりします。&lt;/p&gt;&lt;p&gt;なぜなら、例えば、作業の大・中・小の比率を見極めるために、「大」の作業が「小」の作業の2倍かかるはずなのに、「大」を「小」の1.5倍などで見積もると、見積もり値が変わってくるためです。このズレ・差は、プロジェクトの規模が大きくなればなるほど、無視できないレベルに大きくなっていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;690&quot; src=&quot;/_astro/05.DnRPbf-x_ZbkYfr.webp&quot; srcset=&quot;/_astro/05.DnRPbf-x_k81LX.webp 640w, /_astro/05.DnRPbf-x_Z19zXIe.webp 750w, /_astro/05.DnRPbf-x_Z1UurAz.webp 828w, /_astro/05.DnRPbf-x_Z198NgR.webp 1080w, /_astro/05.DnRPbf-x_ZbkYfr.webp 1252w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ボトムアップ見積もり&lt;a href=&quot;#ボトムアップ見積もり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ボトムアップ見積もりは、WBSを作成してその工程毎などで区切った作業時間から工数を算出する見積もり手法です。&lt;/p&gt;&lt;p&gt;その作業について、経験や知識がない場合など、初めてゼロから見積もりを行う方はこの手法になるのではないでしょうか。僕も初めてシステム保守の作業を見積もった時は、この手法で見積もりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1880&quot; height=&quot;806&quot; src=&quot;/_astro/06.DxiddSfT_40LLJ.webp&quot; srcset=&quot;/_astro/06.DxiddSfT_Z1uAAdh.webp 640w, /_astro/06.DxiddSfT_GSvlv.webp 750w, /_astro/06.DxiddSfT_2t99mU.webp 828w, /_astro/06.DxiddSfT_Z1Oa5eS.webp 1080w, /_astro/06.DxiddSfT_1Pb8wi.webp 1280w, /_astro/06.DxiddSfT_1rY3aL.webp 1668w, /_astro/06.DxiddSfT_40LLJ.webp 1880w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この見積もり方の利点は、見積もり精度が高く、作業の漏れや抜けが先に挙げた２つの見積もり手法よりも少なく抑えられることにあります。&lt;/p&gt;&lt;p&gt;そのため、作業を詳細に議論する時はこの手法が用いられがちな傾向にあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1208&quot; height=&quot;720&quot; src=&quot;/_astro/07.BwVmraU5_Z1rMn9H.webp&quot; srcset=&quot;/_astro/07.BwVmraU5_Z2dJKUF.webp 640w, /_astro/07.BwVmraU5_Z24pDaC.webp 750w, /_astro/07.BwVmraU5_Z1Vldo2.webp 828w, /_astro/07.BwVmraU5_doBYq.webp 1080w, /_astro/07.BwVmraU5_Z1rMn9H.webp 1208w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、精緻な見積もり結果が得られる反面、やはりその算出に時間がかかります。
&lt;img loading=&quot;lazy&quot; width=&quot;1528&quot; height=&quot;818&quot; src=&quot;/_astro/08.C1kf6jar_ZIAbLv.webp&quot; srcset=&quot;/_astro/08.C1kf6jar_Z8j3Kc.webp 640w, /_astro/08.C1kf6jar_Z130yFh.webp 750w, /_astro/08.C1kf6jar_ZER2mo.webp 828w, /_astro/08.C1kf6jar_Zjs307.webp 1080w, /_astro/08.C1kf6jar_Z1ORo3X.webp 1280w, /_astro/08.C1kf6jar_ZIAbLv.webp 1528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、このボトムアップ見積もりで用いられる「WBS」に対して、もう少し深く掘り下げます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;WBS作成プロセス&lt;a href=&quot;#wbs作成プロセス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WBSとは、プロジェクトの成果物やそこに至るまでの作業を・工程を分解して、階層的に体系化したものになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;806&quot; src=&quot;/_astro/09.C3YwDhef_Z273fBp.webp&quot; srcset=&quot;/_astro/09.C3YwDhef_1ghe47.webp 640w, /_astro/09.C3YwDhef_FFcbq.webp 750w, /_astro/09.C3YwDhef_Z23eN0Y.webp 828w, /_astro/09.C3YwDhef_85qcm.webp 1080w, /_astro/09.C3YwDhef_Z1hmeTF.webp 1280w, /_astro/09.C3YwDhef_ZSUBue.webp 1668w, /_astro/09.C3YwDhef_Z273fBp.webp 2012w&quot; /&gt;&lt;/p&gt;&lt;p&gt;体系化する時は、おおよそ以下のことに気を付けます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;同一階層内では全ての要素の粒度が揃っていること&lt;/li&gt;
&lt;li&gt;MECE（Mutually Exclusive and Collectively Exhaustive）であること&lt;/li&gt;
&lt;li&gt;分野・次元・素性が統一されていること&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;プログラミング的に言い換えると、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;配列内に、文字列型や数値型が並んでいるところに、オブジェクトを入れると見にくいのでやめておこう。&lt;/li&gt;
&lt;li&gt;宣言している内容が重複している変数は置かないようにしよう。&lt;/li&gt;
&lt;li&gt;文字列型と数値型を混ぜるよりは、どちらかに統一した方が良い。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;と、なるかと思います。&lt;/p&gt;&lt;p&gt;WBSは、NoSQLよりもRDB（リレーショナルデータベース）的な考え方なので、表として整理することが出来る情報に区別する方が見やすい図式になります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;WBSの種類&lt;a href=&quot;#wbsの種類&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WBSの作り方には、大きく分けて２種類あります。「成果物指向」と「プロセス指向」のものです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;「成果物指向」のWBS&lt;a href=&quot;#成果物指向のwbs&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「成果物指向」のWBSは、成果物に対して工数を計上するので、作業を行ってもらう側として見積もりやすい手法です。
何を最終的に成果物として提供できるのかが可視化しやすいです。そのため、発注側に成果物の規模→費用と提示しやすい情報になり得ます。&lt;/p&gt;&lt;p&gt;しかし、成果物以外に対する作業工数が漏れるフォーマットになっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1344&quot; height=&quot;1156&quot; src=&quot;/_astro/10.CczOf8UV_Z1BTHt7.webp&quot; srcset=&quot;/_astro/10.CczOf8UV_MdLFs.webp 640w, /_astro/10.CczOf8UV_Z1FDgde.webp 750w, /_astro/10.CczOf8UV_RzHEe.webp 828w, /_astro/10.CczOf8UV_DAw78.webp 1080w, /_astro/10.CczOf8UV_Z2eDjq9.webp 1280w, /_astro/10.CczOf8UV_Z1BTHt7.webp 1344w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「プロセス指向」のWBS&lt;a href=&quot;#プロセス指向のwbs&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「プロセス指向」のWBSは、作業・工程に対して工数を計上するので、作業する側としては工数を見積もりやすいです。
他のプロジェクトを請け負った場合でも、そのWBSを流用しやすく標準化しやすいです。&lt;/p&gt;&lt;p&gt;しかし、最終的な成果物は見えにくいところが欠点です。
&lt;img loading=&quot;lazy&quot; width=&quot;1496&quot; height=&quot;1122&quot; src=&quot;/_astro/11.WJmsmknt_Z2bryuu.webp&quot; srcset=&quot;/_astro/11.WJmsmknt_28MT9o.webp 640w, /_astro/11.WJmsmknt_2fdgLD.webp 750w, /_astro/11.WJmsmknt_ZeKEve.webp 828w, /_astro/11.WJmsmknt_Z1djQDW.webp 1080w, /_astro/11.WJmsmknt_Z15s1c9.webp 1280w, /_astro/11.WJmsmknt_Z2bryuu.webp 1496w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;「成果物指向」と「プロセス指向」の比較&lt;a href=&quot;#成果物指向とプロセス指向の比較&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;両者の関係性としては、このようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2018&quot; height=&quot;1042&quot; src=&quot;/_astro/12.twKorUnd_S8GXf.webp&quot; srcset=&quot;/_astro/12.twKorUnd_1DUQB1.webp 640w, /_astro/12.twKorUnd_Z2vOIen.webp 750w, /_astro/12.twKorUnd_Z2oNbiQ.webp 828w, /_astro/12.twKorUnd_uIid8.webp 1080w, /_astro/12.twKorUnd_2uuIhv.webp 1280w, /_astro/12.twKorUnd_Z27mHVT.webp 1668w, /_astro/12.twKorUnd_S8GXf.webp 2018w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;WBSを作る時は「プロセス指向」と「成果物指向」を相互展開させる&lt;a href=&quot;#wbsを作る時はプロセス指向と成果物指向を相互展開させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;システム開発プロジェクトは、成果物を分解して自動的に作業が決まるわけではありません。
言い換えれば、分解したサブシステムをどのようなプロセス（作業）で開発するかは、採用する開発手法や、規定されている開発標準に依存します。&lt;/p&gt;&lt;p&gt;したがって、どちらも一長一短な「成果物指向」と「プロセス指向」ですが、それらの双方を取り入れた「相互展開」および「相互作用」的なWBSを作成していく必要があります。
&lt;img loading=&quot;lazy&quot; width=&quot;1946&quot; height=&quot;1466&quot; src=&quot;/_astro/13.BApIW8Rf_2hRPTc.webp&quot; srcset=&quot;/_astro/13.BApIW8Rf_RKpwP.webp 640w, /_astro/13.BApIW8Rf_YaMa5.webp 750w, /_astro/13.BApIW8Rf_12dRMo.webp 828w, /_astro/13.BApIW8Rf_eSHws.webp 1080w, /_astro/13.BApIW8Rf_mKxYg.webp 1280w, /_astro/13.BApIW8Rf_Z1bgkiT.webp 1668w, /_astro/13.BApIW8Rf_2hRPTc.webp 1946w&quot; /&gt;&lt;/p&gt;&lt;p&gt;例えば、「要件定義」→「概要設計」→「詳細設計」のプロセスからなる開発標準（プロセス指向）がある場合、以下のように対応できます。&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Lv&lt;/th&gt;&lt;th&gt;プロセス&lt;/th&gt;&lt;th&gt;成果物&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;要件定義&lt;/td&gt;&lt;td&gt;主要機能&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;概要設計&lt;/td&gt;&lt;td&gt;サブシステムなど&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;詳細設計&lt;/td&gt;&lt;td&gt;詳細設計書など&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ははあ、見積もりにも3種類くらいあったんだなあ。WBSは、作業する側としてもらう側で見積もりやすい手法が違うってことなんだねえ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;大体分かったら、実践あるのみだ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Android】OneDriveがデータ容量を沢山とりすぎな時に減らす方法</title><link>https://endorphinbath.com/posts/android-onedrive-removing-much-data/</link><guid isPermaLink="true">https://endorphinbath.com/posts/android-onedrive-removing-much-data/</guid><description>Androidでアプリの残容量が少なくなった時にOneDriveが容量をたくさん専有しているときがあります。その時に僕が試した方法を紹介します。端末はSamsung Galaxy S10を使いました。</description><pubDate>Sat, 05 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんじゃこりゃあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ジーパン刑事かな？ どうした？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Androidのアプリがアップデートできなくなっちゃって、その原因が容量不足とか言うからアプリを消そうと思ったんだけど、OneDriveのやつがこんなにデータを食っていたんだわさ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はその大量データを消す方法を紹介するかあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起きているんだ&lt;a href=&quot;#何が起きているんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Androidのアプリがアップデートできなくなっちゃって、その原因が容量不足とか言うからアプリを消そうと思ったんだけど、OneDriveのやつがこんなにデータを食っていたんだわさ。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/01.BJhba0jm_1aXWD1.webp&quot; srcset=&quot;/_astro/01.BJhba0jm_Z2d7ykT.webp 640w, /_astro/01.BJhba0jm_ZLsAL4.webp 750w, /_astro/01.BJhba0jm_KC74i.webp 828w, /_astro/01.BJhba0jm_1aXWD1.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試すこと①：キャッシュを消す&lt;a href=&quot;#試すことキャッシュを消す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、アプリのキャッシュを消すところから容量を減らしていきましょう。&lt;/p&gt;&lt;p&gt;今回、僕が試した場合は、キャッシャがウン十MBくらいしかなかったので、あまり容量が空きませんでしたが・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/02.BvwduvRM_6uGNV.webp&quot; srcset=&quot;/_astro/02.BvwduvRM_wRfeH.webp 640w, /_astro/02.BvwduvRM_1XwcNx.webp 750w, /_astro/02.BvwduvRM_Z1yzda2.webp 828w, /_astro/02.BvwduvRM_6uGNV.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試すこと②：OneDriveのクラウドにある部分ではなく、端末内にあるデータを消す&lt;a href=&quot;#試すことonedriveのクラウドにある部分ではなく端末内にあるデータを消す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、この明らかにスマホの容量を食い散らかしているデータを消したいと思います。&lt;/p&gt;&lt;p&gt;何をどう溜めたら3GBも占有するんだ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/03.C1cUnZJ8_1GOhiA.webp&quot; srcset=&quot;/_astro/03.C1cUnZJ8_A0JT1.webp 640w, /_astro/03.C1cUnZJ8_21EHsQ.webp 750w, /_astro/03.C1cUnZJ8_Z1vqHuI.webp 828w, /_astro/03.C1cUnZJ8_1GOhiA.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;消そうとすると、こんな画面が出てきます。ちょっとビビりますが、押して参ります！&lt;/p&gt;&lt;p&gt;消す前に一旦、データはPCのどこかに避難しておきましょうね・・・。&lt;/p&gt;&lt;p&gt;この操作でデータが消えても、自己責任でお願いします。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/04.BNrExtxz_2qbiol.webp&quot; srcset=&quot;/_astro/04.BNrExtxz_Z20EdHn.webp 640w, /_astro/04.BNrExtxz_Zz0g8x.webp 750w, /_astro/04.BNrExtxz_X5rGO.webp 828w, /_astro/04.BNrExtxz_2qbiol.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;押して少し待っていると、データが消えました！&lt;/p&gt;&lt;p&gt;それでは肝心のOneDriveの状況はどうなっているか確認してみたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/05.DocmJPYK_Z1Ip3XT.webp&quot; srcset=&quot;/_astro/05.DocmJPYK_XhcBD.webp 640w, /_astro/05.DocmJPYK_2oVabt.webp 750w, /_astro/05.DocmJPYK_Z18afM6.webp 828w, /_astro/05.DocmJPYK_Z1Ip3XT.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ストレージの中のものはちゃんと残っていそうです！特にログインし直す必要もなかったです。&lt;/p&gt;&lt;p&gt;一体、何のデータだったのやら・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/07.DNhuDaqq_Z1LDw2F.webp&quot; srcset=&quot;/_astro/07.DNhuDaqq_ZkRi6Q.webp 640w, /_astro/07.DNhuDaqq_15LErY.webp 750w, /_astro/07.DNhuDaqq_Z2rjKvA.webp 828w, /_astro/07.DNhuDaqq_Z1LDw2F.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;X-ploreとかのファイラーで容量を確認したら、OneDriveが占有していた分の容量が空いていることが確認できるかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/08.Bmbog4cj_Z11ahjb.webp&quot; srcset=&quot;/_astro/08.Bmbog4cj_Z2hrwQi.webp 640w, /_astro/08.Bmbog4cj_ZPMzhs.webp 750w, /_astro/08.Bmbog4cj_Gi8xT.webp 828w, /_astro/08.Bmbog4cj_Z11ahjb.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあ、3GBが霧散したぜい。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;同じような状況になった人は良ければ試してみてください。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【JavaScript】実行中の関数自身の関数名を取得する</title><link>https://endorphinbath.com/posts/javascript-get-this-class-funcname/</link><guid isPermaLink="true">https://endorphinbath.com/posts/javascript-get-this-class-funcname/</guid><description>実行している関数やメソッド自身の名前を取得する方法を紹介します。この方法は、その関数名を取得する関数を別の関数から呼び出してもらわなければなりません。thisに関数をバインドする必要があるためです。その呼び出し方の種類を掲載しています。</description><pubDate>Mon, 31 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぐぐ・・・！ Errorってどうやって判別するんだ・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、JavaScriptか。Error判定する方法、知りたい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;知りたい知りたい！ ヨロシク！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回の問題点&lt;a href=&quot;#今回の問題点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の問題点は、以下のように関数を実行すると、thisが関数自身ではなく他の関数を指してしまう事象です。（thisがundefinedになってしまうこともありますよね・・・。）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;function &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ミスった出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;myTestFunc:&lt;/span&gt;&lt;span&gt; [Function: &lt;/span&gt;&lt;span&gt;myTestFunc],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;略&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=============================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[object Object]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;///////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース①&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そんなthisが指すところが定まらない問題を解決するために、今回使用したソースはこんな感じになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;function &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bind&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[Function: myFunction]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=============================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(this.toString(&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(getThisFuncName(this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;///////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;まず、main()処理を実行します。
&lt;code&gt;func.bind(obj)&lt;/code&gt;で、&lt;code&gt;func&lt;/code&gt;のthisに&lt;code&gt;obj&lt;/code&gt;をbindさせるというイメージです。&lt;/p&gt;&lt;p&gt;そのため、今回は、&lt;code&gt;myFunction&lt;/code&gt;のthisに自身をバインドさせたいので、以下のように書くことで、thisが&lt;code&gt;myFunction&lt;/code&gt;になった関数&lt;code&gt;bindFunc&lt;/code&gt;を宣言できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;bind&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、bindFuncを実行すると、&lt;code&gt;myFunction&lt;/code&gt;を実行しながらも、thisがundefinedとかにならずに&lt;code&gt;myFunction&lt;/code&gt;が入っています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足：bind以外のバインド方法&lt;a href=&quot;#補足bind以外のバインド方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;bind以外にもthisにオブジェクトをバインドさせる方法が2つあります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;call&lt;/code&gt;と&lt;code&gt;apply&lt;/code&gt;なのですが、引数を渡さないのであれば、関数名以外の書き方は変わりません。引数を渡さない場合は、&lt;code&gt;call&lt;/code&gt;がスプレッド形式で、&lt;code&gt;apply&lt;/code&gt;がリスト形式で引数を渡します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;call&lt;a href=&quot;#call&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;function &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;apply&lt;a href=&quot;#apply&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;function &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;apply&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使用したソース②：classから取得&lt;a href=&quot;#今回使用したソースclassから取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;少し余談を話したところで、次に、class内の関数（メソッド）から取得してみます。&lt;/p&gt;&lt;p&gt;書き方はクラスを宣言するところ以外は特に変わりません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myClass&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myClass&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bind&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myClass&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;bindFunc&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[Function: myFunction]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=============================&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;=============================&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(this.toString(&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;console.log(getThisFuncName(this&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;///////////////////////////&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回使用したソース③：プロパティディスクリプタから取得&lt;a href=&quot;#今回使用したソースプロパティディスクリプタから取得&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕が今回の記事を書こうとした時にハマったところがここで、クラスオブジェクトが持っているメソッドを一気に取得して、それらのメソッドを実行した都度、メソッド名を取得してみたいと思います。&lt;/p&gt;&lt;p&gt;最終形はこれです。メソッド名を一式取得できています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeItemsByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;Array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;array must be array type.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;Array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;values must be array type.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;splice&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;function &quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialOfFuncStatement&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;funcValue&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getOwnPropertyDescriptors&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeItemsByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;constructor&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;value:&lt;/span&gt;&lt;span&gt; [Function: &lt;/span&gt;&lt;span&gt;myFunction1],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;writable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enumerable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;configurable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=============================1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;=============================1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(this.value.toString(&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(getThisFuncName(this.value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;///////////////////////////1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;value:&lt;/span&gt;&lt;span&gt; [Function: &lt;/span&gt;&lt;span&gt;myFunction2],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;writable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;enumerable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;configurable:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;=============================2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;=============================2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(this.value.toString(&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console.log(getThisFuncName(this.value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;///////////////////////////2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;myFunction2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;descriptorObjに入っているのが、プロパティディスクリプタです。ー①&lt;/p&gt;&lt;p&gt;そして、descriptorKeysにconstructorを含めたメソッドを全て取得します。今回は、MyClassが持っているメソッドを全て取得します。ー②&lt;/p&gt;&lt;p&gt;この処理で、&lt;code&gt;MyClass&lt;/code&gt;はnewとかでインスタンス化しておらず、constructorを呼び出すのはマズいのでconstructorは呼び出す処理から&lt;code&gt;removeItemsByValues()&lt;/code&gt;で除外します。ー③&lt;/p&gt;&lt;p&gt;そうしたら、for文で1つずつ関数を実行していきます。ー④&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeItemsByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;Array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;array must be array type.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;Array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;isArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;values must be array type.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;splice&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getOwnPropertyDescriptors&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// ー①&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// ー②&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeItemsByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;constructor&quot;&lt;/span&gt;&lt;span&gt;]); &lt;/span&gt;&lt;span&gt;// ー③&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// ー④&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;すると、注目して欲しい点が2つありまして、&lt;/p&gt;&lt;p&gt;1つ目は、呼び出し場所でthisにメソッドをバインディングする必要がない点です。
今まで、main()処理（今回だと実行場所はdescriptExec()）でbindしていたのですが、今回はバインドしていません。&lt;/p&gt;&lt;p&gt;2つ目は、メソッド名をするための記述です。今まで、this.toString()で関数・メソッドを取得していましたが、今回はthis.value.toString()で取得しています。
このthisがどうバインディングされたのかは正直のところ分かりませんが、プロパティディスクリプタから関数を呼び出すと挙動が何か変わっています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction1&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// ← this.toString()じゃない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////1&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;myFunction2&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;=============================2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// ← this.toString()じゃない。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;///////////////////////////2&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getThisFuncName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getOwnPropertyDescriptors&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;execClass&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeItemsByValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;constructor&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;descriptorObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;descriptorKeys&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;descriptExec&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MyClass&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふう・・・、何とか取得できたな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;実行中の関数名って地味に使うけど、取得するのは少し面倒いよな。少しでも、この記事が助けになれば嬉しいです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;嬉しいぞ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;参考&lt;a href=&quot;#参考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この方の記事に、更に詳しく”this”のことについて記載されていて、参考になりました。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://zenn.dev/hinoshin/articles/bdb7a6e29fcab9&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://static.zenn.studio/images/logo-transparent.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Zenn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【JS】thisについて&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;zenn.dev&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://res.cloudinary.com/zenn/image/upload/s--7CnHWKX6--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2580%2590JS%25E3%2580%2591this%25E3%2581%25AB%25E3%2581%25A4%25E3%2581%2584%25E3%2581%25A6%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Shinya%2520Hinohara%25EF%25BC%2588%25E6%2597%25A5%25E9%2587%258E...%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdGF0aWMuemVubi5zdHVkaW8vdXNlci11cGxvYWQvYXZhdGFyLzk3OGE4ZWNlN2EuanBlZw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png?_a=BACAGSGT&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【JavaScript】Errorタイプのオブジェクトかどうかを判定する</title><link>https://endorphinbath.com/posts/javascript-error-type-object/</link><guid isPermaLink="true">https://endorphinbath.com/posts/javascript-error-type-object/</guid><description>JavaScriptで渡した値がErrorオブジェクトかどうかを判定する関数が見つからなかったので、僕が書いたものを紹介します。</description><pubDate>Sun, 30 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぐぐ・・・！ Errorってどうやって判別するんだ・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お、JavaScriptか。Error判定する方法、知りたい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;知りたい知りたい！ ヨロシク！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最終的にできたソースはこちらになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Error}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isErrorType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Object.prototype.toString.call(error)&lt;/code&gt;を呼び出したときの返り値は、Errorオブジェクトだった場合、以下のように出力されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// [object Error]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、&lt;code&gt;Object.prototype.toString.call(error).indexOf(&quot;Error&quot;)&lt;/code&gt;で、文字列の中に「Error」があれば、渡したオブジェクトはErrorタイプとなるわけです。
例えば、&lt;code&gt;TypeError&lt;/code&gt;オブジェクトを渡すとtrueになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Error}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isErrorType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;testtesttest&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isErrorType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;単に&lt;code&gt;TypeError&lt;/code&gt;と書いて渡しても、Errorオブジェクトにならないので、テストコードなどを書く時はその点を留意しましょう。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{Error}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{boolean}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isErrorType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prototype&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectTypeInfo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Error&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isErrorType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;TypeError&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでErrorかどうかを判定できるね〜&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【画像編集】Pixelmator Pro内で選択した画像を斜めに切り抜く方法</title><link>https://endorphinbath.com/posts/pixelmatorpro-trim-obliquely/</link><guid isPermaLink="true">https://endorphinbath.com/posts/pixelmatorpro-trim-obliquely/</guid><description>UIが取っ付きにくいPixelmator Proですが、画像を斜めに切り取れる方法を見つけましたので紹介します。</description><pubDate>Fri, 28 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぢぐじょお〜〜！ このソフト、画像を斜めに切れ取れんのかあ〜〜！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお、Pixelmator Proを使っとるのか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;も〜、斜めに選択したと思って適用したら、なんか勝手に物体を自動選択して切り取るし、わけわから〜ん！ Photoshop買うか！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ待て。ここをこうすると、斜めに切り取れるぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う〜ん？ ・・・おっ、おおっ！ 切り取れてる！ これだよ！これ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_007.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はこの斜めに切り取る方法を紹介するぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぬぬ・・・、手柄を取られた・・・。まあいいか・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;切り抜き方&lt;a href=&quot;#切り抜き方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、こんな状態になっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2540&quot; height=&quot;1284&quot; src=&quot;/_astro/01.DCRN-cgm_141h37.webp&quot; srcset=&quot;/_astro/01.DCRN-cgm_Z1K01bP.webp 640w, /_astro/01.DCRN-cgm_ZPqneI.webp 750w, /_astro/01.DCRN-cgm_1NKgzy.webp 828w, /_astro/01.DCRN-cgm_1OjzoG.webp 1080w, /_astro/01.DCRN-cgm_23e1e9.webp 1280w, /_astro/01.DCRN-cgm_Z2qqmrG.webp 1668w, /_astro/01.DCRN-cgm_Zoq176.webp 2048w, /_astro/01.DCRN-cgm_141h37.webp 2540w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回、切り抜くのはキャンバス右上の、このピンク色のドーナツになります。
&lt;img loading=&quot;lazy&quot; width=&quot;966&quot; height=&quot;656&quot; src=&quot;/_astro/02.t_67PHo__Z1Fhr4V.webp&quot; srcset=&quot;/_astro/02.t_67PHo__1bnwCk.webp 640w, /_astro/02.t_67PHo__21WXPu.webp 750w, /_astro/02.t_67PHo__Z1sS8xw.webp 828w, /_astro/02.t_67PHo__Z1Fhr4V.webp 966w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、ツール＞選択＞多角形選択 を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2676&quot; height=&quot;1298&quot; src=&quot;/_astro/03.C5mG6r2g_Z2undnq.webp&quot; srcset=&quot;/_astro/03.C5mG6r2g_Z1zKSW.webp 640w, /_astro/03.C5mG6r2g_Z1E39R1.webp 750w, /_astro/03.C5mG6r2g_10gyUP.webp 828w, /_astro/03.C5mG6r2g_Z26zCUH.webp 1080w, /_astro/03.C5mG6r2g_Z1Js8xF.webp 1280w, /_astro/03.C5mG6r2g_wJPs6.webp 1668w, /_astro/03.C5mG6r2g_rDqMv.webp 2048w, /_astro/03.C5mG6r2g_ZHqgRc.webp 2560w, /_astro/03.C5mG6r2g_Z2undnq.webp 2676w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ツールのパレットからも選択できます。
&lt;img loading=&quot;lazy&quot; width=&quot;587&quot; height=&quot;644&quot; src=&quot;/_astro/04.7CesEt3k_Zg4INt.webp&quot; srcset=&quot;/_astro/04.7CesEt3k_Zg4INt.webp 587w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「新規」のラジオボタンをチェックしていることと、切り抜きレイヤーが選択されていることを確認して、こんな風に自由選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;3015&quot; height=&quot;1278&quot; src=&quot;/_astro/05.CYtHT5kV_ZJ6UkH.webp&quot; srcset=&quot;/_astro/05.CYtHT5kV_7K1Pw.webp 640w, /_astro/05.CYtHT5kV_m7i4c.webp 750w, /_astro/05.CYtHT5kV_Z1lilBG.webp 828w, /_astro/05.CYtHT5kV_zAMJv.webp 1080w, /_astro/05.CYtHT5kV_ZtB2Jr.webp 1280w, /_astro/05.CYtHT5kV_Z143JsD.webp 1668w, /_astro/05.CYtHT5kV_1JqAGB.webp 2048w, /_astro/05.CYtHT5kV_ghvzJ.webp 2560w, /_astro/05.CYtHT5kV_ZJ6UkH.webp 3015w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「選択とマスク」をクリックします。そうすると、こんな感じの画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;3015&quot; height=&quot;1278&quot; src=&quot;/_astro/05.CYtHT5kV_ZJ6UkH.webp&quot; srcset=&quot;/_astro/05.CYtHT5kV_7K1Pw.webp 640w, /_astro/05.CYtHT5kV_m7i4c.webp 750w, /_astro/05.CYtHT5kV_Z1lilBG.webp 828w, /_astro/05.CYtHT5kV_zAMJv.webp 1080w, /_astro/05.CYtHT5kV_ZtB2Jr.webp 1280w, /_astro/05.CYtHT5kV_Z143JsD.webp 1668w, /_astro/05.CYtHT5kV_1JqAGB.webp 2048w, /_astro/05.CYtHT5kV_ghvzJ.webp 2560w, /_astro/05.CYtHT5kV_ZJ6UkH.webp 3015w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、赤枠の中の、出力の部分を「新規レイヤー」にします。そしたら、「適用する」をクリックしてしまってください。
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1758&quot; src=&quot;/_astro/06.kuCfwCHc_2dQa6a.webp&quot; srcset=&quot;/_astro/06.kuCfwCHc_ZFcYrx.webp 640w, /_astro/06.kuCfwCHc_22kVmF.webp 750w, /_astro/06.kuCfwCHc_hET52.webp 828w, /_astro/06.kuCfwCHc_ZORw9Y.webp 1080w, /_astro/06.kuCfwCHc_G9bXS.webp 1280w, /_astro/06.kuCfwCHc_Z1RkTO0.webp 1668w, /_astro/06.kuCfwCHc_Zqd5R2.webp 2048w, /_astro/06.kuCfwCHc_ZAL2Cz.webp 2560w, /_astro/06.kuCfwCHc_2dQa6a.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そうすると、新規レイヤーで斜めに切り抜かれたドーナツが出力されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2450&quot; height=&quot;1048&quot; src=&quot;/_astro/07.BQOUNp_T_Z1h8LtG.webp&quot; srcset=&quot;/_astro/07.BQOUNp_T_ZFocVl.webp 640w, /_astro/07.BQOUNp_T_24FgqL.webp 750w, /_astro/07.BQOUNp_T_Z29rAoy.webp 828w, /_astro/07.BQOUNp_T_hIbtA.webp 1080w, /_astro/07.BQOUNp_T_Z6pmfu.webp 1280w, /_astro/07.BQOUNp_T_Z1q2S0l.webp 1668w, /_astro/07.BQOUNp_T_1jkUS7.webp 2048w, /_astro/07.BQOUNp_T_Z1h8LtG.webp 2450w&quot; /&gt;&lt;/p&gt;&lt;p&gt;レイヤーを動かしてみると、確かに、斜めに切り抜かれたものであることが確認できるかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;2554&quot; height=&quot;1174&quot; src=&quot;/_astro/08.Cb4ersaW_26vayD.webp&quot; srcset=&quot;/_astro/08.Cb4ersaW_Z1OroKg.webp 640w, /_astro/08.Cb4ersaW_UlTEH.webp 750w, /_astro/08.Cb4ersaW_1JPcUq.webp 828w, /_astro/08.Cb4ersaW_1DI0qR.webp 1080w, /_astro/08.Cb4ersaW_Z2bWKpN.webp 1280w, /_astro/08.Cb4ersaW_Z29mszs.webp 1668w, /_astro/08.Cb4ersaW_2jkOwG.webp 2048w, /_astro/08.Cb4ersaW_26vayD.webp 2554w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よかったよかった！ 機能としてあるくせに、どこにあるか分かりづらいんだもんなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;せっかく買ったから、機能の限界まで使い倒したいね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Heroku】Pythonで作成したDiscord用のボットをGitHubリポジトリからデプロイするやり方</title><link>https://endorphinbath.com/posts/heroku-how-to-deploy-discord-bot/</link><guid isPermaLink="true">https://endorphinbath.com/posts/heroku-how-to-deploy-discord-bot/</guid><description>HerokuでPythonで書いたDiscordアプリをGitHubリポジトリからデプロイします。記載した手順で特に躓くことなく実施できたので、ご参考ください。</description><pubDate>Mon, 24 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし！ボットも出来たことだしデプロイするかあー！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うむ。今回は、Herokuを使ってデプロイしてみますか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;👍&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順（準備）&lt;a href=&quot;#手順準備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Herokuでデプロイする際に必要なファイルを、デプロイ元のリポジトリに準備します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Procfile&lt;a href=&quot;#procfile&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Dynosサーバが起動した際に走らせるコマンドを書くようです。こんな感じで。&lt;/p&gt;&lt;p&gt;「discordbot」の部分はラベルなので、一応何でも良いそうです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;discordbot: python3 app.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;runtime.txt&lt;a href=&quot;#runtimetxt&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用するPythonのバージョンを書きます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;python-3.8.10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;requirements.txt&lt;a href=&quot;#requirementstxt&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;requirements.txtも書いておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;###### Requirements with Version Specifiers ######&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;### for app ###&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;py-cord[voice]==2.0.0b1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# janome&amp;gt;=0.4.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gspread&amp;gt;=5.1.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;oauth2client&amp;gt;=4.1.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;asyncio&amp;gt;=3.4.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git+https://github.com/landmaster135/landmasterlibrary.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;手順（Heroku画面での操作）&lt;a href=&quot;#手順heroku画面での操作&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Herokuにログインして（アカウントがなかったらアカウント作成して）ダッシュボード的な場所に遷移します。&lt;/p&gt;&lt;p&gt;そこで、「Create new app」します。
&lt;img loading=&quot;lazy&quot; width=&quot;2746&quot; height=&quot;718&quot; src=&quot;/_astro/01.CRkcgb9y_nklV9.webp&quot; srcset=&quot;/_astro/01.CRkcgb9y_1bvL9K.webp 640w, /_astro/01.CRkcgb9y_ipeWy.webp 750w, /_astro/01.CRkcgb9y_Z1iLyOm.webp 828w, /_astro/01.CRkcgb9y_1a9xal.webp 1080w, /_astro/01.CRkcgb9y_Z9krYR.webp 1280w, /_astro/01.CRkcgb9y_Z28splh.webp 1668w, /_astro/01.CRkcgb9y_Z2oHFxf.webp 2048w, /_astro/01.CRkcgb9y_1Ki2RL.webp 2560w, /_astro/01.CRkcgb9y_nklV9.webp 2746w&quot; /&gt;&lt;/p&gt;&lt;p&gt;App nameを埋めます。regionはUnited Statesで良さそうです。
&lt;img loading=&quot;lazy&quot; width=&quot;2726&quot; height=&quot;1000&quot; src=&quot;/_astro/02.Cu4QPb9X_Z2c21QO.webp&quot; srcset=&quot;/_astro/02.Cu4QPb9X_Z22QsmV.webp 640w, /_astro/02.Cu4QPb9X_Z15TlPu.webp 750w, /_astro/02.Cu4QPb9X_1AoAAX.webp 828w, /_astro/02.Cu4QPb9X_BHRMB.webp 1080w, /_astro/02.Cu4QPb9X_CduHf.webp 1280w, /_astro/02.Cu4QPb9X_2cbIMe.webp 1668w, /_astro/02.Cu4QPb9X_24TQVI.webp 2048w, /_astro/02.Cu4QPb9X_re9XA.webp 2560w, /_astro/02.Cu4QPb9X_Z2c21QO.webp 2726w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、「Deployment method」でGitHubを選択します。すると、認証画面が開くので、そこで認証します。&lt;/p&gt;&lt;p&gt;そして、App connected to GitHubでデプロイしたいリポジトリを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2800&quot; height=&quot;1470&quot; src=&quot;/_astro/03.C6FYztow_Zk2dzo.webp&quot; srcset=&quot;/_astro/03.C6FYztow_B9i8m.webp 640w, /_astro/03.C6FYztow_1u7WmA.webp 750w, /_astro/03.C6FYztow_1B9ui7.webp 828w, /_astro/03.C6FYztow_Z2cwGJ2.webp 1080w, /_astro/03.C6FYztow_ZgQMVr.webp 1280w, /_astro/03.C6FYztow_3eP5v.webp 1668w, /_astro/03.C6FYztow_18JLz5.webp 2048w, /_astro/03.C6FYztow_1y4mca.webp 2560w, /_astro/03.C6FYztow_Zk2dzo.webp 2800w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デプロイ方法を「Automatic deploys」にするか「Manual deploy」にするか選べます。&lt;/p&gt;&lt;p&gt;今回は、Manual deployにしたので、下の画面の状態で「Deploy Branch」をクリックするとデプロイが始まります。&lt;/p&gt;&lt;p&gt;すると、ログが書かれるシェル的なものが出てくるので、それが閉じてデプロイが完了するまで待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;2790&quot; height=&quot;1396&quot; src=&quot;/_astro/04.BLVdUG3s_Z2nYvjY.webp&quot; srcset=&quot;/_astro/04.BLVdUG3s_1qUluj.webp 640w, /_astro/04.BLVdUG3s_2ltYrq.webp 750w, /_astro/04.BLVdUG3s_2sDBlw.webp 828w, /_astro/04.BLVdUG3s_ZJTfgD.webp 1080w, /_astro/04.BLVdUG3s_239w6b.webp 1280w, /_astro/04.BLVdUG3s_Z1Gk2y0.webp 1668w, /_astro/04.BLVdUG3s_oLP3n.webp 2048w, /_astro/04.BLVdUG3s_YQYfg.webp 2560w, /_astro/04.BLVdUG3s_Z2nYvjY.webp 2790w&quot; /&gt;&lt;/p&gt;&lt;p&gt;デプロイが完了して、Resourcesタブに移動すると、Dynosの部分にProcfileで記述したコマンドが表示されています。&lt;/p&gt;&lt;p&gt;そこで、鉛筆マークを押して、アクティブにして、Confirmします。
&lt;img loading=&quot;lazy&quot; width=&quot;2792&quot; height=&quot;1168&quot; src=&quot;/_astro/05.B1ydeA-7_Z1wD8jp.webp&quot; srcset=&quot;/_astro/05.B1ydeA-7_lbbWT.webp 640w, /_astro/05.B1ydeA-7_ydDpP.webp 750w, /_astro/05.B1ydeA-7_Z17J6vJ.webp 828w, /_astro/05.B1ydeA-7_1HJ2cb.webp 1080w, /_astro/05.B1ydeA-7_Z17kMwG.webp 1280w, /_astro/05.B1ydeA-7_Z5GzO6.webp 1668w, /_astro/05.B1ydeA-7_Z1keq5q.webp 2048w, /_astro/05.B1ydeA-7_Za7Dn9.webp 2560w, /_astro/05.B1ydeA-7_Z1wD8jp.webp 2792w&quot; /&gt;&lt;/p&gt;&lt;p&gt;アクティブになっているときの画面です。
&lt;img loading=&quot;lazy&quot; width=&quot;2778&quot; height=&quot;1084&quot; src=&quot;/_astro/06.Deq-v6Qy_1brt7X.webp&quot; srcset=&quot;/_astro/06.Deq-v6Qy_ZOzDXP.webp 640w, /_astro/06.Deq-v6Qy_Z2pUJjI.webp 750w, /_astro/06.Deq-v6Qy_Z2gLSL1.webp 828w, /_astro/06.Deq-v6Qy_9a7Jw.webp 1080w, /_astro/06.Deq-v6Qy_2iBSif.webp 1280w, /_astro/06.Deq-v6Qy_27NmdL.webp 1668w, /_astro/06.Deq-v6Qy_ZP2Wgf.webp 2048w, /_astro/06.Deq-v6Qy_Mzc9j.webp 2560w, /_astro/06.Deq-v6Qy_1brt7X.webp 2778w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動作確認&lt;a href=&quot;#動作確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、サーバも動いたので、Discordで確認してみます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ボットがオンラインになっているのが確認できます。&lt;/li&gt;
&lt;li&gt;そして、メッセージを打ったら、反応も返ってきています！
&lt;img loading=&quot;lazy&quot; width=&quot;2334&quot; height=&quot;1464&quot; src=&quot;/_astro/07.B6UU8BPD_Z2h1qSu.webp&quot; srcset=&quot;/_astro/07.B6UU8BPD_ZpvBxS.webp 640w, /_astro/07.B6UU8BPD_qkJ3a.webp 750w, /_astro/07.B6UU8BPD_wOW4o.webp 828w, /_astro/07.B6UU8BPD_ZfJ2NT.webp 1080w, /_astro/07.B6UU8BPD_Z21trYu.webp 1280w, /_astro/07.B6UU8BPD_Z1RmPtd.webp 1668w, /_astro/07.B6UU8BPD_Z1hM0ef.webp 2048w, /_astro/07.B6UU8BPD_Z2h1qSu.webp 2334w&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあ〜、動いたな。Herokuのデプロイはかなり簡単だったな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そだね。Python以外のアプリをデプロイした際に、手順がどうなるんだろうね。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;参考&lt;a href=&quot;#参考&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下のサイトを参考にしました。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Pythonで実用Discord Bot(discordpy解説) - Qiita&lt;/div&gt;&lt;div&gt;はじめに この記事は Python と discord.py を利用した Discord Bot 開発のチュートリアルです。 Pythonの基礎知識がある方を対象読者としています。 （関数の定義と呼び出しができるレベルを想定しています） Python で Discord ...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMTE4ODMwJTJGcHJvZmlsZS1pbWFnZXMlMkYxNTM4MjEwOTkyP2l4bGliPXJiLTQuMS4xJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz1hZTg3YmFkOTY4M2QxZjhkZTc1MmFlNTI1MGI5NmFiYg%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkY5MjZiZDM0YTRkMTBlNTUzM2ZmNzZmNTdkZTNjMjM3N2U5OTc3YjIyJTJGb3JpZ2luYWwuanBnJTNGMTY0MzcxMTcyMj9peGxpYj1yYi00LjEuMSZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz0wNjM2NzVmNmU0ZTgzZTc5OWQ5NDExNDdjY2U5NWM0OA%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3D546220127db96428e631d29143f7d776?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9UHl0aG9uJUUzJTgxJUE3JUU1JUFFJTlGJUU3JTk0JUE4RGlzY29yZCUyMEJvdCUyOGRpc2NvcmRweSVFOCVBNyVBMyVFOCVBQSVBQyUyOSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTdiYTVlMTZiZTM1YjBmZGI0MTkyOTcwYjczNGE3ODRi&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDAxbnRlZ3JhbGU5JnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9MDUwODlkOWZkOGUxNDdiODM5OGNiNjY2N2RhZTI1MTY&amp;amp;blend-x=242&amp;amp;blend-y=454&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;txt64=RGlzY29yZCBCb3QgUG9ydGFsIEpQ&amp;amp;txt-x=242&amp;amp;txt-y=539&amp;amp;txt-width=838&amp;amp;txt-clip=end%2Cellipsis&amp;amp;txt-color=%233A3C3C&amp;amp;txt-font=Hiragino%20Sans%20W6&amp;amp;txt-size=28&amp;amp;s=0833a4e1a79796f01230025c1efa973a&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】.pyファイルにある関数とメソッドを全て取得する</title><link>https://endorphinbath.com/posts/python-getting-all-methods-in-file/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-getting-all-methods-in-file/</guid><description>Pythonで.pyファイルの中に記述されている関数およびメソッドを全て取得するスクリプトを掲載します。</description><pubDate>Sat, 22 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Pythonスクリプトファイルから、関数およびメソッドを全て取得する処理を作るぞ〜。テストコードとかREADMEを書く時に使ってみたりするぞ〜。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のソースはこちらになります。読み取り先ファイルと読み取り元ファイルを同じディレクトリに配置して、この読み取り元ファイル.pyを実行します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;get_words_in_lines_by_head_and_tail()&lt;/code&gt;で、&lt;code&gt;&quot;def &quot;&lt;/code&gt;と&lt;code&gt;&quot;(&quot;&lt;/code&gt;の間の文字列を取得します。
そして、&lt;code&gt;remove_head_spaces()&lt;/code&gt;で、取得した文字列の&lt;code&gt;&quot;def &quot;&lt;/code&gt;より前にある空白文字を削除します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;読み取り元ファイル.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spaces&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; spaces:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word)&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# invisible head character if head space is nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(word_removed_space[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(word)]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(word_removed_space, spaces)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; word_removed_space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_in_lines_by_head_and_tail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;text_lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;head_of_target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tail_of_target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text_line_removed_head_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(text_lines)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; text_line &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; text_lines:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text_line_removed_head_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(text_line)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;head_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; text_line_removed_head_space.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(head_of_target, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; head_index &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tail_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; text_line_removed_head_space.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(tail_of_target, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;head_index)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; text_line_removed_head_space.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(tail_of_target, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;continue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; text_line_removed_head_space[&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(head_of_target):tail_index]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(word)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; words&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_functions_in_python_file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;file_full_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;head_of_function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;def &quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tail_of_function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;(&quot;&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;functions &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(file_full_name, &lt;/span&gt;&lt;span&gt;&quot;r&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; f.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text_lines &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; text.&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;functions &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_in_lines_by_head_and_tail&lt;/span&gt;&lt;span&gt;(text_lines, head_of_function, tail_of_function)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; functions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;file_full_name &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;読み取り先ファイル.py&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_functions_in_python_file&lt;/span&gt;&lt;span&gt;(file_full_name)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(actual)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;読み取り先ファイル.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;make_voicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace_character &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__name__&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  def make_voicedsound(self, text : str) -&amp;gt; str:&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; def make_voicedsound(self, text : str) -&amp;gt; str:&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;def make_voicedsound(self, text : str) -&amp;gt; str:&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ef make_voicedsound(self, text : str) -&amp;gt; str:&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;      pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;     pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;    pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;pass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ass&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  replace_character = ReplaceCharacter()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; replace_character = ReplaceCharacter()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;replace_character = ReplaceCharacter()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;eplace_character = ReplaceCharacter()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  main()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; main()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;main()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ain()&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;make_voicedsound&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;main&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やったあ、できたあ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】複数の区切り文字を指定して文字列を配列に分割する</title><link>https://endorphinbath.com/posts/python-string-to-list-by-multi-seperator/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-string-to-list-by-multi-seperator/</guid><description>Pythonで文字列を配列に分割するスクリプトを掲載します。分割文字は配列で指定するように作っています。</description><pubDate>Fri, 21 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、今回は区切り文字を複数指定して、文字列を配列に変換するスクリプトを作るぞー。`str.split`だと文字を一つしか指定できないからねえ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;get_words_by_seperators()&lt;/code&gt;がメイン処理になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;get_indices_by_seperators()&lt;/code&gt;で区切り文字があるインデックスを取得して、&lt;/p&gt;&lt;p&gt;&lt;code&gt;get_words_by_indices()&lt;/code&gt;でそのインデックスをによって文字列を配列に変換します。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_indices_by_seperators&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;seperators&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;,&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;、&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_indices &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; sep &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; seperators:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; sep_index &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word.&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt;(sep, start)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; sep_index &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_indices.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(sep_index)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sep_index &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_indices.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(word))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(sep_indices)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep_indices.&lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(sep_indices)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; sep_indices&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_by_indices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indices&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; indices:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(word[start:i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(words)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; words&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_by_seperators&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;seperators&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;,&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;、&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spaces&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indices &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_indices_by_seperators&lt;/span&gt;&lt;span&gt;(word, seperators)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_by_indices&lt;/span&gt;&lt;span&gt;(word, indices)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words_without_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; word &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; words:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;words_without_space.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;remove_spaces_at_head_and_tail&lt;/span&gt;&lt;span&gt;(word, spaces))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(words_without_space)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; words_without_space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;keyword &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;python, node.js 、 gollila ,web&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_words_by_seperators&lt;/span&gt;&lt;span&gt;(keyword)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(actual)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;出力:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[6, 26, 16, 30]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[6, 16, 26, 30]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos; node.js &apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos; gollila &apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;web&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ode.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; gollila&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ollila&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;node.js&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;gollila&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;web&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;python&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;node.js&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;gollila&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;web&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふい〜、今回もおわり〜。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】文字列の先頭と末尾にあるスペース、空白文字を削除する</title><link>https://endorphinbath.com/posts/python-remove-spaces-head-and-tail/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-remove-spaces-head-and-tail/</guid><description>Pythonで文字列の先頭と末尾にスペース（空白文字）が混じっていることがあります。そのスペースを削除するスクリプトを掲載します。</description><pubDate>Thu, 20 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さーて、今回もちょっとしたツールを作るかあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、こいつらを作ろう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回は、こいつらを作ろう。&lt;a href=&quot;#今回はこいつらを作ろう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;先頭にある空白文字を削除する。&lt;/li&gt;
&lt;li&gt;末尾にある空白文字を削除する。&lt;/li&gt;
&lt;li&gt;先頭および末尾にある空白文字を削除する。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらが今回のソースになります。&lt;/p&gt;&lt;p&gt;末尾にある空白文字を削除する関数が、&lt;code&gt;remove_tail_sapces()&lt;/code&gt;、
先頭にある空白文字を削除する関数が、&lt;code&gt;remove_head_sapces()&lt;/code&gt;、
先頭および末尾にある空白文字を削除する関数が、&lt;code&gt;remove_spaces_at_head_and_tail()&lt;/code&gt;
になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_tail_sapces&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spaces&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; spaces:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(word_removed_space[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_tail_sapces&lt;/span&gt;&lt;span&gt;(word_removed_space, spaces)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; word_removed_space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spaces&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; spaces:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(word)&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# invisible head character if head space is nothing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(word_removed_space[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(word)]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(word_removed_space, spaces)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_removed_space &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; word&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; word_removed_space&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_spaces_at_head_and_tail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;word&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spaces&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_tail_removed &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_tail_sapces&lt;/span&gt;&lt;span&gt;(word, spaces)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;word_both_removed &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_head_sapces&lt;/span&gt;&lt;span&gt;(word_tail_removed, spaces)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; word_both_removed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;keyword  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;   　　　　　　　      　　   node.js    　　　　　  　　　　  &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;actual &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;remove_spaces_at_head_and_tail&lt;/span&gt;&lt;span&gt;(keyword, [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;　&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(actual)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;出力&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  　　　　 &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  　　　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  　　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　  &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　 &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    　&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js    &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js   &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js  &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js &apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　　　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; 　　　　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　　　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;      　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;     　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;    　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; 　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;　   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;   node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;  node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos; node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;node.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;ode.js&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;各関数にある引数spacesのリストの中身を変更・追加すれば、先頭と末尾にある不要な文字を変更・追加する事ができます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあ、今回もできたぜえ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】gspreadなどを使う時にセルを数値からアルファベット形式（A1 notation）に加工する</title><link>https://endorphinbath.com/posts/python-gspread-number-to-a1notation/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-gspread-number-to-a1notation/</guid><description>Pythonで利用できるモジュールであるgspreadを使ってGoogleスプレッドシートに入力する時、数値ではなくA1形式で入力する必要があります。数値からアルファベットにするスクリプトを掲載します。</description><pubDate>Wed, 19 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーむ、gspreadって、セルを範囲で指定する時、(1,2)のセル形式でセルを操作できないのかあ・・・。(1,2)のセルを(B1)みたいな感じで取得できないかなあ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・お！ こんな感じかなあ。一旦「ZZZ」まで出力できればいいかなあ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソース&lt;a href=&quot;#今回のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下のソースが、数値形式からアルファベット形式に変換するスクリプトになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Number of cell this method can format is 26 x 26 x 27 = 18252.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;number_of_alphabet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;((number &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; number_of_alphabet) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; (number_of_alphabet &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; number_of_alphabet))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;((number &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; number_of_alphabet) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; number_of_alphabet&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; number &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; (i &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; number_of_alphabet) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; (h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; number_of_alphabet &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; number_of_alphabet)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alpha &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; h, i, j:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alpha &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(k &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;64&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; alpha&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;row_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;col_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;con_index_alpha &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(col_index)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{1}{0}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(row_index), &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(con_index_alpha))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; cell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_range_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;start_row_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start_col_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num_rows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num_cols&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) -&amp;gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;start_cell &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(start_row_index, start_col_index)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_row_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; start_row_index &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; num_rows &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_col_index &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; start_col_index &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; num_cols &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end_cell &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(end_row_index, end_col_index)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(start_cell, end_cell)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;alpha_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;alpha_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;alpha_3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;alpha_4 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to_alpha_under_3digits&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;16784&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(alpha_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(alpha_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(alpha_3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(alpha_4)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;==============&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cell_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cell_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cell_3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_cell_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(cell_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(cell_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(cell_3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;==============&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;range_1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_range_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;range_2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_range_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;26&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;range_3 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_range_in_a1_notation&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;16784&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(range_1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(range_2)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(range_3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Z&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;XUN&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;==============&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Z10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AC15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;==============&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;A1:Z10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Z10:BB24&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;AC15:XVP34&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回のソースについて&lt;a href=&quot;#今回のソースについて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;アルファベットに変換する（to_alpha_under_3digits()）&lt;a href=&quot;#アルファベットに変換するto_alpha_under_3digits&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「ZZZ」までのアルファベットに変換することが出来ます。数値で言うと、18,252列までのインデックスに適用できます。&lt;/p&gt;&lt;p&gt;出力例：「A」、「Z」、「AC」、「XUN」など&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アルファベット形式でセルを表現する（get_cell_in_a1_notation()）&lt;a href=&quot;#アルファベット形式でセルを表現するget_cell_in_a1_notation&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;アルファベットに変換したセルを使用してセルを取得します。&lt;/p&gt;&lt;p&gt;出力例：「A1」、「Z10」、「AC15」など。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アルファベット形式でセル範囲を表現する（get_range_in_a1_notation()）&lt;a href=&quot;#アルファベット形式でセル範囲を表現するget_range_in_a1_notation&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;アルファベットに変換したセルを使用してセル範囲を取得します。&lt;/p&gt;&lt;p&gt;出力例：「A1」、「Z10」、「AC15」&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・よーし！ いっちょあがり〜！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Discord API】Interactionの応答のタイムアウトを考えて実装する（pycord使用）</title><link>https://endorphinbath.com/posts/discord-api-about-timeout/</link><guid isPermaLink="true">https://endorphinbath.com/posts/discord-api-about-timeout/</guid><description>Pythonのpycordを使った際にinteractionの部分に至る前の処理時間が長いと「インタラクションに失敗しました」のエラーが出ます。その際に試したことなどを掲載しています。</description><pubDate>Wed, 12 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、ガッデムガッデム〜〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうしたんだ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;何が起こっているんだ&lt;a href=&quot;#何が起こっているんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;pycordで実装したボタンを押したときに「インタラクションに失敗しました」と出る。
Discord APIの仕様でタイムアウトになっているっぽいです。
&lt;img loading=&quot;lazy&quot; width=&quot;2382&quot; height=&quot;1452&quot; src=&quot;/_astro/01.BiE4KdJB_Z1NmnQq.webp&quot; srcset=&quot;/_astro/01.BiE4KdJB_ZFT8Lb.webp 640w, /_astro/01.BiE4KdJB_ZvDoOi.webp 750w, /_astro/01.BiE4KdJB_Zqt0yN.webp 828w, /_astro/01.BiE4KdJB_YcSJP.webp 1080w, /_astro/01.BiE4KdJB_Z1BmRXK.webp 1280w, /_astro/01.BiE4KdJB_Z27QL3f.webp 1668w, /_astro/01.BiE4KdJB_1XmNA6.webp 2048w, /_astro/01.BiE4KdJB_Z1NmnQq.webp 2382w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;再現したソース：その1&lt;a href=&quot;#再現したソースその1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、再現した環境は、ubuntu：20.04.3、Python：3.8.10、py-cord：2.0.0b1です。&lt;/p&gt;&lt;p&gt;先程のエラーが再現したコードは以下になります。&lt;code&gt;await interaction.response.edit_message&lt;/code&gt;の部分で起きます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/helpers.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ButtonView&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;viewKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; viewKey &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(msg, bot)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; buttonList:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonYes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_yes&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.primary,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;msg,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonNo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NoButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_no&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.secondary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [buttonYes, buttonNo]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;label, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;style)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._registeringMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._bot &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;judge &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Judge&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configObj[&lt;/span&gt;&lt;span&gt;&quot;jsonKeyFleName&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; judge.&lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;gssId&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;sheetName&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SheetEditor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Googleスプレッドシートを編集する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor.&lt;/span&gt;&lt;span&gt;writeInfoToGss&lt;/span&gt;&lt;span&gt;(worksheet, &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;edit_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;msgForReply_urlYet&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_registered&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;エラーメッセージはこんな感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Ignoring exception in view &amp;lt;ButtonView timeout=180.0 children=2&amp;gt; for item &amp;lt;YesButton style=&amp;lt;ButtonStyle.primary: 1&amp;gt; url=None disabled=False label=&apos;よろしく&apos; emoji=None row=None&amp;gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Traceback (most recent call last):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/usr/local/lib/python3.8/dist-packages/discord/ui/view.py&quot;, line 365, in _scheduled_task&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;await item.callback(interaction)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/usr/src/app/src/helpers.py&quot;, line 79, in callback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;await interaction.response.edit_message(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/usr/local/lib/python3.8/dist-packages/discord/interactions.py&quot;, line 721, in edit_message&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;await adapter.create_interaction_response(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;File &quot;/usr/local/lib/python3.8/dist-packages/discord/webhook/async_.py&quot;, line 192, in request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;raise NotFound(response, data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;再現したソース：その2&lt;a href=&quot;#再現したソースその2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、以下のソースでも同じことが起きます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/helpers.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ButtonView&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;viewKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; viewKey &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(msg, bot)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; buttonList:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonYes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_yes&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.primary,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;msg,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonNo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NoButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_no&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.secondary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [buttonYes, buttonNo]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;label, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;style)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._registeringMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._bot &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;judge &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Judge&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configObj[&lt;/span&gt;&lt;span&gt;&quot;jsonKeyFleName&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; judge.&lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;gssId&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;sheetName&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SheetEditor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Googleスプレッドシートを編集する→sleepに置き換え&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;edit_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;msgForReply_urlYet&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_registered&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;原因はどうやらタイムアウトみたい&lt;a href=&quot;#原因はどうやらタイムアウトみたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その2のソースで再現したので、どうやらinteractionがtimeoutしたことが原因だと思われます。&lt;/p&gt;&lt;p&gt;実際に何秒でタイムアウトするのかは分からなかったのですが、時間がかかる処理を排除して再度実行したら再現しませんでした。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試してみたこと1：botにwait_forさせている間に処理をさせる&lt;a href=&quot;#試してみたこと1botにwait_forさせている間に処理をさせる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最初に試してみたのが、&lt;code&gt;discord.Bot&lt;/code&gt;型で生成したインスタンスをYesButtonクラスに持ってきて、wait_forさせる方法です。wait_forしている間に、時間がかかる処理を行わせようと考えたのです。&lt;/p&gt;&lt;p&gt;しかし、以下のソースで実行しましたが、「Interaction failed」になってしまい、wait_forの結果は&lt;code&gt;asyncio.exceptions.TimeoutError&lt;/code&gt;が出ました。&lt;/p&gt;&lt;p&gt;Interactionとbotは、特に噛み合っているわけではないようです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/helpers.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ButtonView&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;viewKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; viewKey &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(msg, bot)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; buttonList:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonYes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_yes&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.primary,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;msg,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonNo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NoButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_no&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.secondary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [buttonYes, buttonNo]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;label, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;style)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._registeringMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._bot &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;judge &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Judge&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configObj[&lt;/span&gt;&lt;span&gt;&quot;jsonKeyFleName&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; judge.&lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;gssId&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;sheetName&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SheetEditor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Googleスプレッドシートを編集する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# sheetEditor.writeInfoToGss(worksheet, self._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;time.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# wait_for処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;testMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._bot.&lt;/span&gt;&lt;span&gt;wait_for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;message&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;check&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;edit_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;msgForReply_urlYet&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_registered&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;試してみたこと2：viewのtimeout値を設定する&lt;a href=&quot;#試してみたこと2viewのtimeout値を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に試したことは、viewのtimeout値を大きい数値で記述することです。&lt;/p&gt;&lt;p&gt;以下のようなソースです。これも効果はありませんでした・・・&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ButtonView&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;viewKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;timeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; viewKey &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(msg)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; buttonList:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonYes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_yes&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.primary,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonNo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NoButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_no&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.secondary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [buttonYes, buttonNo]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;label, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;style)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._registeringMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;judge &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Judge&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configObj[&lt;/span&gt;&lt;span&gt;&quot;jsonKeyFleName&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; judge.&lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;gssId&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;sheetName&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Googleスプレッドシートを編集する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# sheetEditor.writeInfoToGss(worksheet, self._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SheetEditor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor.&lt;/span&gt;&lt;span&gt;writeInfoToGss&lt;/span&gt;&lt;span&gt;(worksheet, &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;edit_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;msgForReply_urlYet&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_registered&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解消したこと：interactionへの反応後に、時間がかかる処理を行う&lt;a href=&quot;#解消したことinteractionへの反応後に時間がかかる処理を行う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結局、この方法に落ち着きました。反応した際にはまだ目的の処理は行っておらず、反応した後に行わせました。&lt;/p&gt;&lt;p&gt;イメージとしては、お母さんに「食器運んでおいてー！」と言われて、「はーい！」と返事して１分くらい経ったら運ぶ。みたいな感じです。&lt;/p&gt;&lt;p&gt;&lt;code&gt;src/helpers.py&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ButtonView&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;View&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;viewKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; viewKey &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(msg, bot)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; buttonList:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_item&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getButtonList&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonYes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_yes&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.primary,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;msg,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;buttonNo &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NoButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_no&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;discord.ButtonStyle.secondary&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [buttonYes, buttonNo]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YesButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Bot&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;super&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;label, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;style)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._registeringMsg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; msg&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;&lt;span&gt;._bot &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; bot&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callback&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interaction&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; discord.Interaction&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gofer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Gofer&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configFileFullName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configFileName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getObjFromYaml&lt;/span&gt;&lt;span&gt;(configFileFullName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;judge &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Judge&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gofer.&lt;/span&gt;&lt;span&gt;getSrcPathFromTestPath&lt;/span&gt;&lt;span&gt;(configObj[&lt;/span&gt;&lt;span&gt;&quot;jsonKeyFleName&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; judge.&lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;jsonKeyFleName,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;gssId&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;sheetName&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SheetEditor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Googleスプレッドシートを編集する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# sheetEditor.writeInfoToGss(worksheet, self._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# time.sleep(3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# testMsg = await self._bot.wait_for(&apos;message&apos;, check=None, timeout=5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; interaction.response.&lt;/span&gt;&lt;span&gt;edit_message&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;msgForReply_urlYet&quot;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;configObj[&lt;/span&gt;&lt;span&gt;&quot;viewForReply_buttons01_registered&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# 「Googleスプレッドシートを編集する」をこちらに移動&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetEditor.&lt;/span&gt;&lt;span&gt;writeInfoToGss&lt;/span&gt;&lt;span&gt;(worksheet, &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;._registeringMsg)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;「インタラクションに失敗しました」エラーは発生しませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;2368&quot; height=&quot;1434&quot; src=&quot;/_astro/02.u1MOB36z_2t3k4Y.webp&quot; srcset=&quot;/_astro/02.u1MOB36z_Z1NPOGn.webp 640w, /_astro/02.u1MOB36z_Z1ETTve.webp 750w, /_astro/02.u1MOB36z_WpAD1.webp 828w, /_astro/02.u1MOB36z_Z1COu6a.webp 1080w, /_astro/02.u1MOB36z_1zWG0P.webp 1280w, /_astro/02.u1MOB36z_Z26Di56.webp 1668w, /_astro/02.u1MOB36z_ZvrvHk.webp 2048w, /_astro/02.u1MOB36z_2t3k4Y.webp 2368w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、仕様っぽいから仕様がないねえ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;上手く避けよう・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GCP】GitHub Actionsからキーなしで認証するための設定</title><link>https://endorphinbath.com/posts/gcp-github-actions-auth-nokeys/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gcp-github-actions-auth-nokeys/</guid><description>Google Cloud Platformに認証するときのIAM設定をシェル上から行い、GitHub Actionsで認証を行う作業を掲載します。この手順を踏むことで、IAMを管理しやすくなるかと思います。</description><pubDate>Tue, 11 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;GitHub ActionsからGoogle Cloud Platformに接続するための認証が面倒で、どこで躓いたが分からなくなってしまったのだよ・・・！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回は、GitHub ActionsでGCPを使うために行う初期設定を書いてみるかぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;押忍！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その1：Google Cloud PlatformでAPIを有効化する&lt;a href=&quot;#設定作業その1google-cloud-platformでapiを有効化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Google Cloud Platformでプロジェクトを作成します。（作成の過程は割愛します。）&lt;/p&gt;&lt;p&gt;そして、GCPのコンソール画面のサイドバーから以下の「ライブラリ」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;3009&quot; height=&quot;1564&quot; src=&quot;/_astro/01.d0lsdZDu_Z1yJMFl.webp&quot; srcset=&quot;/_astro/01.d0lsdZDu_Z1ST6sn.webp 640w, /_astro/01.d0lsdZDu_1weEEB.webp 750w, /_astro/01.d0lsdZDu_ZSKOk3.webp 828w, /_astro/01.d0lsdZDu_Z141aiJ.webp 1080w, /_astro/01.d0lsdZDu_1AOxvv.webp 1280w, /_astro/01.d0lsdZDu_202HOf.webp 1668w, /_astro/01.d0lsdZDu_Z1UwWek.webp 2048w, /_astro/01.d0lsdZDu_Z1r6Pks.webp 2560w, /_astro/01.d0lsdZDu_Z1yJMFl.webp 3009w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下の画面から、今回必要なAPIを有効化します。今回は２種類のAPIを有効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;2998&quot; height=&quot;1342&quot; src=&quot;/_astro/02.COgxTqcb_1va6gk.webp&quot; srcset=&quot;/_astro/02.COgxTqcb_PNpQh.webp 640w, /_astro/02.COgxTqcb_13zHm4.webp 750w, /_astro/02.COgxTqcb_ZDX1io.webp 828w, /_astro/02.COgxTqcb_RJEGG.webp 1080w, /_astro/02.COgxTqcb_2bmyUJ.webp 1280w, /_astro/02.COgxTqcb_Z1XPosC.webp 1668w, /_astro/02.COgxTqcb_M6qFo.webp 2048w, /_astro/02.COgxTqcb_JhGqv.webp 2560w, /_astro/02.COgxTqcb_1va6gk.webp 2998w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「Google Drive API」と「Google Sheets API」を有効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;2374&quot; height=&quot;1410&quot; src=&quot;/_astro/03.COxJgr2R_Z2exlJa.webp&quot; srcset=&quot;/_astro/03.COxJgr2R_1T7ITm.webp 640w, /_astro/03.COxJgr2R_24vxOO.webp 750w, /_astro/03.COxJgr2R_Z2djAlz.webp 828w, /_astro/03.COxJgr2R_Z2mJlFy.webp 1080w, /_astro/03.COxJgr2R_U9lHe.webp 1280w, /_astro/03.COxJgr2R_Z1LxNDe.webp 1668w, /_astro/03.COxJgr2R_Z20CqoP.webp 2048w, /_astro/03.COxJgr2R_Z2exlJa.webp 2374w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2170&quot; height=&quot;1464&quot; src=&quot;/_astro/04.7AJHDO05_Z7QjKx.webp&quot; srcset=&quot;/_astro/04.7AJHDO05_Z1mFbyI.webp 640w, /_astro/04.7AJHDO05_Z1egAhR.webp 750w, /_astro/04.7AJHDO05_ZriPA3.webp 828w, /_astro/04.7AJHDO05_25mQvx.webp 1080w, /_astro/04.7AJHDO05_Z1E1TSq.webp 1280w, /_astro/04.7AJHDO05_2w7ohK.webp 1668w, /_astro/04.7AJHDO05_15umh7.webp 2048w, /_astro/04.7AJHDO05_Z7QjKx.webp 2170w&quot; /&gt;&lt;/p&gt;&lt;p&gt;APIが追加できたかどうかを確認します。&lt;/p&gt;&lt;p&gt;今度は、「APIとサービス」の「ダッシュボード」をクリックして以下のような画面で確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;2988&quot; height=&quot;1464&quot; src=&quot;/_astro/05.wm1yyh9z_12i6M9.webp&quot; srcset=&quot;/_astro/05.wm1yyh9z_1RHYAH.webp 640w, /_astro/05.wm1yyh9z_Z2hLqhx.webp 750w, /_astro/05.wm1yyh9z_Z2aBNnr.webp 828w, /_astro/05.wm1yyh9z_Z1vnUT1.webp 1080w, /_astro/05.wm1yyh9z_1lLmJA.webp 1280w, /_astro/05.wm1yyh9z_jEcbl.webp 1668w, /_astro/05.wm1yyh9z_Z2wd0sD.webp 2048w, /_astro/05.wm1yyh9z_Z13IXGw.webp 2560w, /_astro/05.wm1yyh9z_12i6M9.webp 2988w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その2：Google Cloud Platformで認証情報を設定する&lt;a href=&quot;#設定作業その2google-cloud-platformで認証情報を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;外部アプリケーションからスプレッドシートにリクエストするためにクレデンシャル情報を設定します。&lt;/p&gt;&lt;p&gt;「認証情報を作成」をクリックして、「サービスアカウント」を選びます。
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1374&quot; src=&quot;/_astro/06.B24ZBVpx_Z1qb5nr.webp&quot; srcset=&quot;/_astro/06.B24ZBVpx_Z1xpRkO.webp 640w, /_astro/06.B24ZBVpx_1cnr59.webp 750w, /_astro/06.B24ZBVpx_23jD5b.webp 828w, /_astro/06.B24ZBVpx_Z2mVBwQ.webp 1080w, /_astro/06.B24ZBVpx_Z18qezA.webp 1280w, /_astro/06.B24ZBVpx_Z11Ipss.webp 1668w, /_astro/06.B24ZBVpx_ZT2r8A.webp 2048w, /_astro/06.B24ZBVpx_1pXykw.webp 2560w, /_astro/06.B24ZBVpx_Z1qb5nr.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サービスアカウントの設定画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2960&quot; height=&quot;1506&quot; src=&quot;/_astro/07.Ca_b_66j_2bgqfw.webp&quot; srcset=&quot;/_astro/07.Ca_b_66j_1JmQT5.webp 640w, /_astro/07.Ca_b_66j_Z2rHwH3.webp 750w, /_astro/07.Ca_b_66j_Z2kxTMW.webp 828w, /_astro/07.Ca_b_66j_SBGFa.webp 1080w, /_astro/07.Ca_b_66j_nljsX.webp 1280w, /_astro/07.Ca_b_66j_ZUbXbq.webp 1668w, /_astro/07.Ca_b_66j_mCy7v.webp 2048w, /_astro/07.Ca_b_66j_1My4Ro.webp 2560w, /_astro/07.Ca_b_66j_2bgqfw.webp 2960w&quot; /&gt;&lt;/p&gt;&lt;p&gt;編集者を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2720&quot; height=&quot;1488&quot; src=&quot;/_astro/08.4PqGVHFC_ZquJ7c.webp&quot; srcset=&quot;/_astro/08.4PqGVHFC_1FMppu.webp 640w, /_astro/08.4PqGVHFC_ZFzCC5.webp 750w, /_astro/08.4PqGVHFC_Z2oEGbP.webp 828w, /_astro/08.4PqGVHFC_28A0cc.webp 1080w, /_astro/08.4PqGVHFC_Zb5Rg9.webp 1280w, /_astro/08.4PqGVHFC_1Hyabm.webp 1668w, /_astro/08.4PqGVHFC_1Msax8.webp 2048w, /_astro/08.4PqGVHFC_184hKC.webp 2560w, /_astro/08.4PqGVHFC_ZquJ7c.webp 2720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここは省略します。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1498&quot; src=&quot;/_astro/09.D-KcCicK_ZraGQO.webp&quot; srcset=&quot;/_astro/09.D-KcCicK_cTjoD.webp 640w, /_astro/09.D-KcCicK_Z1r0XiJ.webp 750w, /_astro/09.D-KcCicK_Z1jQloD.webp 828w, /_astro/09.D-KcCicK_ZGRWRz.webp 1080w, /_astro/09.D-KcCicK_26aNuf.webp 1280w, /_astro/09.D-KcCicK_fLhCy.webp 1668w, /_astro/09.D-KcCicK_2lSaeV.webp 2048w, /_astro/09.D-KcCicK_Z1o30ls.webp 2560w, /_astro/09.D-KcCicK_ZraGQO.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、作成したサービスアカウントを確認して、キーの出力を行います・・・&lt;/p&gt;&lt;p&gt;と、思ったのですが、警告文に「代わりにWorkload Identity 連携を使用することをおすすめします。」と書いてありました。&lt;/p&gt;&lt;p&gt;確かに、キーはJSON形式で色々な情報が含まれています。&lt;/p&gt;&lt;p&gt;そんな大変な情報をいちいち出力するのはあまりよろしくない気がするので、予定変更で、Workload Identity 連携をしてみたいと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1502&quot; src=&quot;/_astro/10.maIbZoxX_1xPPOS.webp&quot; srcset=&quot;/_astro/10.maIbZoxX_10yIky.webp 640w, /_astro/10.maIbZoxX_ZDlymO.webp 750w, /_astro/10.maIbZoxX_ZwbVsI.webp 828w, /_astro/10.maIbZoxX_16GMdM.webp 1080w, /_astro/10.maIbZoxX_Z1aqzdk.webp 1280w, /_astro/10.maIbZoxX_24m2IU.webp 1668w, /_astro/10.maIbZoxX_ZTIdsD.webp 2048w, /_astro/10.maIbZoxX_pwJJT.webp 2560w, /_astro/10.maIbZoxX_1xPPOS.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その2改：Cloud SDKで認証情報を設定する&lt;a href=&quot;#設定作業その2改cloud-sdkで認証情報を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上述のとおり、JSONキーを取得する方法ではなく、Workload Identity連携で認証の設定をしたいと思います。&lt;/p&gt;&lt;p&gt;そして、その設定が結構込み入ったものになっていたので、後に設定変更しやすくするために、GCPのGUI上ではなく、Cloud SDK＋GitHub Actionsを利用した方法でやってみました。&lt;/p&gt;&lt;p&gt;このサイトを参考に行ってみました。&lt;/p&gt;&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/alpha/functions&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.gstatic.com/devrel-devsite/prod/v6ae673272608590539f8a06b3f3271c0f5688cde07499d1c9e644aeb66c8c060/clouddocs/images/favicons/onecloud/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Google Cloud Documentation&lt;/span&gt;&lt;/div&gt;&lt;div&gt;gcloud alpha functions | Google Cloud SDK | Google Cloud Documentation&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;docs.cloud.google.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://docs.cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://dev.classmethod.jp/articles/google-cloud-auth-with-workload-identity/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://dev.classmethod.jp/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;クラスメソッド発「やってみた」系技術メディア | DevelopersIO&lt;/span&gt;&lt;/div&gt;&lt;div&gt;サービスアカウントキーを用いずにGitHub ActionsからGoogle Cloudと認証する | DevelopersIO&lt;/div&gt;&lt;div&gt;Workload Identity連携を使って認証し、サービスアカウント情報をgcloudで取得するというワークフローを試してみます。&lt;/div&gt;&lt;div&gt;dev.classmethod.jp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://devio2023-media.developers.io/wp-content/uploads/2021/12/gcp-google-cloud-eyecatch-2021.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ちなみに、GUI上でWorkload Identity 連携を行う場合はこんな画面で行うみたいです。
&lt;img loading=&quot;lazy&quot; width=&quot;2736&quot; height=&quot;1496&quot; src=&quot;/_astro/11.YjFJNUBv_fYw5B.webp&quot; srcset=&quot;/_astro/11.YjFJNUBv_kW285.webp 640w, /_astro/11.YjFJNUBv_Z21q0Tu.webp 750w, /_astro/11.YjFJNUBv_1kG4kG.webp 828w, /_astro/11.YjFJNUBv_1e4jSX.webp 1080w, /_astro/11.YjFJNUBv_Z15Bxyn.webp 1280w, /_astro/11.YjFJNUBv_N2tS8.webp 1668w, /_astro/11.YjFJNUBv_RVueT.webp 2048w, /_astro/11.YjFJNUBv_dxBso.webp 2560w, /_astro/11.YjFJNUBv_fYw5B.webp 2736w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Cloud SDKを使う用にDocker Buildする&lt;a href=&quot;#cloud-sdkを使う用にdocker-buildする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DockerコンテナをBuildします。&lt;/p&gt;&lt;p&gt;&lt;code&gt;Dockerfile&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; ubuntu:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./ /usr/src/app&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# prepare setting up Cloud-SDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install apt-transport-https ca-certificates gnupg -y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; echo &lt;/span&gt;&lt;span&gt;&quot;deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main&quot;&lt;/span&gt;&lt;span&gt; | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install -y curl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt install -y python3 python3-pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# setup Cloud-SDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apt update &amp;amp;&amp;amp; apt install google-cloud-sdk -y&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Bashとかコマンドプロンプト:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cloudsdk-container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業（Cloud-SDK側）&lt;a href=&quot;#設定作業cloud-sdk側&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Buildした後は、&lt;a href=&quot;https://github.com/landmaster135/dockerfiles/tree/main/20220220_build_cloudsdk_in_ubuntu&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;にも掲載していますが、結構長い作業が待っています・・・。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. Dockerコンテナをrunさせます。&lt;a href=&quot;#1-dockerコンテナをrunさせます&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Bashとかコマンドプロンプト:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-it&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-running-container&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-cloudsdk-container&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-1. Cloud-SDKが入っているどうかを確認。&lt;a href=&quot;#1-1-cloud-sdkが入っているどうかを確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1-2. Cloud-SDKをinitialize&lt;a href=&quot;#1-2-cloud-sdkをinitialize&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-1. 環境変数を宣言（その1）&lt;a href=&quot;#2-1-環境変数を宣言その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;AAAAAAAAAAAAAA&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;BBBBBBBBBBBBB&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISPLAY_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;CCCCCCCCCCCC&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;DDDDDDDDDDDDDDDDDD&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-2. GitHub Actions上で利用するサービスアカウントを作成&lt;a href=&quot;#2-2-github-actions上で利用するサービスアカウントを作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--display-name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DISPLAY_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-3. サービスアカウントに権限を付与する&lt;a href=&quot;#2-3-サービスアカウントに権限を付与する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;projects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-iam-policy-binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--role=&lt;/span&gt;&lt;span&gt;&quot;roles/editor&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--member=&lt;/span&gt;&lt;span&gt;&quot;serviceAccount:&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.iam.gserviceaccount.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2-4. IAM Service Account Credentials APIを有効化する。&lt;a href=&quot;#2-4-iam-service-account-credentials-apiを有効化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;サービスアカウントの一時的な認証情報を作成できるようにするために、IAM Service Account Credentials APIを有効化する。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iamcredentials.googleapis.com&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3-1. 環境変数を宣言（その2）&lt;a href=&quot;#3-1-環境変数を宣言その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POOL_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;EEEEEEEEEEEEE&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISPLAY_POOL_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;FFFFFFFFFFFFFF&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POOL_DESCRIPTION&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;GGGGGGGGGGGGGGGGGGGGG&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3-2. Workload Identityプールを作成する&lt;a href=&quot;#3-2-workload-identityプールを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Workload Identityプールは外部IDとGoogle Cloudとの紐付けを設定したWorkload Identityプロバイダをグループ化し管理するために、Workload Identityプールを作成する。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-vgcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workload-identity-pools&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;POOL_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;global&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--display-name=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;DISPLAY_POOL_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--description=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;POOL_DESCRIPTION&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3-3. Workload IdentityプールのIDを取得して、環境変数に代入する&lt;a href=&quot;#3-3-workload-identityプールのidを取得して環境変数に代入する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-vexport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WORKLOAD_IDENTITY_POOL_ID=`&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; iam workload-identity-pools describe &quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;POOL_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;global&quot; &lt;/span&gt;&lt;span&gt;--format=&lt;/span&gt;&lt;span&gt;&quot;value(name)&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-1. 環境変数を宣言（その3）&lt;a href=&quot;#4-1-環境変数を宣言その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HHHHHHHHHHHHHHHHHH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISPLAY_PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;IIIIIIIIIIIIIIIII&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4-2. Workload Identityプロバイダを作成する&lt;a href=&quot;#4-2-workload-identityプロバイダを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;HHHHHHHHHHHHHHHHHH&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DISPLAY_PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;IIIIIIIIIIIIIIIII&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-1. 環境変数を宣言（その4）&lt;a href=&quot;#5-1-環境変数を宣言その4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPO&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;JJJJJJJ/KKKKKKKKKKK&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-2. 環境変数のREPOにGitHub Actionsを動かすリポジトリを設定し、IAMポリシーバインディングを作成する&lt;a href=&quot;#5-2-環境変数のrepoにgithub-actionsを動かすリポジトリを設定しiamポリシーバインディングを作成する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iam&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service-accounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add-iam-policy-binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.iam.gserviceaccount.com&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--role=&lt;/span&gt;&lt;span&gt;&quot;roles/iam.workloadIdentityUser&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--member=&lt;/span&gt;&lt;span&gt;&quot;principalSet://iam.googleapis.com/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;WORKLOAD_IDENTITY_POOL_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/attribute.repository/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;REPO&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;とりあえず設定できているかどうかを確認&lt;a href=&quot;#とりあえず設定できているかどうかを確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちなみに、GCPのGUIコンソールで確認すると、サービスアカウントの画面でこんな感じになっているかと思います。&lt;/p&gt;&lt;p&gt;この時点では、キーIDはまだ無いかと思います。今回は設定しません。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1508&quot; src=&quot;/_astro/13.BoMmK8XN_2pOyjN.webp&quot; srcset=&quot;/_astro/13.BoMmK8XN_2ffuAs.webp 640w, /_astro/13.BoMmK8XN_Z1Un0gm.webp 750w, /_astro/13.BoMmK8XN_Z1Ndnmg.webp 828w, /_astro/13.BoMmK8XN_1ons1P.webp 1080w, /_astro/13.BoMmK8XN_ZRJTph.webp 1280w, /_astro/13.BoMmK8XN_rWEJt.webp 1668w, /_astro/13.BoMmK8XN_Z2w7As5.webp 2048w, /_astro/13.BoMmK8XN_z0m0n.webp 2560w, /_astro/13.BoMmK8XN_2pOyjN.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Workload Identity連携の画面では、こんな感じになっているかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;3002&quot; height=&quot;1500&quot; src=&quot;/_astro/14.DBRa8iML_z43pc.webp&quot; srcset=&quot;/_astro/14.DBRa8iML_i5lfK.webp 640w, /_astro/14.DBRa8iML_1cDYcR.webp 750w, /_astro/14.DBRa8iML_1jNB6X.webp 828w, /_astro/14.DBRa8iML_ZDqlVn.webp 1080w, /_astro/14.DBRa8iML_29Cpqr.webp 1280w, /_astro/14.DBRa8iML_Z1vJBVW.webp 1668w, /_astro/14.DBRa8iML_zmfEq.webp 2048w, /_astro/14.DBRa8iML_ZEw6Eo.webp 2560w, /_astro/14.DBRa8iML_z43pc.webp 3002w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-3. Workload Identityプロバイダの名前を取得する。&lt;a href=&quot;#5-3-workload-identityプロバイダの名前を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FULL_PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; iam workload-identity-pools providers describe &quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROVIDER_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;global&quot; &lt;/span&gt;&lt;span&gt;--workload-identity-pool=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;POOL_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--format=&lt;/span&gt;&lt;span&gt;&quot;value(name)&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5-4. プロパイダの名前をメモする。&lt;a href=&quot;#5-4-プロパイダの名前をメモする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FULL_PROVIDER_NAME&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; iam workload-identity-pools providers describe &quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROVIDER_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--project=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--location=&lt;/span&gt;&lt;span&gt;&quot;global&quot; &lt;/span&gt;&lt;span&gt;--workload-identity-pool=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;POOL_NAME&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot; &lt;/span&gt;&lt;span&gt;--format=&lt;/span&gt;&lt;span&gt;&quot;value(name)&quot;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6-1. Cloud-SDKからログアウトする。&lt;a href=&quot;#6-1-cloud-sdkからログアウトする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一応、コンテナから接続しているアカウントをログアウトさせます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;gcloud&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;revoke&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業（GitHub Actions側）&lt;a href=&quot;#設定作業github-actions側&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Workflowファイルの中身&lt;a href=&quot;#workflowファイルの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;中身はこんなふうになっています。&lt;/p&gt;&lt;p&gt;一応、yamlファイルの中の環境変数と、先程Cloud-SDKで宣言した環境変数の名前は同じですので、途中でこんがらがったら確認してみてください。
&lt;code&gt;.github/workflows/gcloudAuth.yaml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Auth GCP and Describe service account&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PROJECT_ID&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;プロジェクトID&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;サービスアカウントの名前&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;FULL_PROVIDER_NAME&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;projectsから始まるプロパイダの名前&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateFeed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;permissions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;contents&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;read&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;id-token&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;write&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Auth GCP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;google-cloud-auth&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;google-github-actions/auth@v0.4.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;create_credentials_file&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;workload_identity_provider&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.FULL_PROVIDER_NAME }}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;service_account&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${{ env.SERVICE_ACCOUNT_NAME }}@${{ env.PROJECT_ID }}.iam.gserviceaccount.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Set up Cloud-SDK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;google-github-actions/setup-gcloud@v0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Describe my-service-account&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;gcloud iam service-accounts describe ${{ env.SERVICE_ACCOUNT_NAME }}@${{ env.PROJECT_ID }}.iam.gserviceaccount.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;動作確認&lt;a href=&quot;#動作確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実際に、GitHub Actionsを実行してみてちゃんと出来ているかどうかを確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;2588&quot; height=&quot;824&quot; src=&quot;/_astro/15.CRGMPs1n_1IatsW.webp&quot; srcset=&quot;/_astro/15.CRGMPs1n_Z1tBXji.webp 640w, /_astro/15.CRGMPs1n_ZIFmff.webp 750w, /_astro/15.CRGMPs1n_xz8G9.webp 828w, /_astro/15.CRGMPs1n_25y5c1.webp 1080w, /_astro/15.CRGMPs1n_IVLoC.webp 1280w, /_astro/15.CRGMPs1n_1chpWi.webp 1668w, /_astro/15.CRGMPs1n_QMxuX.webp 2048w, /_astro/15.CRGMPs1n_1FtSHm.webp 2560w, /_astro/15.CRGMPs1n_1IatsW.webp 2588w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふい〜、何とか設定できたなあ〜〜&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今まで行った設定作業の中で、かなり長い方だったな・・・まあ、再現性は高いと思うけど。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>PCブラウザ上のYouTubeで再生している曲をLast.fmでscrobbleしようと思ったけど、10分でやめた話</title><link>https://endorphinbath.com/posts/youtube-lastfm-quit-scrobbling/</link><guid isPermaLink="true">https://endorphinbath.com/posts/youtube-lastfm-quit-scrobbling/</guid><description>MacbookでChrome上でYouTubeで再生している曲をスクロブルしようとしましたが、すぐにやめてしまった話になります。やめた理由など参考にしてみてください。</description><pubDate>Mon, 10 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーし、AndroidでLast.fmのscrobble設定ができたから、PCでもやったるぜい！（Androidで設定した記事はこっちね！）&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Androidで設定した記事はこっちね！&lt;a href=&quot;#androidで設定した記事はこっちね&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;a href=&quot;https://www.endorphinbath.com/android-lastfm-pulsar-music/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Android】Pulsarで再生している曲をLast.fmでscrobbleする&lt;/div&gt;&lt;div&gt;Androidの音楽再生アプリである「Pulsar」からLast.fmでスクロブルしてみました。思ったより簡単に設定できたので、設定したい方は参考にしてみてください。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/02/20220108_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;行った設定&lt;a href=&quot;#行った設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の作業は、PCはMacbook Proで、ブラウザはGoogle Chromeで行いました。&lt;/p&gt;&lt;p&gt;まず、この&lt;a href=&quot;https://chrome.google.com/webstore/detail/lastfm-scrobbler-for-yout/kjhnjfldmodoikafpfhfehngokaiegok&quot; target=&quot;_blank&quot;&gt;ウェブストアのページ&lt;/a&gt;に遷移して、拡張機能をChromeにインストールしました。
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1612&quot; src=&quot;/_astro/01.BESS-xSx_3LJw4.webp&quot; srcset=&quot;/_astro/01.BESS-xSx_Hwv12.webp 640w, /_astro/01.BESS-xSx_SjyRd.webp 750w, /_astro/01.BESS-xSx_ZOCoHX.webp 828w, /_astro/01.BESS-xSx_T2LYe.webp 1080w, /_astro/01.BESS-xSx_brNWF.webp 1280w, /_astro/01.BESS-xSx_ZhHSiO.webp 1668w, /_astro/01.BESS-xSx_Z1TzkUb.webp 2048w, /_astro/01.BESS-xSx_Z2mDCRk.webp 2560w, /_astro/01.BESS-xSx_3LJw4.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インストールが終わると、以下のようなページに飛びました。右上を見てみると、Chromeの他にも、EdgeとFirefoxでも利用できるようですね。&lt;/p&gt;&lt;p&gt;このページで設定することはないので、拡張機能のオプションを設定します。Chromeの拡張機能の管理ページに飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;3018&quot; height=&quot;1600&quot; src=&quot;/_astro/02.DFXnjaAW_ZOuxnG.webp&quot; srcset=&quot;/_astro/02.DFXnjaAW_Z1hPntd.webp 640w, /_astro/02.DFXnjaAW_28aiFc.webp 750w, /_astro/02.DFXnjaAW_2fbPAI.webp 828w, /_astro/02.DFXnjaAW_ZVgsj3.webp 1080w, /_astro/02.DFXnjaAW_1EsIep.webp 1280w, /_astro/02.DFXnjaAW_1foxeH.webp 1668w, /_astro/02.DFXnjaAW_Ziln5R.webp 2048w, /_astro/02.DFXnjaAW_2QFfq.webp 2560w, /_astro/02.DFXnjaAW_ZOuxnG.webp 3018w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Chromeの拡張機能の管理ページで、以下の設定ポップアップを開きます。&lt;/p&gt;&lt;p&gt;「Música, Music, Entertainment」はデフォルトで設定されています。もしかしたら、「音楽」は追加する必要がないかもしれません。&lt;/p&gt;&lt;p&gt;設定したら、Saveします。
&lt;img loading=&quot;lazy&quot; width=&quot;3004&quot; height=&quot;1580&quot; src=&quot;/_astro/03.DfjORW05_Z1ArAtk.webp&quot; srcset=&quot;/_astro/03.DfjORW05_Z2knL0z.webp 640w, /_astro/03.DfjORW05_15K07p.webp 750w, /_astro/03.DfjORW05_1cLx2V.webp 828w, /_astro/03.DfjORW05_Z1TKcxb.webp 1080w, /_astro/03.DfjORW05_TGfp.webp 1280w, /_astro/03.DfjORW05_l1khm.webp 1668w, /_astro/03.DfjORW05_Z18C3Lq.webp 2048w, /_astro/03.DfjORW05_ZIit9l.webp 2560w, /_astro/03.DfjORW05_Z1ArAtk.webp 3004w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これで設定は完了です。&lt;/p&gt;&lt;p&gt;scrobbleの条件に合致したYouTubeのページを表示すると、拡張機能にLast.fmアカウントでログインするページが自動で開かれるので、そこでログインしたらscrobbleが行われます。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定後の挙動&lt;a href=&quot;#設定後の挙動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、設定を完了させてscrobbleさせた後のLast.fmの画面になります。&lt;/p&gt;&lt;p&gt;これを見ると、YouTubeの動画の情報が以下のようにLast.fmに記録されてしまいます。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;YouTube動画のタイトル → 曲名&lt;/li&gt;
&lt;li&gt;YouTube動画のチャンネル名 → アーティスト名&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1586&quot; src=&quot;/_astro/04.JJmGU95v_16COfy.webp&quot; srcset=&quot;/_astro/04.JJmGU95v_1cotyt.webp 640w, /_astro/04.JJmGU95v_25n8MH.webp 750w, /_astro/04.JJmGU95v_2coFIe.webp 828w, /_astro/04.JJmGU95v_WzF4I.webp 1080w, /_astro/04.JJmGU95v_j6ejW.webp 1280w, /_astro/04.JJmGU95v_DcRlT.webp 1668w, /_astro/04.JJmGU95v_ZPqvGS.webp 2048w, /_astro/04.JJmGU95v_Zq6V4N.webp 2560w, /_astro/04.JJmGU95v_16COfy.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;微妙・・・&lt;a href=&quot;#微妙&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;う〜ん、何だか、YouTubeとその他のサービスで同じ曲を聞いても、アーティスト名がバラついてしまうの微妙・・・。曲名も違うし・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;YouTube Musicではどうだろうか？（拡張機能）&lt;a href=&quot;#youtube-musicではどうだろうか拡張機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は、YouTubeの親戚であるYouTube Musicさんに、曲名とアーティスト名がちゃんとしたトラックをアップロードしているので、その再生でscrobble出来ないかどうかをダメ元で試してみました。&lt;/p&gt;&lt;p&gt;一応、ドメインの条件は満たしています・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1422&quot; height=&quot;588&quot; src=&quot;/_astro/05.Dx4oGtHW_Z1Vf4kI.webp&quot; srcset=&quot;/_astro/05.Dx4oGtHW_1lF3FJ.webp 640w, /_astro/05.Dx4oGtHW_c2wcV.webp 750w, /_astro/05.Dx4oGtHW_Z2wRsYt.webp 828w, /_astro/05.Dx4oGtHW_jKRsL.webp 1080w, /_astro/05.Dx4oGtHW_Z15NRBP.webp 1280w, /_astro/05.Dx4oGtHW_Z1Vf4kI.webp 1422w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな感じで、キリトを30秒間再生してみます。
&lt;img loading=&quot;lazy&quot; width=&quot;3002&quot; height=&quot;1588&quot; src=&quot;/_astro/06.Bg7SseIM_ai9kx.webp&quot; srcset=&quot;/_astro/06.Bg7SseIM_ZsqUHN.webp 640w, /_astro/06.Bg7SseIM_pwIvq.webp 750w, /_astro/06.Bg7SseIM_wygqW.webp 828w, /_astro/06.Bg7SseIM_ZFIxxe.webp 1080w, /_astro/06.Bg7SseIM_1U0D0e.webp 1280w, /_astro/06.Bg7SseIM_1uVs0w.webp 1668w, /_astro/06.Bg7SseIM_2wkRdj.webp 2048w, /_astro/06.Bg7SseIM_Z2cDdfk.webp 2560w, /_astro/06.Bg7SseIM_ai9kx.webp 3002w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その後、Last.fmを改めて確認したところ、scrobbleされていませんでした・・・残念。
&lt;img loading=&quot;lazy&quot; width=&quot;3014&quot; height=&quot;1616&quot; src=&quot;/_astro/07.2jXJjmcF_Z1xkdnE.webp&quot; srcset=&quot;/_astro/07.2jXJjmcF_AvtK.webp 640w, /_astro/07.2jXJjmcF_bnzkV.webp 750w, /_astro/07.2jXJjmcF_10sCEV.webp 828w, /_astro/07.2jXJjmcF_1UUp7T.webp 1080w, /_astro/07.2jXJjmcF_Z1hHmae.webp 1280w, /_astro/07.2jXJjmcF_J9IOQ.webp 1668w, /_astro/07.2jXJjmcF_ZRGHLv.webp 2048w, /_astro/07.2jXJjmcF_1agMwU.webp 2560w, /_astro/07.2jXJjmcF_Z1xkdnE.webp 3014w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;YouTube Musicではどうだろうか？（YouTube Music自体の機能）&lt;a href=&quot;#youtube-musicではどうだろうかyoutube-music自体の機能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、YouTube Music自体の機能で出来ないかどうかを確認してみました。&lt;/p&gt;&lt;p&gt;YouTube Musicの設定画面を開いて全ての設定項目を確認しましたが、何だかLast.fmへの接続機能は無さそうです・・・。なので、YouTube Musicでもscrobble出来なさそー。
&lt;img loading=&quot;lazy&quot; width=&quot;1990&quot; height=&quot;1286&quot; src=&quot;/_astro/08.BKgjJ-ja_SljBm.webp&quot; srcset=&quot;/_astro/08.BKgjJ-ja_6JYUH.webp 640w, /_astro/08.BKgjJ-ja_Wtgyb.webp 750w, /_astro/08.BKgjJ-ja_12vzP6.webp 828w, /_astro/08.BKgjJ-ja_2rDXb9.webp 1080w, /_astro/08.BKgjJ-ja_Z1WliNA.webp 1280w, /_astro/08.BKgjJ-ja_ZeGhRK.webp 1668w, /_astro/08.BKgjJ-ja_SljBm.webp 1990w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Last.fmのサイトを確認すると、Google Play Musicでは出来たっぽいです・・・。&lt;/p&gt;&lt;p&gt;何だか、YouTube Musicになって、色々と機能が劣化して削がれた印象です・・・。悲しい・・・。&lt;/p&gt;&lt;a href=&quot;https://support.last.fm/t/google-play-music-scrobbling-outdated/175&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex021/uploads/lastfm/optimized/2X/8/8d3f02210437592eb863d7fc7f7029a072390f6c_2_32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Last.fm Support Community&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Google Play Music Scrobbling (outdated)&lt;/div&gt;&lt;div&gt;Scrobbling isn&apos;t officially supported by Google Play Music at the moment, however there are several excellent third party scrobblers you can try as well as our own Android app. Also note that the streaming service will soon be merged with YouTube Music, so methods for scrobbling them are relevant as well. Desktop (Windows / macOS / Linux) For Desktop users, we recommend the Google Play Music Desktop Player. To connect your Last.fm account, click on Desktop Settings -&amp;gt; LASTFM -&amp;gt; Log in to ...&lt;/div&gt;&lt;div&gt;support.last.fm&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://us1.discourse-cdn.com/flex021/uploads/lastfm/original/1X/0059e4c44046d066cbd7968e9d0b45bf8082c945.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;拡張機能の削除&lt;a href=&quot;#拡張機能の削除&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;結局出来なかったので、この拡張機能は設定10分後にオサラバしました・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2998&quot; height=&quot;1590&quot; src=&quot;/_astro/09.CO97PRDp_Z1JJoyp.webp&quot; srcset=&quot;/_astro/09.CO97PRDp_Z19Raun.webp 640w, /_astro/09.CO97PRDp_2g8vE2.webp 750w, /_astro/09.CO97PRDp_2na3zy.webp 828w, /_astro/09.CO97PRDp_Z1Xn0I4.webp 1080w, /_astro/09.CO97PRDp_CmaOo.webp 1280w, /_astro/09.CO97PRDp_Z2lQkHF.webp 1668w, /_astro/09.CO97PRDp_Z1krUuS.webp 2048w, /_astro/09.CO97PRDp_1vMV6Y.webp 2560w, /_astro/09.CO97PRDp_Z1JJoyp.webp 2998w&quot; /&gt;&lt;/p&gt;&lt;p&gt;拡張機能の削除と併せて、Spotifyでの連携も削除しておきましょう。一応、何かの拍子で重複scrobbleされてしまうのを防止するために。
&lt;img loading=&quot;lazy&quot; width=&quot;2540&quot; height=&quot;1468&quot; src=&quot;/_astro/10.DgxsehU0_ZXccgV.webp&quot; srcset=&quot;/_astro/10.DgxsehU0_1gvlY1.webp 640w, /_astro/10.DgxsehU0_1r2fS3.webp 750w, /_astro/10.DgxsehU0_2fQ9fT.webp 828w, /_astro/10.DgxsehU0_ZHr1bt.webp 1080w, /_astro/10.DgxsehU0_8vpcw.webp 1280w, /_astro/10.DgxsehU0_Z1BGlhU.webp 1668w, /_astro/10.DgxsehU0_Z6s04a.webp 2048w, /_astro/10.DgxsehU0_ZXccgV.webp 2540w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ〜、YouTubeでは上手く行かなかったあ〜・・・。でも、PCで音楽聞くことが多いから、Spotifyのプレミアム入ってみるかあ・・・？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】Google Spreadsheetを編集するために初期設定からのまとめ</title><link>https://endorphinbath.com/posts/python-gss-setting-to-edit/</link><guid isPermaLink="true">https://endorphinbath.com/posts/python-gss-setting-to-edit/</guid><description>PythonからGoogle Spreadsheetを編集するために行った認証の設定を掲載します。最終的には、gspreadというモジュールで編集できるようになります。</description><pubDate>Sun, 09 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;PythonでGoogleスプレッドシートを編集したいんだが、そのための認証が面倒で、どこで躓いたが分からなくなってしまった～！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、今回はPythonでスプレッドシートを使うために、Google Cloud Platformで行う初期設定を書いてみるかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;押忍！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その1：Google Cloud PlatformでAPIを有効化する&lt;a href=&quot;#設定作業その1google-cloud-platformでapiを有効化する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Google Cloud Platformでプロジェクトを作成します。（作成の過程は割愛します。）&lt;/p&gt;&lt;p&gt;そして、GCPのコンソール画面のサイドバーから以下の「ライブラリ」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;3009&quot; height=&quot;1564&quot; src=&quot;/_astro/01.d0lsdZDu_Z1yJMFl.webp&quot; srcset=&quot;/_astro/01.d0lsdZDu_Z1ST6sn.webp 640w, /_astro/01.d0lsdZDu_1weEEB.webp 750w, /_astro/01.d0lsdZDu_ZSKOk3.webp 828w, /_astro/01.d0lsdZDu_Z141aiJ.webp 1080w, /_astro/01.d0lsdZDu_1AOxvv.webp 1280w, /_astro/01.d0lsdZDu_202HOf.webp 1668w, /_astro/01.d0lsdZDu_Z1UwWek.webp 2048w, /_astro/01.d0lsdZDu_Z1r6Pks.webp 2560w, /_astro/01.d0lsdZDu_Z1yJMFl.webp 3009w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下の画面から、今回必要なAPIを有効化します。今回は２種類のAPIを有効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;2998&quot; height=&quot;1342&quot; src=&quot;/_astro/02.COgxTqcb_1va6gk.webp&quot; srcset=&quot;/_astro/02.COgxTqcb_PNpQh.webp 640w, /_astro/02.COgxTqcb_13zHm4.webp 750w, /_astro/02.COgxTqcb_ZDX1io.webp 828w, /_astro/02.COgxTqcb_RJEGG.webp 1080w, /_astro/02.COgxTqcb_2bmyUJ.webp 1280w, /_astro/02.COgxTqcb_Z1XPosC.webp 1668w, /_astro/02.COgxTqcb_M6qFo.webp 2048w, /_astro/02.COgxTqcb_JhGqv.webp 2560w, /_astro/02.COgxTqcb_1va6gk.webp 2998w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「Google Drive API」と「Google Sheets API」を有効化します。
&lt;img loading=&quot;lazy&quot; width=&quot;2374&quot; height=&quot;1410&quot; src=&quot;/_astro/03.LcGcA-CV_Z1Pqx3O.webp&quot; srcset=&quot;/_astro/03.LcGcA-CV_1fRBuz.webp 640w, /_astro/03.LcGcA-CV_1qgqq2.webp 750w, /_astro/03.LcGcA-CV_2dCq3z.webp 828w, /_astro/03.LcGcA-CV_Z1XCx0d.webp 1080w, /_astro/03.LcGcA-CV_1jganz.webp 1280w, /_astro/03.LcGcA-CV_Z1nqYWS.webp 1668w, /_astro/03.LcGcA-CV_Z1BvBIu.webp 2048w, /_astro/03.LcGcA-CV_Z1Pqx3O.webp 2374w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2170&quot; height=&quot;1464&quot; src=&quot;/_astro/04.DxVp_n3H_cx3SP.webp&quot; srcset=&quot;/_astro/04.DxVp_n3H_164Ow4.webp 640w, /_astro/04.DxVp_n3H_1etpMU.webp 750w, /_astro/04.DxVp_n3H_21rauJ.webp 828w, /_astro/04.DxVp_n3H_2pLfaU.webp 1080w, /_astro/04.DxVp_n3H_Z1jCwe3.webp 1280w, /_astro/04.DxVp_n3H_Z2dFlQN.webp 1668w, /_astro/04.DxVp_n3H_1pSJVu.webp 2048w, /_astro/04.DxVp_n3H_cx3SP.webp 2170w&quot; /&gt;&lt;/p&gt;&lt;p&gt;APIが追加できたかどうかを確認します。&lt;/p&gt;&lt;p&gt;今度は、「APIとサービス」の「ダッシュボード」をクリックして以下のような画面で確認します。
&lt;img loading=&quot;lazy&quot; width=&quot;2988&quot; height=&quot;1464&quot; src=&quot;/_astro/05.wm1yyh9z_12i6M9.webp&quot; srcset=&quot;/_astro/05.wm1yyh9z_1RHYAH.webp 640w, /_astro/05.wm1yyh9z_Z2hLqhx.webp 750w, /_astro/05.wm1yyh9z_Z2aBNnr.webp 828w, /_astro/05.wm1yyh9z_Z1vnUT1.webp 1080w, /_astro/05.wm1yyh9z_1lLmJA.webp 1280w, /_astro/05.wm1yyh9z_jEcbl.webp 1668w, /_astro/05.wm1yyh9z_Z2wd0sD.webp 2048w, /_astro/05.wm1yyh9z_Z13IXGw.webp 2560w, /_astro/05.wm1yyh9z_12i6M9.webp 2988w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その2：Google Cloud Platformで認証情報を設定する&lt;a href=&quot;#設定作業その2google-cloud-platformで認証情報を設定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;外部アプリケーションからスプレッドシートにリクエストするためにクレデンシャル情報を設定します。&lt;/p&gt;&lt;p&gt;「認証情報を作成」をクリックして、「サービスアカウント」を選びます。
&lt;img loading=&quot;lazy&quot; width=&quot;3008&quot; height=&quot;1374&quot; src=&quot;/_astro/06.B24ZBVpx_Z1qb5nr.webp&quot; srcset=&quot;/_astro/06.B24ZBVpx_Z1xpRkO.webp 640w, /_astro/06.B24ZBVpx_1cnr59.webp 750w, /_astro/06.B24ZBVpx_23jD5b.webp 828w, /_astro/06.B24ZBVpx_Z2mVBwQ.webp 1080w, /_astro/06.B24ZBVpx_Z18qezA.webp 1280w, /_astro/06.B24ZBVpx_Z11Ipss.webp 1668w, /_astro/06.B24ZBVpx_ZT2r8A.webp 2048w, /_astro/06.B24ZBVpx_1pXykw.webp 2560w, /_astro/06.B24ZBVpx_Z1qb5nr.webp 3008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サービスアカウントの設定画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2960&quot; height=&quot;1506&quot; src=&quot;/_astro/07.Ca_b_66j_2bgqfw.webp&quot; srcset=&quot;/_astro/07.Ca_b_66j_1JmQT5.webp 640w, /_astro/07.Ca_b_66j_Z2rHwH3.webp 750w, /_astro/07.Ca_b_66j_Z2kxTMW.webp 828w, /_astro/07.Ca_b_66j_SBGFa.webp 1080w, /_astro/07.Ca_b_66j_nljsX.webp 1280w, /_astro/07.Ca_b_66j_ZUbXbq.webp 1668w, /_astro/07.Ca_b_66j_mCy7v.webp 2048w, /_astro/07.Ca_b_66j_1My4Ro.webp 2560w, /_astro/07.Ca_b_66j_2bgqfw.webp 2960w&quot; /&gt;&lt;/p&gt;&lt;p&gt;編集者を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;2720&quot; height=&quot;1488&quot; src=&quot;/_astro/08.4PqGVHFC_ZquJ7c.webp&quot; srcset=&quot;/_astro/08.4PqGVHFC_1FMppu.webp 640w, /_astro/08.4PqGVHFC_ZFzCC5.webp 750w, /_astro/08.4PqGVHFC_Z2oEGbP.webp 828w, /_astro/08.4PqGVHFC_28A0cc.webp 1080w, /_astro/08.4PqGVHFC_Zb5Rg9.webp 1280w, /_astro/08.4PqGVHFC_1Hyabm.webp 1668w, /_astro/08.4PqGVHFC_1Msax8.webp 2048w, /_astro/08.4PqGVHFC_184hKC.webp 2560w, /_astro/08.4PqGVHFC_ZquJ7c.webp 2720w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここは省略します。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1498&quot; src=&quot;/_astro/09.D-KcCicK_ZraGQO.webp&quot; srcset=&quot;/_astro/09.D-KcCicK_cTjoD.webp 640w, /_astro/09.D-KcCicK_Z1r0XiJ.webp 750w, /_astro/09.D-KcCicK_Z1jQloD.webp 828w, /_astro/09.D-KcCicK_ZGRWRz.webp 1080w, /_astro/09.D-KcCicK_26aNuf.webp 1280w, /_astro/09.D-KcCicK_fLhCy.webp 1668w, /_astro/09.D-KcCicK_2lSaeV.webp 2048w, /_astro/09.D-KcCicK_Z1o30ls.webp 2560w, /_astro/09.D-KcCicK_ZraGQO.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、作成したサービスアカウントを確認して、キーの出力を行います・・・
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1502&quot; src=&quot;/_astro/10.maIbZoxX_1xPPOS.webp&quot; srcset=&quot;/_astro/10.maIbZoxX_10yIky.webp 640w, /_astro/10.maIbZoxX_ZDlymO.webp 750w, /_astro/10.maIbZoxX_ZwbVsI.webp 828w, /_astro/10.maIbZoxX_16GMdM.webp 1080w, /_astro/10.maIbZoxX_Z1aqzdk.webp 1280w, /_astro/10.maIbZoxX_24m2IU.webp 1668w, /_astro/10.maIbZoxX_ZTIdsD.webp 2048w, /_astro/10.maIbZoxX_pwJJT.webp 2560w, /_astro/10.maIbZoxX_1xPPOS.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「鍵を追加」→「新しい鍵を作成」の順番でクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2408&quot; height=&quot;1420&quot; src=&quot;/_astro/11.DXM6iNEE_1KIfah.webp&quot; srcset=&quot;/_astro/11.DXM6iNEE_WyX8.webp 640w, /_astro/11.DXM6iNEE_Z2n8wKT.webp 750w, /_astro/11.DXM6iNEE_Z1yjDo3.webp 828w, /_astro/11.DXM6iNEE_Z2nytd2.webp 1080w, /_astro/11.DXM6iNEE_Z1AHz5O.webp 1280w, /_astro/11.DXM6iNEE_PRUDr.webp 1668w, /_astro/11.DXM6iNEE_Z1SeunJ.webp 2048w, /_astro/11.DXM6iNEE_1KIfah.webp 2408w&quot; /&gt;&lt;/p&gt;&lt;p&gt;秘密鍵をJSONファイルとして作成します。「作成」をクリックする。
&lt;img loading=&quot;lazy&quot; width=&quot;1140&quot; height=&quot;726&quot; src=&quot;/_astro/12.C3BTbVAS_1OqufG.webp&quot; srcset=&quot;/_astro/12.C3BTbVAS_1u8FBa.webp 640w, /_astro/12.C3BTbVAS_1JtQH.webp 750w, /_astro/12.C3BTbVAS_1wt7Bv.webp 828w, /_astro/12.C3BTbVAS_ZMhy4j.webp 1080w, /_astro/12.C3BTbVAS_1OqufG.webp 1140w&quot; /&gt;&lt;/p&gt;&lt;p&gt;PCにJSONファイル形式のファイルが保存されます。
&lt;img loading=&quot;lazy&quot; width=&quot;3006&quot; height=&quot;1262&quot; src=&quot;/_astro/13.DqaEE4wi_vQDRk.webp&quot; srcset=&quot;/_astro/13.DqaEE4wi_2hrWxb.webp 640w, /_astro/13.DqaEE4wi_2uup07.webp 750w, /_astro/13.DqaEE4wi_Z1ICrPd.webp 828w, /_astro/13.DqaEE4wi_MQXiB.webp 1080w, /_astro/13.DqaEE4wi_sOVPj.webp 1280w, /_astro/13.DqaEE4wi_ZLG2CK.webp 1668w, /_astro/13.DqaEE4wi_ZteuJ5.webp 2048w, /_astro/13.DqaEE4wi_1lVyI4.webp 2560w, /_astro/13.DqaEE4wi_vQDRk.webp 3006w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;余談：Workload Identity 連携について&lt;a href=&quot;#余談workload-identity-連携について&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ちなみに、先程のサービスアカウントのキー出力の画面内の警告文に「代わりにWorkload Identity 連携を使用することをおすすめします。」と書いてありました。
&lt;img loading=&quot;lazy&quot; width=&quot;3010&quot; height=&quot;1502&quot; src=&quot;/_astro/10.maIbZoxX_1xPPOS.webp&quot; srcset=&quot;/_astro/10.maIbZoxX_10yIky.webp 640w, /_astro/10.maIbZoxX_ZDlymO.webp 750w, /_astro/10.maIbZoxX_ZwbVsI.webp 828w, /_astro/10.maIbZoxX_16GMdM.webp 1080w, /_astro/10.maIbZoxX_Z1aqzdk.webp 1280w, /_astro/10.maIbZoxX_24m2IU.webp 1668w, /_astro/10.maIbZoxX_ZTIdsD.webp 2048w, /_astro/10.maIbZoxX_pwJJT.webp 2560w, /_astro/10.maIbZoxX_1xPPOS.webp 3010w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちらの連携設定を行った記事は、こちらになっていますので、興味があればご参考ください。&lt;/p&gt;&lt;p&gt;今回の作業では必要ありません。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gcp-github-actions-auth-nokeys/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GCP】GitHub Actionsからキーなしで認証するための設定&lt;/div&gt;&lt;div&gt;Google Cloud Platformに認証するときのIAM設定をシェル上から行い、GitHub Actionsで認証を行う作業を掲載します。この手順を踏むことで、IAMを管理しやすくなるかと思います。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/02/20220111_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定作業その3：Googleスプレッドシートを編集するための設定&lt;a href=&quot;#設定作業その3googleスプレッドシートを編集するための設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;権限追加するシートの右上の「共有」ボタンをクリックする。
&lt;img loading=&quot;lazy&quot; width=&quot;2902&quot; height=&quot;1276&quot; src=&quot;/_astro/14.Dp2Ajkep_Z22bJtq.webp&quot; srcset=&quot;/_astro/14.Dp2Ajkep_12zYqj.webp 640w, /_astro/14.Dp2Ajkep_Z1hEJY5.webp 750w, /_astro/14.Dp2Ajkep_26qxTH.webp 828w, /_astro/14.Dp2Ajkep_Z2ubGOI.webp 1080w, /_astro/14.Dp2Ajkep_Z17sgjS.webp 1280w, /_astro/14.Dp2Ajkep_Z4g2lJ.webp 1668w, /_astro/14.Dp2Ajkep_fJvMu.webp 2048w, /_astro/14.Dp2Ajkep_11d7Q3.webp 2560w, /_astro/14.Dp2Ajkep_Z22bJtq.webp 2902w&quot; /&gt;&lt;/p&gt;&lt;p&gt;IAM設定で追加したサービスアカウントのプリンシパルをコピペします。&lt;/p&gt;&lt;p&gt;そして、そのユーザーを編集者権限にして、送信をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;1302&quot; height=&quot;886&quot; src=&quot;/_astro/15.BcZ5w_70_1TXJlJ.webp&quot; srcset=&quot;/_astro/15.BcZ5w_70_Z1NpPmT.webp 640w, /_astro/15.BcZ5w_70_8R4G1.webp 750w, /_astro/15.BcZ5w_70_1TYCIQ.webp 828w, /_astro/15.BcZ5w_70_Z2i0WSU.webp 1080w, /_astro/15.BcZ5w_70_1aF4UL.webp 1280w, /_astro/15.BcZ5w_70_1TXJlJ.webp 1302w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;確認作業：Pythonコードを実行してみる&lt;a href=&quot;#確認作業pythonコードを実行してみる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;設定作業を行った後は、こちらを試してみると動作確認できるかと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; gspread&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; oauth2client.service_account &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; ServiceAccountCredentials&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;credentialJsonFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gssId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;scope &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;https://spreadsheets.google.com/feeds&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&apos;https://www.googleapis.com/auth/drive&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;credentials &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ServiceAccountCredentials.&lt;/span&gt;&lt;span&gt;from_json_keyfile_name&lt;/span&gt;&lt;span&gt;(credentialJsonFileName, scope)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;gc &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gspread.&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;(credentials)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; gc.&lt;/span&gt;&lt;span&gt;open_by_key&lt;/span&gt;&lt;span&gt;(gssId).&lt;/span&gt;&lt;span&gt;worksheet&lt;/span&gt;&lt;span&gt;(sheetName)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; worksheet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;jsonKeyFileName &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;先ほどダウンロードしたjsonファイルのフルパス&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;gssId           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;共有設定したスプレッドシートのID&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;sheetName       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;共有設定したスプレッドシート内の編集したいシート名&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;worksheet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizeGSSToGetWorksheet&lt;/span&gt;&lt;span&gt;(jsonKeyFileName, gssId, sheetName)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cellList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; worksheet.&lt;/span&gt;&lt;span&gt;findall&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;検索値&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(cellList)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;gssIdは、URLで言うと、”&lt;a href=&quot;https://docs.google.com/spreadsheets/d/%EF%BC%9C%E3%81%93%E3%81%AE%E9%83%A8%E5%88%86%EF%BC%9E/edit#gid=0%E2%80%B3%E3%81%AE%E9%83%A8%E5%88%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82&quot; target=&quot;_blank&quot;&gt;https://docs.google.com/spreadsheets/d/＜この部分＞/edit#gid=0″の部分になります。&lt;/a&gt;&lt;/p&gt;&lt;p&gt;上述のプログラムを実行してみると、こんな感じの値が返ってくると思うので、スプレッドシートにアクセスできることが確認できると思います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&amp;lt;Cell R350C4 &apos;https://qiita.com/ny7760/items/9cdc3407dfda99c21ae1&apos;&amp;gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふい〜、何とか設定できたなあ〜！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Pythoから叩けるようになることで、スプレッドシートのデータをnumpyとmatplotlibと組み合わせられるようになりますねぇ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Android】Pulsarで再生している曲をLast.fmでscrobbleする</title><link>https://endorphinbath.com/posts/android-lastfm-pulsar-music/</link><guid isPermaLink="true">https://endorphinbath.com/posts/android-lastfm-pulsar-music/</guid><description>Androidの音楽再生アプリである「Pulsar」からLast.fmでスクロブルしてみました。思ったより簡単に設定できたので、設定したい方は参考にしてみてください。</description><pubDate>Sat, 08 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、今日はLast.fmにスマホで再生している曲をこんな感じに反映させんぞ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;こんな感じに反映させんぞ&lt;a href=&quot;#こんな感じに反映させんぞ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/01.DYGD2wtf_2dWAdj.webp&quot; srcset=&quot;/_astro/01.DYGD2wtf_B2Yhs.webp 640w, /_astro/01.DYGD2wtf_22GVQi.webp 750w, /_astro/01.DYGD2wtf_Z1uot7h.webp 828w, /_astro/01.DYGD2wtf_2dWAdj.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定&lt;a href=&quot;#設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、PulsarとLast.fmで行った設定を書いていきます。&lt;/p&gt;&lt;p&gt;行った端末は、Galaxy S10です。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Pulsarアプリの設定&lt;a href=&quot;#pulsarアプリの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、Pulsarのサイドバーから設定を選び、「Last.fm scrobbling」を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/02.DS--UNFD_Z1CDem9.webp&quot; srcset=&quot;/_astro/02.DS--UNFD_Z2iEh1e.webp 640w, /_astro/02.DS--UNFD_ZR0jro.webp 750w, /_astro/02.DS--UNFD_F5onX.webp 828w, /_astro/02.DS--UNFD_Z1CDem9.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/03.C8ly4wBi_Z1Sogdi.webp&quot; srcset=&quot;/_astro/03.C8ly4wBi_Z1u8jAb.webp 640w, /_astro/03.C8ly4wBi_Z3tm1l.webp 750w, /_astro/03.C8ly4wBi_1tBlO1.webp 828w, /_astro/03.C8ly4wBi_Z1Sogdi.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、以下のポップアップで「Last.fm」を選択してOKします。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/04.D-tnZW5y_Z1ql55h.webp&quot; srcset=&quot;/_astro/04.D-tnZW5y_18R8UK.webp 640w, /_astro/04.D-tnZW5y_Z2uF2jl.webp 750w, /_astro/04.D-tnZW5y_ZWzjsY.webp 828w, /_astro/04.D-tnZW5y_Z1ql55h.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Last.fmアプリの設定&lt;a href=&quot;#lastfmアプリの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、このLast.fmのアプリを入れて、ログインします。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/05.Du44rdva_2siMnL.webp&quot; srcset=&quot;/_astro/05.Du44rdva_Vw0f7.webp 640w, /_astro/05.Du44rdva_2naWNW.webp 750w, /_astro/05.Du44rdva_Z19Us9C.webp 828w, /_astro/05.Du44rdva_2siMnL.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ログインしたら、通知をONにします。一旦、ONにしないとscrobbleされません。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/06.u9yRBZDr_1aYQnI.webp&quot; srcset=&quot;/_astro/06.u9yRBZDr_IYvz9.webp 640w, /_astro/06.u9yRBZDr_2aDt8Y.webp 750w, /_astro/06.u9yRBZDr_Z1mrVOA.webp 828w, /_astro/06.u9yRBZDr_1aYQnI.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動作の確認&lt;a href=&quot;#動作の確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;上手くscrobblingされているとPulsarアプリでの再生中に、通知に「Now scrobbling」という文言が表示されて、Last.fmアプリではscrobble中の画面に切り替わります。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/07.CQUsHYex_tMQGn.webp&quot; srcset=&quot;/_astro/07.CQUsHYex_12Dgpc.webp 640w, /_astro/07.CQUsHYex_2tidY2.webp 750w, /_astro/07.CQUsHYex_Z13NbYx.webp 828w, /_astro/07.CQUsHYex_tMQGn.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/08.BPU8ouA__1Gndle.webp&quot; srcset=&quot;/_astro/08.BPU8ouA__Z1R5YNJ.webp 640w, /_astro/08.BPU8ouA__Zqr2eT.webp 750w, /_astro/08.BPU8ouA__16DFAs.webp 828w, /_astro/08.BPU8ouA__1Gndle.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/09.D_zTESM2_hOKtu.webp&quot; srcset=&quot;/_astro/09.D_zTESM2_12fHKq.webp 640w, /_astro/09.D_zTESM2_2sTFkg.webp 750w, /_astro/09.D_zTESM2_Z14bJDj.webp 828w, /_astro/09.D_zTESM2_hOKtu.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;scrobbleを中止すると、Last.fmアプリの方で、今までにscrobbleしたトラックを閲覧したり出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/01.DYGD2wtf_2dWAdj.webp&quot; srcset=&quot;/_astro/01.DYGD2wtf_B2Yhs.webp 640w, /_astro/01.DYGD2wtf_22GVQi.webp 750w, /_astro/01.DYGD2wtf_Z1uot7h.webp 828w, /_astro/01.DYGD2wtf_2dWAdj.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ブラウザでも反映できていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;3012&quot; height=&quot;1584&quot; src=&quot;/_astro/10.BZD3hqEE_ZraV5f.webp&quot; srcset=&quot;/_astro/10.BZD3hqEE_YcGKb.webp 640w, /_astro/10.BZD3hqEE_ZEPEUL.webp 750w, /_astro/10.BZD3hqEE_ZxO80f.webp 828w, /_astro/10.BZD3hqEE_ZEct9u.webp 1080w, /_astro/10.BZD3hqEE_1gspD6.webp 1280w, /_astro/10.BZD3hqEE_1Az3F3.webp 1668w, /_astro/10.BZD3hqEE_6UEBg.webp 2048w, /_astro/10.BZD3hqEE_wffel.webp 2560w, /_astro/10.BZD3hqEE_ZraV5f.webp 3012w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、補足になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;scrobble出来たら、通知はOFFにして大丈夫&lt;a href=&quot;#scrobble出来たら通知はoffにして大丈夫&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;scrobble出来てAndroid上の通知が鬱陶しかったら、通知は切ってもscrobble出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/11.10cQShXg_Z1Eumfa.webp&quot; srcset=&quot;/_astro/11.10cQShXg_Z2sIjw8.webp 640w, /_astro/11.10cQShXg_Z124lWi.webp 750w, /_astro/11.10cQShXg_v1lS4.webp 828w, /_astro/11.10cQShXg_Z1Eumfa.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Pulsar+ではなくPulsar無料版でもscrobbleが可能&lt;a href=&quot;#pulsarではなくpulsar無料版でもscrobbleが可能&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちなみにPulsar無料版でもscrobbleできるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/12.CAU5gaay_4di6X.webp&quot; srcset=&quot;/_astro/12.CAU5gaay_ZVfL93.webp 640w, /_astro/12.CAU5gaay_uobpM.webp 750w, /_astro/12.CAU5gaay_22tTg9.webp 828w, /_astro/12.CAU5gaay_4di6X.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーし、Last.fm上にscrobble出来たぜい。これで自分が今までに聞いた曲を可視化できるぜい。API使えば、Last.fm以外の場所にも表示できそうですなぁ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【VSCode】Pythonのimport文の順番が勝手に入れ替わらないようにする（editor.formatOnPasteを使用）</title><link>https://endorphinbath.com/posts/vscode-setting-python-format-false/</link><guid isPermaLink="true">https://endorphinbath.com/posts/vscode-setting-python-format-false/</guid><description>VSCodeでPythonを編集しているときに、from文やimport文の順番が勝手に入れ替わってしまったので、その事象が起きないように設定する方法を紹介します。Pythonだけに適用する方法を取っています。</description><pubDate>Fri, 07 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あーー！ なぜだああぁぁぁあああ！！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうしたんだ、急にがなり始めて。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;VSCodeでPythonを書いてたら、勝手にfrom文がフォーマットされてしまうのだよ・・・せっかく、`sys.path.append`したのに・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あららら。その場合は、settings.jsonを編集すると解消できるぞ。今回は、どのフィールドを編集すればよいかを紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おっ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;問題点&lt;a href=&quot;#問題点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、from文を以下のようにペーストした際に、from文の順番が前に移動してしまうためにソースにエラーが発生してしまいました。どうやら、ファイルを保存した際にも、この事象が発生するようです。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;153&quot; src=&quot;/_astro/02.DjESSlcP_22uGTY.webp&quot; srcset=&quot;/_astro/02.DjESSlcP_22uGTY.webp 360w&quot; /&gt;&lt;/p&gt;&lt;p&gt;せっかく、&lt;code&gt;sys.path.append&lt;/code&gt;したのに・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;446&quot; src=&quot;/_astro/01.CN_uPpEU_Z2vOs1f.webp&quot; srcset=&quot;/_astro/01.CN_uPpEU_Q6D3S.webp 640w, /_astro/01.CN_uPpEU_ZRxo02.webp 750w, /_astro/01.CN_uPpEU_1sIJBu.webp 828w, /_astro/01.CN_uPpEU_Z2vOs1f.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下で、僕がこの事象を解消した方法を紹介します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;解消法&lt;a href=&quot;#解消法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;&quot;editor.formatOnPaste&lt;/code&gt;“と&lt;code&gt;&quot;editor.formatOnSave&quot;&lt;/code&gt;のフィールドを黙らせると勝手に順番を入れ替わることはなくなりそうです。&lt;/p&gt;&lt;p&gt;解消前はこのように記述していますが・・・、&lt;/p&gt;&lt;p&gt;&lt;code&gt;settings.json&lt;/code&gt; (解消前):&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;[python]&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.tabSize&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;editor.formatOnPaste&quot;: false,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;editor.formatOnSave&quot;: false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;解消後のコードは以下のように記述しています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;settings.json&lt;/code&gt; (解消後):&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;[python]&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.tabSize&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;解消後の動きはこの様になっています。
&lt;img loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;153&quot; src=&quot;/_astro/03.Ef3E0OxP_ZhYXeS.webp&quot; srcset=&quot;/_astro/03.Ef3E0OxP_ZhYXeS.webp 360w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;補足&lt;a href=&quot;#補足&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここでも&lt;code&gt;&quot;editor.formatOnPaste&lt;/code&gt;“と&lt;code&gt;&quot;editor.formatOnSave&quot;&lt;/code&gt;のフィールドをいじれますが、Pythonだけにフォーマットを無効化したい場合は、&lt;code&gt;settings.json&lt;/code&gt;でないとおそらく編集できません。
&lt;img loading=&quot;lazy&quot; width=&quot;1212&quot; height=&quot;1108&quot; src=&quot;/_astro/04.DjCOZUDh_Jxzdo.webp&quot; srcset=&quot;/_astro/04.DjCOZUDh_HwAT4.webp 640w, /_astro/04.DjCOZUDh_JXwe6.webp 750w, /_astro/04.DjCOZUDh_Z1LfMEw.webp 828w, /_astro/04.DjCOZUDh_rKr12.webp 1080w, /_astro/04.DjCOZUDh_Jxzdo.webp 1212w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;は〜、よかった〜、一生 VSCodeが使えなくなるかと思った〜。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;`settings.json`で色々設定をいじれるから、VSCodeの挙動で何か困ったら、いじってみましょ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Markdown】mermaid.jsのコードを変えて描画の変化を観察してみた</title><link>https://endorphinbath.com/posts/mermaid-drawing-variation-by-code/</link><guid isPermaLink="true">https://endorphinbath.com/posts/mermaid-drawing-variation-by-code/</guid><description>Mermaidのコードの書き方によって、描画のレイアウトにどのような違いが出るのかを観察してみました。mermaidで図を描く際のコーディングの参考にしてみてください。</description><pubDate>Wed, 05 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Mermaidをどう書くとどういうレイアウトになるのかどうかを今回の記事では観察してみたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;かんさつかんさつぅ〜。目を皿にしてみました。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;元のソース&lt;a href=&quot;#元のソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回は、この記事で作成した概要図を作る際に使ったMermaidに関する記事になります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/nodejs-readme-display-feed/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Node.js】GitHub ActionsでREADME.mdに投稿した記事のリンクを表示する（FirebaseでCORS対応）&lt;/div&gt;&lt;div&gt;Zenn、Qiita、ブログ、noteに投稿した記事のURLをREADM.mdに掲載するアプリを作成しました。このアプリを参考にして自分のGitHubのプロフィールページをカッコよくしてみましょう！GitHub ActionsやFirebaseを題材にしています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20220102_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;今回試すソースは、こちらになります。その下に実際に描画されるものも貼っています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A --&amp;gt;|Step2. Update| B&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A --&amp;gt;|Step1. Install app: GET| C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|Step1. Install app: Response| A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|GET| D&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D --&amp;gt;|Response &amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;with feed|C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|GET| E&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E --&amp;gt;|Response &amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;with feed|C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|GET| F&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F --&amp;gt;|Response &amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;with feed|C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|GET| L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L --&amp;gt;|Response &amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;with feed|C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L --&amp;gt;|GET| M&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M --&amp;gt;|Response &amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;with feed|L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C --&amp;gt;|clone| I&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I --&amp;gt;|build &amp;amp;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt; copy source| J&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J --&amp;gt;|test source| I&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I --&amp;gt;|Request&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;to deploy|K&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I --&amp;gt;|push| C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K --&amp;gt;|deploy&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;functions| L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style D fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style E fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style F fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style K fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style L fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style M fill:#ffffff,color:#000000,stroke:#000000,stroke-width:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;linkStyle 0 stroke:#ee3,stroke-width:4px&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;linkStyle 1 stroke:#ee3,stroke-width:4px&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;linkStyle 2 stroke:#ee3,stroke-width:4px&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;style Overview fill:#3c4451&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1268&quot; src=&quot;/_astro/01.B4zIyhJz_WmTta.webp&quot; srcset=&quot;/_astro/01.B4zIyhJz_1I25AD.webp 640w, /_astro/01.B4zIyhJz_1IkiV.webp 750w, /_astro/01.B4zIyhJz_Z2qgnkk.webp 828w, /_astro/01.B4zIyhJz_ZOtkUe.webp 1080w, /_astro/01.B4zIyhJz_Z5aVOf.webp 1280w, /_astro/01.B4zIyhJz_2uQVFO.webp 1668w, /_astro/01.B4zIyhJz_WmTta.webp 2000w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h2&gt;試験1&lt;a href=&quot;#試験1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このソースは、元のソースから&lt;code&gt;dev environment&lt;/code&gt;と&lt;code&gt;Landmaster135&lt;/code&gt;を入れ替えました。この場合は、入れ替えた２つが上下で入れ替わりました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# ↑↓dev environmentとLandmaster135を入れ替えた。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1276&quot; src=&quot;/_astro/03.DEVyYjmE_Z2v9x91.webp&quot; srcset=&quot;/_astro/03.DEVyYjmE_4Ve5L.webp 640w, /_astro/03.DEVyYjmE_UEuIf.webp 750w, /_astro/03.DEVyYjmE_Z1wkcU1.webp 828w, /_astro/03.DEVyYjmE_ZTz6GB.webp 1080w, /_astro/03.DEVyYjmE_2kL5EW.webp 1280w, /_astro/03.DEVyYjmE_ZSxXEz.webp 1668w, /_astro/03.DEVyYjmE_Z2v9x91.webp 2000w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;試験2&lt;a href=&quot;#試験2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このソースは、元のソースから&lt;code&gt;feed-fetcher: app&lt;/code&gt;と&lt;code&gt;target sites&lt;/code&gt;を入れ替えました。この場合は、&lt;code&gt;target sites&lt;/code&gt;が下に移動しました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# ↑↓feed-fetcher: appとtarget sitesを入れ替えた。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1176&quot; src=&quot;/_astro/02.DYC9WTKe_Z1WTg5i.webp&quot; srcset=&quot;/_astro/02.DYC9WTKe_ZHftov.webp 640w, /_astro/02.DYC9WTKe_1XPxFo.webp 750w, /_astro/02.DYC9WTKe_Z2hwGKG.webp 828w, /_astro/02.DYC9WTKe_Z1VfgSK.webp 1080w, /_astro/02.DYC9WTKe_Z19omLx.webp 1280w, /_astro/02.DYC9WTKe_Z1cPFiQ.webp 1668w, /_astro/02.DYC9WTKe_Z1WTg5i.webp 2000w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;試験3&lt;a href=&quot;#試験3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このソースは、元のソースから&lt;code&gt;Firebase&lt;/code&gt;と&lt;code&gt;target sites&lt;/code&gt;を入れ替えました。表示に変化はありません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# ↑↓ Firebaseとtarget sitesを入れ替えた。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1734&quot; height=&quot;1196&quot; src=&quot;/_astro/04.DzEgKtyu_Z1Hrg9I.webp&quot; srcset=&quot;/_astro/04.DzEgKtyu_1VH7iR.webp 640w, /_astro/04.DzEgKtyu_24XCB9.webp 750w, /_astro/04.DzEgKtyu_Z2eHEfh.webp 828w, /_astro/04.DzEgKtyu_2hJ9w8.webp 1080w, /_astro/04.DzEgKtyu_YgE6W.webp 1280w, /_astro/04.DzEgKtyu_1HRKax.webp 1668w, /_astro/04.DzEgKtyu_Z1Hrg9I.webp 1734w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;試験4&lt;a href=&quot;#試験4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このソースは、元のソースから&lt;code&gt;target sites&lt;/code&gt;を一番上に持ってきました。これも描画内容は変わりません。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1734&quot; height=&quot;1200&quot; src=&quot;/_astro/05.C9Cepk6P_1b5N49.webp&quot; srcset=&quot;/_astro/05.C9Cepk6P_1rYR01.webp 640w, /_astro/05.C9Cepk6P_1Agnii.webp 750w, /_astro/05.C9Cepk6P_2lLefN.webp 828w, /_astro/05.C9Cepk6P_2rlNov.webp 1080w, /_astro/05.C9Cepk6P_Z1qg1y2.webp 1280w, /_astro/05.C9Cepk6P_1NnRL8.webp 1668w, /_astro/05.C9Cepk6P_1b5N49.webp 1734w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;試験5&lt;a href=&quot;#試験5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このソースは、元のソースからコーディングするsubgraphを逆順にしたものです。&lt;code&gt;Landmaster135&lt;/code&gt;が最下段に移動しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph feed-fetcher: app;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph target sites;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;E(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/qiita.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Qiita)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;F(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/wordpress.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;WordPress)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;M(far:fa-sticky-note&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;note)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Firebase;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;K[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;L(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph dev environment;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;I[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;J[fab:fa-docker Docker &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Landmaster135;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A[fab:fa-github GitHub Actions&amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B(README.md)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1718&quot; height=&quot;1108&quot; src=&quot;/_astro/06.CtRTQL7C_2TScu.webp&quot; srcset=&quot;/_astro/06.CtRTQL7C_27YbFx.webp 640w, /_astro/06.CtRTQL7C_Z26tFuU.webp 750w, /_astro/06.CtRTQL7C_Z21rme0.webp 828w, /_astro/06.CtRTQL7C_Z11HVa5.webp 1080w, /_astro/06.CtRTQL7C_Zlw4kS.webp 1280w, /_astro/06.CtRTQL7C_Z18TQFC.webp 1668w, /_astro/06.CtRTQL7C_2TScu.webp 1718w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;おさらい（描画ロジックの予測）&lt;a href=&quot;#おさらい描画ロジックの予測&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;ここまで観察してみて、&lt;code&gt;graph LR;&lt;/code&gt;を描画する際の描画ロジックが以下のようになっていると予測しています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;上に書かれている&lt;code&gt;subgraph&lt;/code&gt;は、下に書かれている&lt;code&gt;subgraph&lt;/code&gt;の上に描画される。→ コード順のロジック&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subgraph&lt;/code&gt; A、&lt;code&gt;subgraph&lt;/code&gt; B、&lt;code&gt;subgraph&lt;/code&gt; Cと&lt;code&gt;subgraph&lt;/code&gt; Dがある場合、BがAより下でも、それらの上に描画されているDとCについて、DがCより下であり、BがCのみ結合し、AがCとDに結合している場合、BはAよりも上に描画される。→ 結合してるgraphのコード順ロジック&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;結合してるgraphのコード順ロジックは、図示するとこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C1[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C2(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph D;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D1[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph A;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A2[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph B;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B1(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1 --&amp;gt; C1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B1 --&amp;gt; C1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1 --&amp;gt; D1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;1144&quot; src=&quot;/_astro/07.r9KBUs07_Zmdaaq.webp&quot; srcset=&quot;/_astro/07.r9KBUs07_mqgIG.webp 640w, /_astro/07.r9KBUs07_PjxBP.webp 750w, /_astro/07.r9KBUs07_2G132.webp 828w, /_astro/07.r9KBUs07_Zmdaaq.webp 962w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、以下のように書き換えると、描画が結合してるgraphのコード順ロジック」と違います。どうやら、結合する子要素の順番もロジックに入るようです。→ 子要素のコード順のロジック&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;graph LR;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph Overview&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Overview&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C1[&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/firebase.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Firebase-tools]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;C2(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/googlecloud.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;cloud functions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph D;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;D1[fa:fa-laptop MacBook &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph A;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A2[fab:fa-node feed-fetch &amp;amp;nbsp]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subgraph B;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B1(&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;https://simpleicons.org/icons/zenn.svg&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;20&apos;&lt;/span&gt;&lt;span&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span&gt;br&lt;/span&gt;&lt;span&gt;&amp;gt;Zenn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1 --&amp;gt; C1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;B1 --&amp;gt; C2 // ここをC1→C2に書き換えた。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;A1 --&amp;gt; D1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 略...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;902&quot; height=&quot;1026&quot; src=&quot;/_astro/08.DpqHFZyn_2r7wJw.webp&quot; srcset=&quot;/_astro/08.DpqHFZyn_Z23X0eE.webp 640w, /_astro/08.DpqHFZyn_1Q4hcb.webp 750w, /_astro/08.DpqHFZyn_Z1IEnO6.webp 828w, /_astro/08.DpqHFZyn_2r7wJw.webp 902w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ある程度、挙動は掴めたかな？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、graph LR;の挙動は大体。目を皿にしてみました。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【Node.js】Markdown内のimgタグの画像の大きさを変える</title><link>https://endorphinbath.com/posts/nodejs-markdown-scale-image/</link><guid isPermaLink="true">https://endorphinbath.com/posts/nodejs-markdown-scale-image/</guid><description>README.md内のimgタグで記載された画像のサイズを変更する処理を作成しました。沢山画像を貼っていると、いちいちサイズを変更するのが面倒ですが、この処理で一気に直してしまいましょう！</description><pubDate>Mon, 03 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Markdownの中にある画像のサイズを変えるツールの紹介します。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_009.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;沢山画像を貼っててそいつらのサイズをまとめて変えるとなると、手作業だと大変だもんねえ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回作った処理&lt;a href=&quot;#今回作った処理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は、README.md内のimgタグで記載された画像のサイズを変更する処理を作成しました。処理の実行前と実行後は以下になります。&lt;/p&gt;&lt;p&gt;実行前
&lt;img loading=&quot;lazy&quot; width=&quot;1922&quot; height=&quot;800&quot; src=&quot;/_astro/01.HzMoJiOM_hDt2i.webp&quot; srcset=&quot;/_astro/01.HzMoJiOM_2gXqO.webp 640w, /_astro/01.HzMoJiOM_Z1Gn3C6.webp 750w, /_astro/01.HzMoJiOM_4Rzoj.webp 828w, /_astro/01.HzMoJiOM_Z2puDch.webp 1080w, /_astro/01.HzMoJiOM_Z1i3mmH.webp 1280w, /_astro/01.HzMoJiOM_1AGegs.webp 1668w, /_astro/01.HzMoJiOM_hDt2i.webp 1922w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実行後（大きくなった）
&lt;img loading=&quot;lazy&quot; width=&quot;1986&quot; height=&quot;846&quot; src=&quot;/_astro/02.CR82THTV_Z1NdMbw.webp&quot; srcset=&quot;/_astro/02.CR82THTV_1r1erS.webp 640w, /_astro/02.CR82THTV_1Atrbv.webp 750w, /_astro/02.CR82THTV_TAkOg.webp 828w, /_astro/02.CR82THTV_Z24nQ53.webp 1080w, /_astro/02.CR82THTV_ZW4Ee3.webp 1280w, /_astro/02.CR82THTV_Z1kgJzz.webp 1668w, /_astro/02.CR82THTV_Z1NdMbw.webp 1986w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;処理の流れ&lt;a href=&quot;#処理の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ソースはこちらになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;image-scale.js&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;path&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;url&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;commander&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./lib/lib-methods.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;-c, --config-yaml &amp;lt;type&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;file name for config with yaml&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;_optionValues&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;configYaml&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`image-scale.js: yamlFileName is &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__dirname&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileURLToPath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;loadYamlFile&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__dirname&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sourceMarkdownFileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageArea&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageArea&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageSizeEmAfter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imageSizeEmAfter&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeImageScaling&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;imageArea&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;imageSizeEmAfter&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Execute Step 1:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この処理の流れは、以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;引数に貰ったyamlファイルからこの処理に必要なコンフィグ情報を取得する。（&lt;code&gt;console.log(configByYaml);&lt;/code&gt;までの部分）&lt;/li&gt;
&lt;li&gt;yamlファイルで取得した更新対象のファイルの全文を取得する。（&lt;code&gt;console.log(lines);&lt;/code&gt;までの部分）&lt;/li&gt;
&lt;li&gt;更新対象のファイルの投稿部分の表示だけ書き換える。（最後らへん）&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;1. 引数に貰ったyamlファイルからこの処理に必要なコンフィグ情報を取得する。&lt;a href=&quot;#1-引数に貰ったyamlファイルからこの処理に必要なコンフィグ情報を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;コンフィグ情報は以下のファイルの中身です。
&lt;code&gt;imageSizeEmAfter&lt;/code&gt;でサイズを指定します。emで指定します。そして、この場合だと、&lt;code&gt;README.md&lt;/code&gt;の中に&lt;code&gt;&amp;lt;!--[START IMAGE&lt;/code&gt; &lt;code&gt;LIST]--&amp;gt;&lt;/code&gt;と&lt;code&gt;&amp;lt;!--[END IMAGE&lt;/code&gt; &lt;code&gt;LIST]--&amp;gt;&lt;/code&gt;を記載すると、その間に投稿した画像のサイズが更新されます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;configOfImageScaler.yml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;imageSizeEmAfter&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;30.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sourceMarkdownFileName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;imageArea&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[START IMAGE LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[END IMAGE LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. yamlファイルで取得した更新対象のファイルの全文を取得する。&lt;a href=&quot;#2-yamlファイルで取得した更新対象のファイルの全文を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ファイルの全文を改行区切りで配列として取得します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 更新対象のファイルの投稿部分の表示だけ書き換える。&lt;a href=&quot;#3-更新対象のファイルの投稿部分の表示だけ書き換える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;img ...&amp;gt;&lt;/code&gt;を検知して画像のサイズを変更します。詳しいソースはこちらにありますので、興味ありましたら見てみてください。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/feed-fetcher&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;feed-fetcher&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GitHub Actionsで定期更新する&lt;a href=&quot;#github-actionsで定期更新する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;./node_modules/feed-fetcher/bin/runImageScale --config-yaml=../../configOfImageScaler.yml&lt;/code&gt;の部分で投稿した記事の部分を更新しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Update README for RSS feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;&apos;0 0 * * *&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateFeed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sudo apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;node set up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-node@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;node-version&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;16.13.1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Confirm version of node and npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node -v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;npm -v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install feedFetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;npm install https://github.com/Landmaster135/feed-fetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;run feedFetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chmod 777 ./node_modules/feed-fetcher/bin/*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;./node_modules/feed-fetcher/bin/runFeedFetch --config-yaml=../../configOfFeedFetcher.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;./node_modules/feed-fetcher/bin/runImageScale --config-yaml=../../configOfImageScaler.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git setting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.email &quot;52403447+Landmaster135@users.noreply.github.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.name &quot;Landmaster135&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git log -1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git diff --cached --quiet || (git commit -m &quot;Update feed snippet&quot; &amp;amp;&amp;amp; git push origin main)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とまあ、こんなところだな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なるほどなあ〜。あ、昼飯はカツ丼にするか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いや、寿司が食いてえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Node.js】GitHub ActionsでREADME.mdに投稿した記事のリンクを表示する（FirebaseでCORS対応）</title><link>https://endorphinbath.com/posts/nodejs-readme-display-feed/</link><guid isPermaLink="true">https://endorphinbath.com/posts/nodejs-readme-display-feed/</guid><description>Zenn、Qiita、ブログ、noteに投稿した記事のURLをREADM.mdに掲載するアプリを作成しました。このアプリを参考にして自分のGitHubのプロフィールページをカッコよくしてみましょう！GitHub ActionsやFirebaseを題材にしています。</description><pubDate>Sun, 02 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;プロフィールページのREADME.mdをカッコよくしたいやつはいるかあー！？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;俺だ俺だ俺だ俺だあー！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;作ったもの&lt;a href=&quot;#作ったもの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、以下のREADME.mdで言うところの赤枠の部分を表示するために色々開発しました。
&lt;img loading=&quot;lazy&quot; width=&quot;2472&quot; height=&quot;1578&quot; src=&quot;/_astro/01.B2mcK6AE_Z1LiHI0.webp&quot; srcset=&quot;/_astro/01.B2mcK6AE_ZbqXh9.webp 640w, /_astro/01.B2mcK6AE_Z1RJIyQ.webp 750w, /_astro/01.B2mcK6AE_Z1MHphV.webp 828w, /_astro/01.B2mcK6AE_Z1z0TXL.webp 1080w, /_astro/01.B2mcK6AE_1FkhnM.webp 1280w, /_astro/01.B2mcK6AE_W31jP.webp 1668w, /_astro/01.B2mcK6AE_Z8yz8L.webp 2048w, /_astro/01.B2mcK6AE_Z1LiHI0.webp 2472w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このREADM.mdを更新するアプリを作成するために行ったことは、以下になります。各記事投稿サービスは、Zenn、Qiita、ブログ（WordPress）、noteを対象としています。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Node.jsにより、各記事投稿サービスのRSS Feedから必要な情報を取得する処理を作る。&lt;/li&gt;
&lt;li&gt;先程作った処理を、GitHub Actionsとして機能するようにする。&lt;/li&gt;
&lt;li&gt;noteのRSS Feedを取得するために、CORS対応のCloud Functionを作って、noteのEndpointはそのCloud Functionにする。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;今回作ったアプリの概要図はこちらになります。初めて触るものばかりでしたし、この概要図も初めてmermaid.jsを使って、初めて尽くしの開発でした。
&lt;img loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1268&quot; src=&quot;/_astro/02.D_ZwpO6J_Z1r3AJ8.webp&quot; srcset=&quot;/_astro/02.D_ZwpO6J_Z27P3TV.webp 640w, /_astro/02.D_ZwpO6J_1g3jBi.webp 750w, /_astro/02.D_ZwpO6J_Z1bVo1X.webp 828w, /_astro/02.D_ZwpO6J_1QhhFp.webp 1080w, /_astro/02.D_ZwpO6J_Z2tBs2x.webp 1280w, /_astro/02.D_ZwpO6J_6qqsw.webp 1668w, /_astro/02.D_ZwpO6J_Z1r3AJ8.webp 2000w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回作ったアプリのソースは、GitHub上で公開しています。よければ見ていってください。&lt;/p&gt;&lt;a href=&quot;https://github.com/landmaster135/feed-fetcher&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;landmaster135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;feed-fetcher&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;作成の流れ&lt;a href=&quot;#作成の流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. Node.jsにより、各記事投稿サービスのRSS Feedから必要な情報を取得する処理を作る。&lt;a href=&quot;#1-nodejsにより各記事投稿サービスのrss-feedから必要な情報を取得する処理を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回の処理は、Node.jsで作りました。メイン処理はこちらになります。
&lt;code&gt;feed-fetch.js&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;path&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;url&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;commander&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;./lib/lib-methods.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Command&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;-c, --config-yaml &amp;lt;type&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;file name for config with yaml&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;commander&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;_optionValues&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;configYaml&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`feed-fetch.js: yamlFileName is &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__dirname&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileURLToPath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;loadYamlFile&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__dirname&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;yamlFileName&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;number_of_display&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;displayLimit&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;listOfLatestFeed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLatestFeed&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;number_of_display&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listOfLatestFeed&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sourceMarkdownFileName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postArea&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;configByYaml&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;postArea&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeFeedToText&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postArea&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;listOfLatestFeed&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sourceMdFileName&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Execute Step 1:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;この処理の流れは、以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;引数に貰ったyamlファイルからこの処理に必要なコンフィグ情報を取得する。（&lt;code&gt;console.log(configByYaml);&lt;/code&gt;までの部分）&lt;/li&gt;
&lt;li&gt;最近投稿した記事の一覧をyamlファイルに書いてあった分だけ、取得する。（&lt;code&gt;console.log(listOfLatestFeed);&lt;/code&gt;までの部分です。[title, pubDate, link, imgFileName]を1レコードとして取得。）&lt;/li&gt;
&lt;li&gt;yamlファイルで取得した更新対象のファイルの全文を取得する。（&lt;code&gt;console.log(lines);&lt;/code&gt;までの部分）&lt;/li&gt;
&lt;li&gt;更新対象のファイルの投稿部分の表示だけ書き換える。（最後らへん）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;そして、コンフィグ情報は以下のファイルの中身です。
そこに記載する配列&lt;code&gt;feedUrlArray&lt;/code&gt;および&lt;code&gt;imgFileNameArray&lt;/code&gt;のインデックスの順番は対応している必要があります。この場合だと、&lt;code&gt;README.md&lt;/code&gt;の中に&lt;code&gt;&amp;lt;!--[START POSTS LIST]--&amp;gt;&lt;/code&gt;と&lt;code&gt;&amp;lt;!--[END POSTS LIST]--&amp;gt;&lt;/code&gt;を記載すると、その間に投稿した記事の情報が更新されます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;configOfFeedFetcher.yml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;displayLimit&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://zenn.dev/kinkinbeer135ml/feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://qiita.com/Landmaster135/feed.atom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://www.endorphinbath.com/feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://us-central1-projectbeer15-37257.cloudfunctions.net/api/all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/zenn.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/qiita.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/endorphinbath.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/note.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sourceMarkdownFileName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;postArea&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[START POSTS LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[END POSTS LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;noteのエンドポイントに関しては、3.で説明します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 先程作った処理を、GitHub Actionsとして機能するようにする。&lt;a href=&quot;#2-先程作った処理をgithub-actionsとして機能するようにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1.で作った処理を、GitHub Actionsとして動かすことにしました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;./node_modules/feed-fetcher/bin/runFeedFetch --config-yaml=../../configOfFeedFetcher.yml&lt;/code&gt;の部分で投稿した記事の部分を更新しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Update README for RSS feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;workflow_dispatch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;cron&lt;/span&gt;&lt;span&gt;:  &lt;/span&gt;&lt;span&gt;&apos;0 0 * * *&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;jobs&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;updateFeed&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;runs-on&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;ubuntu-latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;sudo apt update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Checkout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/checkout@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;node set up&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;uses&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;actions/setup-node@v2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;node-version&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;16.13.1&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Confirm version of node and npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node -v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;npm -v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;Install feedFetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;npm install https://github.com/Landmaster135/feed-fetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;run feedFetcher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;chmod 777 ./node_modules/feed-fetcher/bin/*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;./node_modules/feed-fetcher/bin/runFeedFetch --config-yaml=../../configOfFeedFetcher.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;./node_modules/feed-fetcher/bin/runImageScale --config-yaml=../../configOfImageScaler.yml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git setting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.email &quot;52403447+Landmaster135@users.noreply.github.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git config --local user.name &quot;Landmaster135&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;git commit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git log -1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git add README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;git diff --cached --quiet || (git commit -m &quot;Update feed snippet&quot; &amp;amp;&amp;amp; git push origin main)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;./node_modules/feed-fetcher/bin/runImageScale --config-yaml=../../configOfImageScaler.yml&lt;/code&gt;の部分は別の記事で紹介しています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/nodejs-markdown-scale-image/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Node.js】Markdown内のimgタグの画像の大きさを変える。&lt;/div&gt;&lt;div&gt;README.md内のimgタグで記載された画像のサイズを変更する処理を作成しました。沢山画像を貼っていると、いちいちサイズを変更するのが面倒ですが、この処理で一気に直してしまいましょう！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20220103_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. noteのRSS Feedを取得するために、CORS対応のCloud Functionを作って、noteのEndpointはそのCloud Functionにする。&lt;a href=&quot;#3-noteのrss-feedを取得するためにcors対応のcloud-functionを作ってnoteのendpointはそのcloud-functionにする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1.で作成したyamlファイルはこの通りになっていますが、noteのURLの部分だけはCloud Functionのエンドポイントになっています。&lt;/p&gt;&lt;p&gt;&lt;code&gt;configOfFeedFetcher.yml&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;displayLimit&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;feedUrlArray&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://zenn.dev/kinkinbeer135ml/feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://qiita.com/Landmaster135/feed.atom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://www.endorphinbath.com/feed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;https://us-central1-projectbeer15-37257.cloudfunctions.net/api/all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;imgFileNameArray&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/zenn.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/qiita.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/endorphinbath.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &lt;/span&gt;&lt;span&gt;img/note.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sourceMarkdownFileName&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;README.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;postArea&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[START POSTS LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&amp;lt;!--[END POSTS LIST]--&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;なぜCloud Functionを噛ませているかというと、noteのRSSのURL（僕の場合だと、&lt;code&gt;https://note.com/kinkinbeer135ml/rss&lt;/code&gt;）からRSS Feedを取得しようとすると、弾かれてしまうためです。根本原因はnoteのRSSがCORS対応していないことです。&lt;/p&gt;&lt;p&gt;そのため、noteのRSSとfeed-fetcherアプリの間に、CORS対応の中間アプリを設置する必要がありました。
その中間アプリを作る際に、この記事がすごい参考になったので、貼っておきます。&lt;/p&gt;&lt;a href=&quot;https://www.to-r.net/media/note-rss/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.to-r.net/media/icon.png?e0587f2b52dff20f&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;to-R Medial&lt;/span&gt;&lt;/div&gt;&lt;div&gt;note の RSS でクライアントから記事一覧を取得する方法【Cloud Functions for Firebase】&lt;/div&gt;&lt;div&gt;先日、個人的に関わっているとあるサイト制作（Nuxt.js 製）のプロジェクトで、クライアントが運用している note のアカウントの記事一覧をそのままサイトに掲載するという実装をおこないました。 note を Webサ [&amp;amp;hellip;]&lt;/div&gt;&lt;div&gt;www.to-r.net&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.to-r.net/media/media/images/2021-05-ogp.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. Firebaseセットアップ時の備忘録&lt;a href=&quot;#4-firebaseセットアップ時の備忘録&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;しかし、環境整備の際にディレクトリを意識して&lt;code&gt;npm install&lt;/code&gt;しないとデプロイできない事態になります・・・僕は最後のデプロイにモジュールの参照関係が原因でつまづき、けっこう長い時間ハマりました・・・&lt;/p&gt;&lt;p&gt;（&lt;code&gt;firebase-debug.log&lt;/code&gt;をちゃんと見ずに対処していたので、3時間くらいかかりました・・・見ていないで同様に困っている方はちゃんと見ましょう。）&lt;/p&gt;&lt;p&gt;そのため、以下に行った作業を書いておきます。自分の備忘録でもあります。僕はMacで環境を作ったので、再整備の手順も記載しています。（コマンド実行して&lt;code&gt;Permission Denied&lt;/code&gt;だったら、&lt;code&gt;sudo&lt;/code&gt;付けてもう一度。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;if you have installed tools to macos.&lt;a href=&quot;#if-you-have-installed-tools-to-macos&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;There is a &lt;a href=&quot;https://d.sonicjam.co.jp/post/52541343939&quot; target=&quot;_blank&quot;&gt;reference site&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Uninstall Node.js with this command.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lsbom&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-f&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-l&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-pf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/var/db/receipts/org.nodejs.pkg.bom&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;| &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/local/&lt;/span&gt;&lt;span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/local/lib/node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;/usr/local/lib/node_modules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;/var/db/receipts/org.nodejs.&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Uninstall npm with this command.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/.npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Exit and Quit Terminal.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Delete these following files in “/usr/local/bin” directory.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yarnpkg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Install tools for develop functions.&lt;a href=&quot;#install-tools-for-develop-functions&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Install Node.js Package &lt;a href=&quot;https://nodejs.org/ja/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Open terminal.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudfunctions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudfunctions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Check firebase exists or not.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;firebase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--version&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npm@8.4.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;firebase-tools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Login Firebase account&lt;a href=&quot;#login-firebase-account&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;firebase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;login&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Initialize Firebase&lt;a href=&quot;#initialize-firebase&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Reference &lt;a href=&quot;https://www.to-r.net/media/note-rss/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; …&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;firebase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Functions: Configure a Cloud Functions directory and its files&lt;/li&gt;
&lt;li&gt;Use an existing project&lt;/li&gt;
&lt;li&gt;(project)&lt;/li&gt;
&lt;li&gt;Javascript or Typescript&lt;/li&gt;
&lt;li&gt;y&lt;/li&gt;
&lt;li&gt;Y&lt;/li&gt;
&lt;li&gt;Firebase initialization complete!&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;If you clone repository, you must fix following files.&lt;a href=&quot;#if-you-clone-repository-you-must-fix-following-files&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;index.js&lt;/li&gt;
&lt;li&gt;.eslintrc.js&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Setup modules for web-app.&lt;a href=&quot;#setup-modules-for-web-app&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sudo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;functions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;express&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request-promise-native&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cors&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Execute following command after you have edited code.&lt;a href=&quot;#execute-following-command-after-you-have-edited-code&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;⚠️ Raise your project plan to “Blaze” before you deploy app.&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;..&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;firebase&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;もしかしたら、Firebase権限で弾かれている可能性もあるため、その場合はこの記事をご参照ください。&lt;/p&gt;&lt;a href=&quot;https://qiita.com/noboru_i/items/254064a91a3dc4b88de6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://cdn.qiita.com/assets/favicons/public/production-c620d3e403342b1022967ba5e3db1aaa.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Qiita&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Firebase Functionsを編集者アカウントで使う - Qiita&lt;/div&gt;&lt;div&gt;Firebase関連の開発を行う場合、 ・限られた数名は「オーナー」権限 ・それ以外の開発者は「編集者」権限 と設定するかと思います。 「編集者」権限で、Firebase Functionsのデプロイが出来なかったので、その記録です。 準備 firebase-toolsの...&lt;/div&gt;&lt;div&gt;qiita.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGODcwOCUyRnByb2ZpbGUtaW1hZ2VzJTJGMTQ3MzY4MTEyMj9peGxpYj1yYi00LjEuMSZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9YjUyZDIxYjE0OGJkNzE3MDM2YTViMzVjYTJhOGQyN2I%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkYzODQ2MjlmZWZiNGY2MGQ4M2U4NzkzMzBkZWYxMjdkOTVmZWMyNTNmJTJGb3JpZ2luYWwuanBnJTNGMTc1MDIwNTczMT9peGxpYj1yYi00LjEuMSZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz1lYWI1Yjk5YWJjOWNlNzI4OTkyYzc1MGRmOTg5MWQwMA%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3Dd810b6266e3a62ee0eb6e8c70c131bb4?ixlib=rb-4.1.1&amp;amp;w=1200&amp;amp;fm=jpg&amp;amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9RmlyZWJhc2UlMjBGdW5jdGlvbnMlRTMlODIlOTIlRTclQjclQTglRTklOUIlODYlRTglODAlODUlRTMlODIlQTIlRTMlODIlQUIlRTMlODIlQTYlRTMlODMlQjMlRTMlODMlODglRTMlODElQTclRTQlQkQlQkYlRTMlODElODYmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz04NTJiMThiMGZiN2MzZTBmNzY5ZGZhMDUzMGEwY2I2Zg&amp;amp;mark-x=120&amp;amp;mark-y=112&amp;amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBub2JvcnVfaSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTRiMTc5YzhlNTUyNzZkMjdhNzVmYTYwM2ZjNzNhYmMy&amp;amp;blend-x=242&amp;amp;blend-y=454&amp;amp;blend-w=838&amp;amp;blend-h=46&amp;amp;blend-fit=crop&amp;amp;blend-crop=left%2Cbottom&amp;amp;blend-mode=normal&amp;amp;txt64=5qCq5byP5Lya56S-44Oi44Oz44K544K_44O844Op44Oc&amp;amp;txt-x=242&amp;amp;txt-y=539&amp;amp;txt-width=838&amp;amp;txt-clip=end%2Cellipsis&amp;amp;txt-color=%231E2121&amp;amp;txt-font=Hiragino%20Sans%20W6&amp;amp;txt-size=28&amp;amp;s=a08e750af9ea12d56be6659b4ed9830d&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とまあ、こんな感じだな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;CORS非対応に対応するのが手間なんだなぁ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】ドライブにある画像をセルに表示しまくるツール</title><link>https://endorphinbath.com/posts/gas-display-image-in-drive/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-display-image-in-drive/</guid><description>僕は、ブラウザで言うところの「お気に入り」をGoogleスプレッドシートで管理しているのですが、その一覧の可視性を上げるためにサイトのアイコンをGoogleドライブから一気に設定するツールを作りました。</description><pubDate>Sat, 01 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あけおメントスコーラ～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ことよロンドンブーツ1号2号3号625901号～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;さあ、こんなしょうもない挨拶をしたからには、何か記事にするんだろうね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;モチロンですとも！　今回は、ドライブにある画像ファイルGoogleスプレッドシートに表示しまくっちゃおうという題目です。Googleスプシで管理しているリストの見栄えを良くするために参考にしてくだせえ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このツールを実行すると、Googleドライブにある画像のファイル名と同じ名前のサイトと対応する箇所に&lt;code&gt;IMAGE&lt;/code&gt;関数を入力しまくってくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1323&quot; height=&quot;441&quot; src=&quot;/_astro/01.DW2uQZoO_Z2bzoza.webp&quot; srcset=&quot;/_astro/01.DW2uQZoO_ZmO6ch.webp 640w, /_astro/01.DW2uQZoO_2q9oGV.webp 750w, /_astro/01.DW2uQZoO_Z3GtXb.webp 828w, /_astro/01.DW2uQZoO_U8UlW.webp 1080w, /_astro/01.DW2uQZoO_26qyva.webp 1280w, /_astro/01.DW2uQZoO_Z2bzoza.webp 1323w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソース&lt;a href=&quot;#ソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;if&quot; statement in one liner. If &apos;&apos;, nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Get number of record in Google Spreadsheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&quot;bookmarkSites&quot;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; - Name of sheet that you wanna know number of record.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Number of record&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;customfunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list for warning message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Warning: Number of row passing over &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;RowIndexOutOfBoundsError: Number of row reached &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare variables for row and column index.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;201&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// memorize number of row to read&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// warning message. If condition is false, nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;warn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Get list to set image onto Google Spreadsheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [[number], [string]] - recordId and fileFullname&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;customfunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getListToSetImage&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare variables for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bookmarkList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;errorMessageList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Get files&apos; name and fullname to JSON format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;iconFolderId&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFiles&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNameList&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileFullNameList&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconInsertingRecordList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNameList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;/]&lt;/span&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileFullNameList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;]     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNameList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;fullName&apos;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileFullNameList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Get siteName list from GSS and extract record that fileName and siteName are same.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmarkList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_for_siteBookmark_of_firstRecord&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_icon&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmarkList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_icon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_siteName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconInsertingRecordList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;fullName&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconInsertingRecordList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serializeArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetArray&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onlyStringArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;targetArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onlyStringArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`[&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;]`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serializedArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onlyStringArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;,&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;serializedArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setImageFromList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare variables.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;formattedUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`INFO: listToSetImage is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;serializeArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// In this case, not in-cell image but OverGridImage...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// var file = DriveApp.getFolderById(iconFolderId).getFilesByName(&apos;note.png&apos;).next();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// var fileBlob = file.getBlob();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// var insertedImage = sheet.insertImage(fileBlob, column_for_siteBookmark_of_icon, 4);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// insertedImage.setAnchorCell(sheet.getRange(4, column_for_siteBookmark_of_icon));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// execute this code to set file permission and set in-cell image.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;iconFolderId&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFilesByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]).&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setSharing&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Access&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ANYONE_WITH_LINK&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Permission&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;VIEW&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;formattedUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;file/d/&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;uc?export=download&amp;amp;id=&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/view?usp=drivesdk&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_for_siteBookmark_of_firstRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_icon&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setFormula&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`=IMAGE(&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;formattedUrl&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;)`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setImageFromGoogleDrive&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getListToSetImage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setImageFromList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソースの解説&lt;a href=&quot;#ソースの解説&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、ソースの解説になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;関数起動&lt;a href=&quot;#関数起動&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、&lt;code&gt;setImageFromGoogleDrive()&lt;/code&gt;をキックします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setImageFromGoogleDrive&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getListToSetImage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setImageFromList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;getListToSetImage()&lt;a href=&quot;#getlisttosetimage&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、変数を宣言して、この部分では&lt;code&gt;get_row_to_read_actual_in_GSS()&lt;/code&gt;を利用して、実際にシート内にレコードが何件あるのかを数えて、処理対象の行数を取得します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;errorMessageList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ファイル名の拡張子を除いた分を取得する&lt;a href=&quot;#ファイル名の拡張子を除いた分を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、次にアイコンにする画像ファイルが入っているフォルダから、画像ファイルを全て取得してファイル名も取得します。以下で、拡張子が除かれたファイル名が取得できます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNameList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/(&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;/]&lt;/span&gt;&lt;span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;\.&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アイコンを追加する行を取得する&lt;a href=&quot;#アイコンを追加する行を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;アイコン用の画像ファイルがあり、かつアイコンがまだ追加されていない行を総当たりさせて、両方とも満たす行を&lt;code&gt;iconInsertingRecordList&lt;/code&gt;の配列にpushします。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bookmarkList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_icon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;name&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_siteName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconInsertingRecordList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;fileNameDict&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;fullName&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ログも取る&lt;a href=&quot;#ログも取る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、先程取得した行の情報を元にアイコンを表示するため、スプシに&lt;code&gt;IMAGE&lt;/code&gt;関数を入れる処理になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;console.time()&lt;/code&gt;と&lt;code&gt;console.timeEnd()&lt;/code&gt;で挟まれている処理にどれだけ時間が掛かったかを計測します。この処理では、おおよそ&lt;code&gt;IMAGE&lt;/code&gt;関数を入れる処理で時間を食いがちです。（追加するアイコンが３つある場合は５秒位掛かります。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setImageFromGoogleDrive&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getListToSetImage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;setImageFromList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPDATE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName2nd&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; SET favicon = ∀image WHERE favicon = &apos;&apos;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;IMAGE関数を入れる&lt;a href=&quot;#image関数を入れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここが実際に入れている処理になります。
まず、&lt;code&gt;setSharing()&lt;/code&gt;で、画像ファイルを共有ファイルにする必要があります。共有ファイルにしないと&lt;code&gt;IMAGE&lt;/code&gt;関数で表示されません。&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;replace()&lt;/code&gt;でクエリパラメータや参照モードを示す&lt;code&gt;/view&lt;/code&gt;の文字列を消して、画像ファイルの純粋なURLを取得する必要があります。&lt;/p&gt;&lt;p&gt;これらの前処理をして、やっとIMAGE関数でセル内に画像を表示させることが出来ます。この&lt;code&gt;setFormula()&lt;/code&gt;に時間が掛かります・・・！&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listToSetImage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;iconFolderId&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFilesByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]).&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setSharing&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Access&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ANYONE_WITH_LINK&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Permission&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;VIEW&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;formattedUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;iconUrl&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;file/d/&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;uc?export=download&amp;amp;id=&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/view?usp=drivesdk&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_for_siteBookmark_of_firstRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_siteBookmark_of_icon&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setFormula&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`=IMAGE(&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;formattedUrl&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;)`&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;上記のように&lt;code&gt;IMAGE&lt;/code&gt;関数を&lt;code&gt;setFormula&lt;/code&gt;する方法ではなく、関数として返り値（Blob的な）を画像にするという考えもあったのですが、以下の理由でやめておきました。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;SpreadsheetApp APIで画像をBlobを使って表示する方法だと&lt;code&gt;OverGridImage&lt;/code&gt;の形式しか扱えないっぽい。&lt;/li&gt;
&lt;li&gt;セルからはみ出たデカい画像が貼られてしまう。&lt;/li&gt;
&lt;li&gt;カスタム関数を全ての行に適用すると、スプシの表示が遅くなりそう。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;完了&lt;a href=&quot;#完了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;はい！ Googleドライブにある画像をアイコンに出来ました！
&lt;img loading=&quot;lazy&quot; width=&quot;1893&quot; height=&quot;1108&quot; src=&quot;/_astro/02.Dedd18kj_rvmth.webp&quot; srcset=&quot;/_astro/02.Dedd18kj_2cmkI0.webp 640w, /_astro/02.Dedd18kj_ZagRgI.webp 750w, /_astro/02.Dedd18kj_Z1TVTym.webp 828w, /_astro/02.Dedd18kj_1VGggT.webp 1080w, /_astro/02.Dedd18kj_Z1Bt9oa.webp 1280w, /_astro/02.Dedd18kj_TdRBS.webp 1668w, /_astro/02.Dedd18kj_rvmth.webp 1893w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1323&quot; height=&quot;441&quot; src=&quot;/_astro/01.DW2uQZoO_Z2bzoza.webp&quot; srcset=&quot;/_astro/01.DW2uQZoO_ZmO6ch.webp 640w, /_astro/01.DW2uQZoO_2q9oGV.webp 750w, /_astro/01.DW2uQZoO_Z3GtXb.webp 828w, /_astro/01.DW2uQZoO_U8UlW.webp 1080w, /_astro/01.DW2uQZoO_26qyva.webp 1280w, /_astro/01.DW2uQZoO_Z2bzoza.webp 1323w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うおーし、よっしゃあー、だいぶ見栄えが良くなったぜい。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;っぽくなったなぁ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Google Driveに共有したWebサイトのURLをGoogleスプシに転記する。</title><link>https://endorphinbath.com/posts/gas-webclip-to-gss/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-webclip-to-gss/</guid><description>Googleドライブに共有したWebサイトのURLが載ったテキストファイルを読み込んで、Googleスプシに転記するツールを作りました。後で読みたいと思った記事を一元管理できて便利に使えています。</description><pubDate>Fri, 31 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、あの記事ってどこにブックマークしたっけ？ Qiitaだっけ？ Zennだっけ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_003.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;前にいいなと思った記事がどこかに行ってしまった・・・また調べ直さなければならんじゃないか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ記事の管理を一元化してしまうかあ。気になったWebの記事をGoogleドライブにほいほい放り込んで、スプレッドシートで管理してしまおう。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_004.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お！それ採用！ さっそく作るのだ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本ツールで行える処理は、主に以下の2つです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Googleドライブにある.txtファイルの内容をGoogleスプレッドシートに転記する。（&lt;code&gt;main()&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;GoogleスプレッドシートにWebサイトのtitleが記載されていない行のtitleを埋める。（&lt;code&gt;inputTitlesToEmptyCell()&lt;/code&gt;）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;1.を実行することで、このようなGoogleドライブのフォルダから、スプレッドシートに転記します。
&lt;img loading=&quot;lazy&quot; width=&quot;2244&quot; height=&quot;1078&quot; src=&quot;/_astro/01.B3_rYN1p_16om0n.webp&quot; srcset=&quot;/_astro/01.B3_rYN1p_2wjjh1.webp 640w, /_astro/01.B3_rYN1p_Rw6xd.webp 750w, /_astro/01.B3_rYN1p_ZNOSk5.webp 828w, /_astro/01.B3_rYN1p_TwlD3.webp 1080w, /_astro/01.B3_rYN1p_Z1enWfu.webp 1280w, /_astro/01.B3_rYN1p_Z28i4ga.webp 1668w, /_astro/01.B3_rYN1p_Z1tdDT6.webp 2048w, /_astro/01.B3_rYN1p_16om0n.webp 2244w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1842&quot; height=&quot;1318&quot; src=&quot;/_astro/02.DsW_7o0a_Z1U7LW2.webp&quot; srcset=&quot;/_astro/02.DsW_7o0a_Z1evGXb.webp 640w, /_astro/02.DsW_7o0a_Z17PanM.webp 750w, /_astro/02.DsW_7o0a_2aGHtT.webp 828w, /_astro/02.DsW_7o0a_WKowt.webp 1080w, /_astro/02.DsW_7o0a_Z2513R4.webp 1280w, /_astro/02.DsW_7o0a_ZO1vLh.webp 1668w, /_astro/02.DsW_7o0a_Z1U7LW2.webp 1842w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ソース全体&lt;a href=&quot;#ソース全体&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;code&gt;constants.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;temporaryTextFolderId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;まとめ&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameOthers1st&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_for_id_1st&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// index of 「」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_for_date_1st&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// index of 「」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_for_title_1st&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// index of 「」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_for_url_1st&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// index of 「」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heightHeader1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;main.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// main process&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// for utilities (for main process and others)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;repeat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getResponseUntilMaxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// This function is to avoid 403 Forbidden Error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getResponseUntilMaxRetries&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;muteHttpExceptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getResponseCode&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: countOfRetries =&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;if&quot; statement in one liner. If &apos;&apos;, nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;listReadFromGss&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Get number of record in Google Spreadsheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&quot;bookmarkSites&quot;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; - Name of sheet that you wanna know number of record.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Number of record&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;customfunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;get_row_to_read_actual_in_GSS&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list for warning message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Warning: Number of row passing over &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;RowIndexOutOfBoundsError: Number of row reached &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare variables for row and column index.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// memorize number of row to read&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// warning message. If condition is false, nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;warn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: row_to_read_actual is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isExistFileViaFileIdInFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFilesByType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nowFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;nowFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileId&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// for main execution&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeFilesFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;removeFilesFromFileIdArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setTrashed&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isExistFileArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isExistFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isExistFileViaFileIdInFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;temporaryTextFolderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isExistFile is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;isExistFile&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isExistFileArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isExistFile&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isExistFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`isRemovedAll is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeResultArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;removeResultArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;isExistFileArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;()]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;removeResultArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeInfoToGSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;writeInfoToGSS&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// evaluate writable or not.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;records to write is nothing.&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// decide start row to write info&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;801&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;row_to_read_actual: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;heightHeader1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;startRow: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// write info(id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`INSERT &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;Sheet SET &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; = *;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_id_1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setFormula&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;=ROW()-1&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`INSERT &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;Sheet SET &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; = *;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// write info(except id)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPSERT &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;Sheet SET &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;clipDate&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; = * WHERE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`i :&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`obj[arrayOfKey[i]]:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setValues&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`UPSERT &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;Sheet SET &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;clipDate&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; = * WHERE &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;startRow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;integrateObjToWriteGSS&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;integrateObjToWriteGSS&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Length of object in objects must be same each other: Start ----------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;])[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lengthOfObject1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lengthOfObject2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arrayOfKey: [ &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; ]&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lengthOfObject1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;L1: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lengthOfObject1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;lengthOfObject2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfKey&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;]].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;L2: &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lengthOfObject2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;lengthOfObject1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lengthOfObject2&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Length of objects is different: lengthOfObject1:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;lengthOfObject1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; != lengthOfObject2:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;lengthOfObject2&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&apos;2&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [[]]};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Length of object in objects must be same each other: End ----------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Data processing: Start --------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indexOfArrayOfColumnsIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;indexOfArrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOfArrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recordsArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;columnsIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objects&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;columnsIndex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;columnIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objWithoutArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;columnIndex&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;record&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;recordsArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;records&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;recordsArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;277&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;278&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;279&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;arrayOfColumnsIndex&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recordsArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;280&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;281&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;282&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;283&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;284&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Data processing: End --------------------------------------------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;285&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;286&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Data processing in the case that record is empty: Start ----------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;287&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recordsForWriting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Object&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;288&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;289&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`recordsForWriting:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;recordsForWriting&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;290&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;recordsForWriting&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;291&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&apos;2&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [[]]};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;292&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;293&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;294&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Data processing in the case that record is empty: End ----------------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;295&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;296&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objRecordsArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;297&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;298&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;299&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applyColumnIndexToInfoArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;columnIndex&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;infoArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;300&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;applyColumnIndexToInfoArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;301&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indexToString&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;columnIndex&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;302&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appliedObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;303&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;appliedObj&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;indexToString&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;infoArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;304&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;305&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;appliedObj&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;306&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;307&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;308&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getUrlArrayFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;309&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getUrlArrayFromFileIdArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;310&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;311&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;312&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;313&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;314&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBlob&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getDataAsString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;315&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;urls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;316&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;317&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;318&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urls&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;319&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urls&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;320&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;321&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;322&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFileNameArrayFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;323&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getFileNameArrayFromFileIdArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;324&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNames&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;325&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;326&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;327&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;328&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileNames&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;329&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;330&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;331&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileNames&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;332&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;333&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;334&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSiteTitleArrayFromUrlArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;335&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getSiteTitleArrayFromUrlArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;336&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;337&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;338&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;339&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getResponseUntilMaxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;340&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;341&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;342&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;343&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;UTF-8&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;344&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;contentText&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;title&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;/title&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;345&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;346&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;347&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;348&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;349&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;350&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;351&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;352&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;353&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getDateArrayFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;354&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getDateArrayFromFileIdArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;355&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dates&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;356&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;357&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;358&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;359&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dates&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastUpdated&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;JST&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy/MM/dd&quot;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;360&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;361&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;362&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dates&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;363&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dates&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;364&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;365&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;366&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFileIdArrayInTheFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;text/plain&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;367&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getTextFileIdArrayInTheFolder&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;368&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;369&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFilesByType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;370&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;371&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;372&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;373&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;374&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;375&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastUpdated&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;JST&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy/MM/dd&quot;&lt;/span&gt;&lt;span&gt;)]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;376&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;377&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;378&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;379&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;380&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;381&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;382&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;383&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;384&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;385&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;386&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;387&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;388&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;389&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;390&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;391&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;392&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;393&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;394&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;395&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;396&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;397&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// main execution for main process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;398&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;399&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;text/plain&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;400&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;textFileIdArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFileIdArrayInTheFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;temporaryTextFolderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;401&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dateArray&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getDateArrayFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;textFileIdArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;402&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getUrlArrayFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;textFileIdArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;403&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitleArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSiteTitleArrayFromUrlArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;404&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;405&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// for test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;406&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// dateArray      = [0,1,2,4];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;407&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// siteTitleArray = [2,4,8,9];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;408&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// urlArray       = [5,7,1,5];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;409&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;410&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dateObj&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applyColumnIndexToInfoArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_for_date_1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;dateArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;411&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;titleObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applyColumnIndexToInfoArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_for_title_1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;siteTitleArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;412&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlObj&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applyColumnIndexToInfoArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_for_url_1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;413&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;integratedObj&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;integrateObjToWriteGSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dateObj&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;titleObj&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;urlObj&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// できた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;414&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writeInfoToGSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;integratedObj&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;415&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;416&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isWritten&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;417&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isRemovedAll&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;removeFilesFromFileIdArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;textFileIdArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;418&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;419&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;420&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;421&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// the other process (part 1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;422&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// for utilities (for other process)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;423&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputValuesToEmptyCell&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;inputingColumn&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;424&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;inputValuesToEmptyCell&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;425&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;426&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;427&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isInputed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;428&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;429&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;inputingColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;430&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;431&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isInputed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;432&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;433&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;434&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isInputed&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;435&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;436&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isInputed&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;437&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;438&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;439&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValueArrayFromRowArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;440&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getValueArrayFromRowArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;441&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;442&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;443&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;444&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;445&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;446&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;447&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;448&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;449&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;450&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;451&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;452&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getRowsEmptyCell&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;453&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getRowsEmptyCell&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;454&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;455&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;456&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;457&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;heightHeader1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;458&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;459&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;460&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;461&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;462&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;463&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;464&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;465&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;466&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;467&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;468&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;469&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;470&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;471&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;472&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// main execution for the other process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;473&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputTitlesToEmptyCell&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;474&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;801&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;475&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getRowsEmptyCell&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_title_1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;476&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValueArrayFromRowArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_url_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;477&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitleArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSiteTitleArrayFromUrlArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;478&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isInputed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputValuesToEmptyCell&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;siteTitleArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_title_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;479&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;section&gt;&lt;h2&gt;ツールの動き①：Googleドライブにある.txtファイルの内容をGoogleスプレッドシートに転記する。&lt;a href=&quot;#ツールの動きgoogleドライブにあるtxtファイルの内容をgoogleスプレッドシートに転記する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ツールの動き①の動きは以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;MIMEタイプに「text/plain」を選び、対象のGoogleドライブのフォルダから.txtファイルだけを取得する。&lt;/li&gt;
&lt;li&gt;そのファイルのファイルIDを取得する。（ファイルIDの配列は最終更新日付順にする。）&lt;/li&gt;
&lt;li&gt;ファイルIDから、ファイルの最終更新日付、タイトル、URLを取得する。&lt;/li&gt;
&lt;li&gt;Googleスプレッドシートに速く書き込めるように、配列の形を加工する。&lt;/li&gt;
&lt;li&gt;Googleスプレッドシートに情報を書き込む。&lt;/li&gt;
&lt;li&gt;Googleスプレッドシートに書き込んだら、書き込んだファイルを削除する。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;以下、要所だけピックアップします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;2.　そのファイルのファイルIDを取得する。（ファイルIDの配列は最終更新日付順にする。）&lt;a href=&quot;#2そのファイルのファイルidを取得するファイルidの配列は最終更新日付順にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が該当のソースになります。&lt;/p&gt;&lt;p&gt;ファイルIDと最終更新日付が何レコードか入った配列を作って最終更新日付でその配列を昇順でソートしています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFileIdArrayInTheFolder&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;text/plain&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getTextFileIdArrayInTheFolder&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFilesByType&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getLastUpdated&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;JST&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy/MM/dd&quot;&lt;/span&gt;&lt;span&gt;)]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileInfoArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fileIdArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;&lt;strong&gt;3.　ファイルIDから、ファイルの最終更新日付、タイトル、URLを取得する。&lt;/strong&gt;&lt;a href=&quot;#3ファイルidからファイルの最終更新日付タイトルurlを取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;URLからタイトルを取得する処理があります。&lt;/p&gt;&lt;p&gt;URLが入った配列からそのURLにアクセスします。403 Forbidden Errorを回避するために、最高5回そのURLにアクセスします。そして、通信が成功したらそのtitleタグの中身を取得して、別の配列に格納します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getResponseUntilMaxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// This function is to avoid 403 Forbidden Error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getResponseUntilMaxRetries&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;maxRetries&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;muteHttpExceptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getResponseCode&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: countOfRetries =&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSiteTitleArrayFromUrlArray&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getSiteTitleArrayFromUrlArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;urlArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getResponseUntilMaxRetries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;UTF-8&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;contentText&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;title&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;/title&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;\r&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;siteTitle&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;siteTitles&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.　Googleスプレッドシートに速く書き込めるように、配列の形を加工する。&lt;a href=&quot;#4googleスプレッドシートに速く書き込めるように配列の形を加工する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この処理を書くのが最も大変でした・・・。コードは割愛しますが、カラム指向でシートへ書き込むようにしたため、レコードがいくら増えてもシートへの書き込み処理の回数が増えません。&lt;/p&gt;&lt;p&gt;例えば、書き込む対象の列インデックスが[2,3,5]だったら、2,3列目に書き込む配列と5列目に書き込む配列をそれぞれ返します。この場合、いくら書き込むレコードが増えても、書き込み回数は2回になります。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;ツールの動き②：GoogleスプレッドシートにWebサイトのtitleが記載されていない行のtitleを埋める。&lt;a href=&quot;#ツールの動きgoogleスプレッドシートにwebサイトのtitleが記載されていない行のtitleを埋める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらはWebサイトのタイトルをtitleタグから取得して空白の空白の行に埋める処理となっています。&lt;/p&gt;&lt;p&gt;また、定期処理として動かさず、ある程度増えたら実行するスクリプトとして扱っています。
&lt;img loading=&quot;lazy&quot; width=&quot;2514&quot; height=&quot;902&quot; src=&quot;/_astro/03.CiKhN-Bs_ZyKGne.webp&quot; srcset=&quot;/_astro/03.CiKhN-Bs_r8GpH.webp 640w, /_astro/03.CiKhN-Bs_Z160GRH.webp 750w, /_astro/03.CiKhN-Bs_Z1wOGHE.webp 828w, /_astro/03.CiKhN-Bs_RmuFT.webp 1080w, /_astro/03.CiKhN-Bs_21V58E.webp 1280w, /_astro/03.CiKhN-Bs_Z5gPLK.webp 1668w, /_astro/03.CiKhN-Bs_1lmpWY.webp 2048w, /_astro/03.CiKhN-Bs_ZyKGne.webp 2514w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2504&quot; height=&quot;880&quot; src=&quot;/_astro/04.BvOfGYqL_23KdJo.webp&quot; srcset=&quot;/_astro/04.BvOfGYqL_Z2cbD7w.webp 640w, /_astro/04.BvOfGYqL_Zxg8ox.webp 750w, /_astro/04.BvOfGYqL_Zp3CDn.webp 828w, /_astro/04.BvOfGYqL_Z2j8sMb.webp 1080w, /_astro/04.BvOfGYqL_Z19qNlQ.webp 1280w, /_astro/04.BvOfGYqL_1P8nfy.webp 1668w, /_astro/04.BvOfGYqL_IRH3G.webp 2048w, /_astro/04.BvOfGYqL_23KdJo.webp 2504w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下、主な処理をピックアップします。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;読み取る行数を決定する。&lt;a href=&quot;#読み取る行数を決定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;get_row_to_read_actual_in_GSS()&lt;/code&gt;という処理で、空白があるかどうかを判断する対象の行を取得します。前項の行数だと「113」が返ってきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* Get number of record in Google Spreadsheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&quot;bookmarkSites&quot;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; - Name of sheet that you wanna know number of record.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{number}&lt;/span&gt;&lt;span&gt; Number of record&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;* &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;customfunction&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_row_to_read_actual_in_GSS&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;get_row_to_read_actual_in_GSS&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list for warning message.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Warning: Number of row passing over &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;RowIndexOutOfBoundsError: Number of row reached &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;. Tweak me.&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare variables for row and column index.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare list.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// memorize number of row to read&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_id&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timeEnd&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: SELECT TOP&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; id FROM &lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;\&apos;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;listFormated&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// warning message. If condition is false, nothing to do.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;reduce&lt;/span&gt;&lt;span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;warn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;warningMessage&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;errorMessage&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: row_to_read_actual is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_to_read_actual&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;空白行の配列を取得する。&lt;a href=&quot;#空白行の配列を取得する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実際に空白になっている行のインデックスを取得します。&lt;/p&gt;&lt;p&gt;この処理が終わったら、後は前述の処理と同様にカラム指向にシートにtitleタグの値を書き込んでいきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getRowsEmptyCell&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;getRowsEmptyCell&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;heightHeader1st&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;targetColumn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_to_read&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;targetValueArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rowArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これで気になった記事が一箇所で管理できるぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;気になった記事ってそれぞれのサービス内で保存すると、あんまり利便性がないよね。かと言って、ただGoogleドライブに共有しただけだと、わざわざテキストファイルを開いてそのWebページにアクセスしなきゃいけないから面倒いよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;シート上で管理しているから見やすくなったぞぉ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Twitterにランダムなツイートを投稿するBotを作る</title><link>https://endorphinbath.com/posts/gas-twitter-bot-random-tweet/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-twitter-bot-random-tweet/</guid><description>Googleスプレッドシートを利用したGASから実行するTwitterのBotを作りました。今回は、そのツイートの内容をいじくる部分を解説します。</description><pubDate>Thu, 30 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ねえねえ、一つお願いがあるんだけどさあ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お？ どうした？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「カーディナル・ジョージ」ってTwitterで呟くBotを作って欲しいんだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・へ？ どういうこと？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;だから、「カーディナル・ジョージ」ってTwitterで呟くBotを作って欲しいんだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・？？？？？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;だめだな。埒が明かん。下に紹介したものがあります！ それでは、行ってみよ〜！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・え？ 俺が悪かったの？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソース全体&lt;a href=&quot;#ソース全体&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;main.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: Start ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの日本語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証用インスタンスの生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// const twitter = TwitterWebService.getInstance(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeyTwitterAccountJp, //API Key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeySecretTwitterAccountJp //API secret key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// );&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //アプリを連携認証する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authorize() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.authorize();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証を解除する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function reset() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.reset();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証後のコールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authCallback(request) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return twitter.authCallback(request);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの日本語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの英語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証用インスタンスの生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// const twitter = TwitterWebService.getInstance(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeyTwitterAccountEn, //API Key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeySecretTwitterAccountEn //API secret key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// );&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //アプリを連携認証する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authorize() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.authorize();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証を解除する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function reset() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.reset();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証後のコールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authCallback(request) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return twitter.authCallback(request);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの英語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: End ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法B: OAuth1.createServiceを使った認証およびコールバック: Start ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの日本語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function getTwitterServiceJp() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // Create a new service with the given name. The name will be used when&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // persisting the authorized token, so ensure it is unique within the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // scope of the property store.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return OAuth1.createService(&apos;twitter&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the endpoint URLs.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAccessTokenUrl(&apos;https://api.twitter.com/oauth/access_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setRequestTokenUrl(&apos;https://api.twitter.com/oauth/request_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAuthorizationUrl(&apos;https://api.twitter.com/oauth/authorize&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the consumer key and secret.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerKey(apiKeyTwitterAccountJp)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerSecret(apiKeySecretTwitterAccountJp)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the name of the callback function in the script referenced&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // above that should be invoked to complete the OAuth flow.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setCallbackFunction(&apos;authCallback&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the property store where authorized tokens should be persisted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setPropertyStore(PropertiesService.getUserProperties());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Twitter&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRequestTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/request_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/authorize&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerKey&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountJp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessToken&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showSidebarToAuthJp&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authorize&amp;lt;/a&amp;gt;. &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;Reopen the sidebar when the authorization is complete.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showSidebar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackJp&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Success! You can close this tab.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Denied. You can close this tab&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの日本語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function getTwitterServiceEn() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // Create a new service with the given name. The name will be used when&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // persisting the authorized token, so ensure it is unique within the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // scope of the property store.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return OAuth1.createService(&apos;twitter&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the endpoint URLs.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAccessTokenUrl(&apos;https://api.twitter.com/oauth/access_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setRequestTokenUrl(&apos;https://api.twitter.com/oauth/request_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAuthorizationUrl(&apos;https://api.twitter.com/oauth/authorize&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the consumer key and secret.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerKey(apiKeyTwitterAccountEn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerSecret(apiKeySecretTwitterAccountEn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the name of the callback function in the script referenced&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // above that should be invoked to complete the OAuth flow.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setCallbackFunction(&apos;authCallback&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the property store where authorized tokens should be persisted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setPropertyStore(PropertiesService.getUserProperties());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Twitter&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRequestTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/request_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/authorize&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerKey&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountEn&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessToken&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showSidebarToAuthEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authorize&amp;lt;/a&amp;gt;. &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;Reopen the sidebar when the authorization is complete.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showSidebar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackEn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Success! You can close this tab.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Denied. You can close this tab&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法B: OAuth1.createServiceを使った認証およびコールバック: End ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const service = twitter.getService(); // 方法Aによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.twitter.com/1.1/statuses/update.json&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;method&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &apos;headers&apos; : {Authorization: &apos;Bearer &apos; + bearerTokenTwitterAccount},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;muteHttpExceptions&quot; : true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 例外エラー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Error:&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;decideSentenceToTweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;・&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`sentenceToTweet:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;offsetAmountOfRow&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;amountOfRow&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;offsetAmountOfRow&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;selectWordsToTweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultRatio&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularRatio&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// decide regular or irregular.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: irregularIndex is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularRatio&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: isIrregular is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// irregular process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: irregularWord is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// regular process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;277&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;278&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;279&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`cell_amount_of_word_cardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;280&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`column_word_cardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;281&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`cell_amount_of_word_george:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;282&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`column_word_george:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;283&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;284&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;285&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;286&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;287&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;288&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;289&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;290&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;291&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`amountOfWordsCardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;292&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`wordCardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;293&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`amountOfWordsGeorge:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;294&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`wordGeorge:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;295&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;296&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;297&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;298&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;299&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;300&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;301&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;302&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;303&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Japanese mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;304&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;305&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;306&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;307&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;308&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// English mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;309&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;310&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;311&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;312&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;313&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;constants.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;tweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating2nd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;tweetメモ書き&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating3rd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;replyRecord&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameOthers1st&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;A1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;C1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;E1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;G1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;I1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;K1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_jp_cardinal_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;カーディナル&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_jp_george_1st&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ジョージ&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_en_cardinal_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Cardinal&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_en_george_1st&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;George&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountJp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountJp&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountEn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountEn&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;lib.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;repeat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ツイートを投稿する部分&lt;a href=&quot;#ツイートを投稿する部分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回作ったTwitter用のBotに、ツイートを投稿するためにAPI keyやOAuthで認証する設定の部分は、以下の記事でまとめています。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/gas-twitter-bot-authorize/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【GAS、Google Spreadsheet】TwitterのBotを作成するために認証を行う。&lt;/div&gt;&lt;div&gt;Googleスプレッドシートを利用したGASから実行するTwitterのBotを作りました。今回は、そのTwitterに投稿するための認証周りの設定に関する紹介記事になります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20211229_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;投稿する内容を決定する部分&lt;a href=&quot;#投稿する内容を決定する部分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回の本題に入ります。&lt;/p&gt;&lt;p&gt;本ツールに使用するスプレッドシートの中身はこんな感じになっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2174&quot; height=&quot;1348&quot; src=&quot;/_astro/01.C3JpvPEG_ZTRTDw.webp&quot; srcset=&quot;/_astro/01.C3JpvPEG_HmiDX.webp 640w, /_astro/01.C3JpvPEG_Qa8Qx.webp 750w, /_astro/01.C3JpvPEG_Vkx72.webp 828w, /_astro/01.C3JpvPEG_ZtCOnw.webp 1080w, /_astro/01.C3JpvPEG_5StTk.webp 1280w, /_astro/01.C3JpvPEG_Z1dRJsB.webp 1668w, /_astro/01.C3JpvPEG_1YWWAv.webp 2048w, /_astro/01.C3JpvPEG_ZTRTDw.webp 2174w&quot; /&gt;&lt;/p&gt;&lt;p&gt;処理の流れとしては、以下になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ツイートに使う単語を選ぶ&lt;/li&gt;
&lt;li&gt;実際にツイートする文言を決定する。&lt;/li&gt;
&lt;li&gt;ツイートする。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;以下に実際に解説します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. ツイートに使う単語を選ぶ&lt;a href=&quot;#1-ツイートに使う単語を選ぶ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ツイートに使う単語を選ぶ流れは以下のとおりです。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;日本語アカウントか英語アカウントのどちらで呟くかを決める。&lt;/li&gt;
&lt;li&gt;「カーディナル」な部分と「ジョージ」な部分を、まとめて選ぶか、それぞれ分けて選ぶかを決める。&lt;/li&gt;
&lt;li&gt;まとめて選ぶ場合は、イレギュラー列から単語を選んで返す。&lt;/li&gt;
&lt;li&gt;それぞれ分けて選ぶ場合は、「カーディナル」列および「ジョージ」列からそれぞれ単語を選んで返す。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;2.で、まとめて選ぶ場合になると、3.で「秋道チョウジ」や「枕草子」が選ばれます。&lt;/p&gt;&lt;p&gt;それぞれ分けて選ぶ場合になると、3.は行われず、4.で「カーニバル」と「お家」や「グーを出す」と「上司」などが返り値として選ばれます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 実際にツイートする文言を決定する。&lt;a href=&quot;#2-実際にツイートする文言を決定する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ツイートに使う単語が選ばれたら、実際にどのように呟くかどうかを整形する処理になります。&lt;/p&gt;&lt;p&gt;日本語の場合だと「・」を間に入れて、英語の場合だとスペースを入れる仕様としています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. ツイートする。&lt;a href=&quot;#3-ツイートする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実際にツイートする文言が決まったため、ツイートします。引数が”JP”か”EN”かで日本語アカウントか英語アカウントで呟くかどうかを区別しています。&lt;/p&gt;&lt;p&gt;実際につぶやきに成功すると、以下のようになります。
&lt;img loading=&quot;lazy&quot; width=&quot;1794&quot; height=&quot;858&quot; src=&quot;/_astro/02.FecHyjSy_Ja5y8.webp&quot; srcset=&quot;/_astro/02.FecHyjSy_1eyBax.webp 640w, /_astro/02.FecHyjSy_Z1VL0mG.webp 750w, /_astro/02.FecHyjSy_IswiE.webp 828w, /_astro/02.FecHyjSy_1GAhvd.webp 1080w, /_astro/02.FecHyjSy_Z2jILPD.webp 1280w, /_astro/02.FecHyjSy_Z22vYka.webp 1668w, /_astro/02.FecHyjSy_Ja5y8.webp 1794w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;トリガーを設置する&lt;a href=&quot;#トリガーを設置する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ツイートを自動で行うために、GAS上でトリガーを設定します。&lt;/p&gt;&lt;p&gt;以下の画面でトリガーが発火する時間を設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2780&quot; height=&quot;1010&quot; src=&quot;/_astro/03.Dho5g7_H_16FGq9.webp&quot; srcset=&quot;/_astro/03.Dho5g7_H_MxDrV.webp 640w, /_astro/03.Dho5g7_H_ZMwgUN.webp 750w, /_astro/03.Dho5g7_H_1SLFvE.webp 828w, /_astro/03.Dho5g7_H_2mcq0r.webp 1080w, /_astro/03.Dho5g7_H_Z1XjgRc.webp 1280w, /_astro/03.Dho5g7_H_2aNhK9.webp 1668w, /_astro/03.Dho5g7_H_ZrvnlV.webp 2048w, /_astro/03.Dho5g7_H_Zb72wz.webp 2560w, /_astro/03.Dho5g7_H_16FGq9.webp 2780w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;やった〜、「カーディナル・ジョージ」って呟くbotが出来た〜！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお、良かったな・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ちなみに、カーディナル・ジョージのアカウントのURLは、&lt;a href=&quot;https://twitter.com/CardinalGeorg6&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;です。Cardinal GeorgeのアカウントのURLは、&lt;a href=&quot;https://twitter.com/CardinalGeorge4&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】TwitterのBotを作成するために認証を行う。</title><link>https://endorphinbath.com/posts/gas-twitter-bot-authorize/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-twitter-bot-authorize/</guid><description>Googleスプレッドシートを利用したGASから実行するTwitterのBotを作りました。今回は、そのTwitterに投稿するための認証周りの設定に関する紹介記事になります。</description><pubDate>Wed, 29 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おし、今回は、TwitterのBotを作るという題材で行くぞよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;自動で呟くというわけだね&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソース全体&lt;a href=&quot;#ソース全体&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、ソースの全体になります。今回はこのソースの上部の方の解説になります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;main.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: Start ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの日本語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証用インスタンスの生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// const twitter = TwitterWebService.getInstance(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeyTwitterAccountJp, //API Key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeySecretTwitterAccountJp //API secret key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// );&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //アプリを連携認証する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authorize() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.authorize();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証を解除する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function reset() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.reset();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証後のコールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authCallback(request) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return twitter.authCallback(request);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの日本語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの英語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証用インスタンスの生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// const twitter = TwitterWebService.getInstance(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeyTwitterAccountEn, //API Key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   apiKeySecretTwitterAccountEn //API secret key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// );&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //アプリを連携認証する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authorize() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.authorize();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証を解除する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function reset() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   twitter.reset();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// //認証後のコールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function authCallback(request) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return twitter.authCallback(request);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Aの英語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: End ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法B: OAuth1.createServiceを使った認証およびコールバック: Start ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの日本語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function getTwitterServiceJp() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // Create a new service with the given name. The name will be used when&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // persisting the authorized token, so ensure it is unique within the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // scope of the property store.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return OAuth1.createService(&apos;twitter&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the endpoint URLs.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAccessTokenUrl(&apos;https://api.twitter.com/oauth/access_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setRequestTokenUrl(&apos;https://api.twitter.com/oauth/request_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAuthorizationUrl(&apos;https://api.twitter.com/oauth/authorize&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the consumer key and secret.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerKey(apiKeyTwitterAccountJp)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerSecret(apiKeySecretTwitterAccountJp)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the name of the callback function in the script referenced&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // above that should be invoked to complete the OAuth flow.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setCallbackFunction(&apos;authCallback&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the property store where authorized tokens should be persisted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setPropertyStore(PropertiesService.getUserProperties());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Twitter&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRequestTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/request_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/authorize&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerKey&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountJp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessToken&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showSidebarToAuthJp&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authorize&amp;lt;/a&amp;gt;. &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;Reopen the sidebar when the authorization is complete.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showSidebar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackJp&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Success! You can close this tab.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Denied. You can close this tab&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの日本語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// function getTwitterServiceEn() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // Create a new service with the given name. The name will be used when&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // persisting the authorized token, so ensure it is unique within the&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   // scope of the property store.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//   return OAuth1.createService(&apos;twitter&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the endpoint URLs.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAccessTokenUrl(&apos;https://api.twitter.com/oauth/access_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setRequestTokenUrl(&apos;https://api.twitter.com/oauth/request_token&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setAuthorizationUrl(&apos;https://api.twitter.com/oauth/authorize&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the consumer key and secret.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerKey(apiKeyTwitterAccountEn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setConsumerSecret(apiKeySecretTwitterAccountEn)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the name of the callback function in the script referenced&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // above that should be invoked to complete the OAuth flow.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setCallbackFunction(&apos;authCallback&apos;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     // Set the property store where authorized tokens should be persisted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//     .setPropertyStore(PropertiesService.getUserProperties());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Twitter&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRequestTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/request_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/authorize&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerKey&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountEn&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerSecret&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessToken&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showSidebarToAuthEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authorize&amp;lt;/a&amp;gt;. &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;Reopen the sidebar when the authorization is complete.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showSidebar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackEn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Success! You can close this tab.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Denied. You can close this tab&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法B: OAuth1.createServiceを使った認証およびコールバック: End ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const service = twitter.getService(); // 方法Aによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.twitter.com/1.1/statuses/update.json&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;method&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &apos;headers&apos; : {Authorization: &apos;Bearer &apos; + bearerTokenTwitterAccount},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;muteHttpExceptions&quot; : true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 例外エラー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Error:&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;decideSentenceToTweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;・&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`sentenceToTweet:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentenceToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;offsetAmountOfRow&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;212&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;randomFloat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;amountOfRow&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;offsetAmountOfRow&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;213&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;214&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;215&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;216&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;selectWordsToTweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;217&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultRatio&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;218&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularRatio&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;219&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;220&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;221&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;222&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;spreadsheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;223&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;224&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;225&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;226&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;227&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;228&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// decide regular or irregular.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;229&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;230&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: irregularIndex is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;231&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;232&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;irregularIndex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularRatio&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;233&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;234&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;235&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: isIrregular is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;236&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;237&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;isIrregular&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;238&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// irregular process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;239&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;240&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;241&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;242&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;243&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;244&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;245&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;246&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;247&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;248&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;249&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_language&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;250&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWords&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;251&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_language&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;252&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: irregularWord is&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;253&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;254&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;irregularWord&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;255&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;256&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;257&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;258&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;259&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;260&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;261&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// regular process.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;262&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;263&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;264&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;265&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;266&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;267&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;268&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;269&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;270&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;271&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;272&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;273&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;274&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;275&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;276&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;column_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;277&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;278&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;279&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`cell_amount_of_word_cardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;280&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`column_word_cardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;281&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`cell_amount_of_word_george:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;282&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`column_word_george:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;283&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;284&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_cardinal&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;285&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;286&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_cardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;287&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cell_amount_of_word_george&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;288&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectRowAtRandom&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;289&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;selectedRow&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_word_george&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;290&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;291&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`amountOfWordsCardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;amountOfWordsCardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;292&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`wordCardinal:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;293&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`amountOfWordsGeorge:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;amountOfWordsGeorge&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;294&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`wordGeorge:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;295&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;296&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;wordCardinal&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;wordGeorge&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;297&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: `&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;298&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;299&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArrayToTweet&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;300&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;301&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;302&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;303&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Japanese mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;304&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;305&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;306&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;307&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;308&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// English mode.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;309&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selectWordsToTweet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;310&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decideSentenceToTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;wordArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;311&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;312&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;313&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;constants.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;tweet&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating2nd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;tweetメモ書き&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameDisseminating3rd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;replyRecord&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheetNameOthers1st&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;A1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_cardinal_1st&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;C1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_george_1st&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;E1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_jp_for_irregular_1st&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;G1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_cardinal_1st&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;I1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_george_1st&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cell_amount_of_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;K1&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_word_en_for_irregular_1st&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row_start_of_word_list&lt;/span&gt;&lt;span&gt;                   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_jp_cardinal_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;カーディナル&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_jp_george_1st&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ジョージ&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_en_cardinal_1st&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Cardinal&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defaultWord_en_george_1st&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;George&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountJp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountJp&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountJp&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accessTokenSecretTwitterAccountEn&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeyTwitterAccountEn&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiKeySecretTwitterAccountEn&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;lib.gs&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;repeat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Twitter Appで認証を受ける準備を行う&lt;a href=&quot;#twitter-appで認証を受ける準備を行う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは、Twitter側で設定を行う部分になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Twitter Appの作成&lt;a href=&quot;#twitter-appの作成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まずは、Botとして動かすTwitterアカウントを作成します。&lt;/p&gt;&lt;p&gt;そして、Developer Portalにアクセスします。&lt;/p&gt;&lt;a href=&quot;https://x.com/login?redirect_after_login=https%3A%2F%2Fdeveloper.twitter.com%2Fen%2Fportal%2Fdashboard&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://abs.twimg.com/responsive-web/client-web/icon-ios.77d25eba.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;X (formerly Twitter)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;x.com&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;x.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;アカウントを作成したばかりですとまだアプリが出来ていないと思うので、アプリを作成します。&lt;/p&gt;&lt;p&gt;以下のように、色々と入力して、アプリ名なども埋めていくと、API key、API key secret、Bearer Tokenが表示されたページに飛ぶと思います。&lt;/p&gt;&lt;p&gt;この時点の認証情報は、ツイートするためには使いませんのでメモしなくて大丈夫です。
&lt;img loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;1126&quot; src=&quot;/_astro/01.B-JwV6MU_Z2qduQN.webp&quot; srcset=&quot;/_astro/01.B-JwV6MU_Z18fjmN.webp 640w, /_astro/01.B-JwV6MU_1zawsP.webp 750w, /_astro/01.B-JwV6MU_ZauuNN.webp 828w, /_astro/01.B-JwV6MU_Z1LN7F.webp 1080w, /_astro/01.B-JwV6MU_Z1O5exO.webp 1280w, /_astro/01.B-JwV6MU_Z20JACH.webp 1668w, /_astro/01.B-JwV6MU_Z2qduQN.webp 1886w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;OAuthのレベルの設定&lt;a href=&quot;#oauthのレベルの設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、以下の画像内の「User authentication settings」から、OAuth設定をします。「Set up」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2980&quot; height=&quot;1520&quot; src=&quot;/_astro/04.BILr5gyu_1uJnhs.webp&quot; srcset=&quot;/_astro/04.BILr5gyu_Z1s0nU.webp 640w, /_astro/04.BILr5gyu_Z1Fvn4R.webp 750w, /_astro/04.BILr5gyu_Z1ylKaL.webp 828w, /_astro/04.BILr5gyu_Z1hmW2z.webp 1080w, /_astro/04.BILr5gyu_1rzi3s.webp 1280w, /_astro/04.BILr5gyu_1Y0vTL.webp 1668w, /_astro/04.BILr5gyu_Z18hMPm.webp 2048w, /_astro/04.BILr5gyu_Z2hvBCP.webp 2560w, /_astro/04.BILr5gyu_1uJnhs.webp 2980w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Set up」をクリックしてこの画面に遷移したら、「OAuth 1.0a」を選択します。（「OAuth 2.0」を選ぶとツイートの投稿ができません。）&lt;/p&gt;&lt;p&gt;そして、App permissionsでは「Read and write」もしくは「Read and write and Direct message」を選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;1416&quot; src=&quot;/_astro/05.DxvkgMdh_fzCz.webp&quot; srcset=&quot;/_astro/05.DxvkgMdh_Z9oQyK.webp 640w, /_astro/05.DxvkgMdh_qmuWk.webp 750w, /_astro/05.DxvkgMdh_LDSAb.webp 828w, /_astro/05.DxvkgMdh_fzCz.webp 996w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、コールバックURIを入力します。&lt;/p&gt;&lt;p&gt;このコールバックURIは、&lt;code&gt;https://script.google.com/macros/d/&amp;lt;スクリプトID&amp;gt;/usercallback&lt;/code&gt;　という形式になります。&lt;/p&gt;&lt;p&gt;GASの編集画面でここから確認できます。それ以外の項目は何でも良さそうなので、僕は以下のように入力しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1040&quot; height=&quot;1228&quot; src=&quot;/_astro/06.DZQ7xHsU_1FP8aY.webp&quot; srcset=&quot;/_astro/06.DZQ7xHsU_1DUPse.webp 640w, /_astro/06.DZQ7xHsU_1Ah0QR.webp 750w, /_astro/06.DZQ7xHsU_1wXbBD.webp 828w, /_astro/06.DZQ7xHsU_1FP8aY.webp 1040w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2672&quot; height=&quot;1548&quot; src=&quot;/_astro/07.B1WUKh07_1QEwWg.webp&quot; srcset=&quot;/_astro/07.B1WUKh07_1XhKu8.webp 640w, /_astro/07.B1WUKh07_ZolruA.webp 750w, /_astro/07.B1WUKh07_o8C6w.webp 828w, /_astro/07.B1WUKh07_Z1Sitc1.webp 1080w, /_astro/07.B1WUKh07_Z12l2N1.webp 1280w, /_astro/07.B1WUKh07_2hDkvt.webp 1668w, /_astro/07.B1WUKh07_Z1hjs4H.webp 2048w, /_astro/07.B1WUKh07_Z1nKRys.webp 2560w, /_astro/07.B1WUKh07_1QEwWg.webp 2672w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Consumer Keysの取得：API keyとAPI key secret&lt;a href=&quot;#consumer-keysの取得api-keyとapi-key-secret&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OAuth設定を変えると、Access TokenやConsumer API Keyを再発行しないと認証できなくなりますので、このページからkeyなどの再発行をします。（「API Key and Secret」の部分）
&lt;img loading=&quot;lazy&quot; width=&quot;2288&quot; height=&quot;1146&quot; src=&quot;/_astro/02.azAvgelX_Z5bIUd.webp&quot; srcset=&quot;/_astro/02.azAvgelX_peEvj.webp 640w, /_astro/02.azAvgelX_1jNisq.webp 750w, /_astro/02.azAvgelX_1qWUmw.webp 828w, /_astro/02.azAvgelX_Z25SHQ2.webp 1080w, /_astro/02.azAvgelX_Ha3vM.webp 1280w, /_astro/02.azAvgelX_ZsaaA2.webp 1668w, /_astro/02.azAvgelX_ZVcCw1.webp 2048w, /_astro/02.azAvgelX_Z5bIUd.webp 2288w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、それらの認証情報をメモしておきます。&lt;/p&gt;&lt;p&gt;（ちなみに、僕がBotを作った際は、「Bearer Token」は使いませんでした。）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Tokenの取得：Access TokenとAccess Token secret&lt;a href=&quot;#tokenの取得access-tokenとaccess-token-secret&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、上の画像内にある「Access Token and Secret」からAccess TokenとAccess Token secretを発行します。&lt;/p&gt;&lt;p&gt;一応、発行した画面から、API keyなども確認することが出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1240&quot; height=&quot;1358&quot; src=&quot;/_astro/03.C_01UIS9_Z10PdOq.webp&quot; srcset=&quot;/_astro/03.C_01UIS9_29Ru7w.webp 640w, /_astro/03.C_01UIS9_ZoO8Jp.webp 750w, /_astro/03.C_01UIS9_26KcAz.webp 828w, /_astro/03.C_01UIS9_Z2g0jO2.webp 1080w, /_astro/03.C_01UIS9_Z10PdOq.webp 1240w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;GAS→Twitter Appへの認証を行う&lt;a href=&quot;#gastwitter-appへの認証を行う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GASからTwitter APIを使うための情報が手に入ったので、今度はGASで処理を組み立てていきます。GoogleスプレッドシートからApps Scriptを立ち上げ、作成していきました。&lt;/p&gt;&lt;p&gt;2通りの方法で行いました。どちらかを試してみてください。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;方法A：TwitterWebServiceの利用&lt;a href=&quot;#方法atwitterwebserviceの利用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、TwitterWebServiceを利用する方法です。こちらを利用するためにTwitterWebServiceのライブラリを追加しなければなりません。&lt;/p&gt;&lt;p&gt;TwitterWebServiceのスクリプトIDは、「1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF」です。僕はバージョン2を使用しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1840&quot; height=&quot;878&quot; src=&quot;/_astro/08.BZAB-rd3_Z1KiM1Q.webp&quot; srcset=&quot;/_astro/08.BZAB-rd3_2m6sDl.webp 640w, /_astro/08.BZAB-rd3_ZOe8SS.webp 750w, /_astro/08.BZAB-rd3_1Q0nLs.webp 828w, /_astro/08.BZAB-rd3_Z1B85uB.webp 1080w, /_astro/08.BZAB-rd3_1YL0RE.webp 1280w, /_astro/08.BZAB-rd3_Zg3dw3.webp 1668w, /_astro/08.BZAB-rd3_Z1KiM1Q.webp 1840w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、TwitterWebServiceを使った認証は、以下のソースで行いました。まず、&lt;code&gt;authorize()&lt;/code&gt;を実行します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: Start ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//認証用インスタンスの生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TwitterWebService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getInstance&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;//API Key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;//API secret key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//アプリを連携認証する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;twitter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//認証を解除する&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reset&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;twitter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reset&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;//認証後のコールバック&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法A: TwitterWebServiceを使った認証およびコールバック: End ----------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;すると、コンソールのログの方に認証用のURLが表示されるので、そのURLにアクセスするとこんな感じの画面が出てきます。
&lt;img loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;410&quot; src=&quot;/_astro/09.DsSZ9WLc_ZdKLu5.webp&quot; srcset=&quot;/_astro/09.DsSZ9WLc_ZupEbQ.webp 640w, /_astro/09.DsSZ9WLc_ZdKLu5.webp 675w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方法B：OAuth1.createServiceの利用&lt;a href=&quot;#方法boauth1createserviceの利用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらでは、OAuth1のcreateServieという機能を使います。&lt;/p&gt;&lt;p&gt;OAuth1のスクリプトIDは、「1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s」です。僕はバージョン18を使用しました。と同様に設定します。&lt;/p&gt;&lt;p&gt;そして、ライブラリを入れたら、以下のソースで認証を行いました。showSidebarToAuthEn()を実行します。すると、スプレッドシートの方にサイドバーが表示され、そこから方法Aと同様の認証画面に遷移することができます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: Start ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OAuth1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createService&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Twitter&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/access_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRequestTokenUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/request_token&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAuthorizationUrl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://api.twitter.com/oauth/authorize&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerKey&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;)    &lt;/span&gt;&lt;span&gt;// ConsumerAPIKey&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setConsumerSecret&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;// ConsumerAPIKeySecret&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setAccessToken&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// AccessTokenとAccessTokenSecret&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;showSidebarToAuthEn&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasAccess&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;authorize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createTemplate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;a href=&quot;&amp;lt;?= authorizationUrl ?&amp;gt;&quot; target=&quot;_blank&quot;&amp;gt;Authorize&amp;lt;/a&amp;gt;. &apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&apos;Reopen the sidebar when the authorization is complete.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorizationUrl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;template&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;evaluate&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getUi&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;showSidebar&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authCallbackEn&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;twitterService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;handleCallback&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Success! You can close this tab.&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HtmlService&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createHtmlOutput&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Denied. You can close this tab&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 方法Bの英語アカウント用: End ----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;認証出来たので、&lt;code&gt;postTweet()&lt;/code&gt;を実行します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const service = twitter.getService(); // 方法Aによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.twitter.com/1.1/statuses/update.json&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;method&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &apos;headers&apos; : {Authorization: &apos;Bearer &apos; + bearerTokenTwitterAccount},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;muteHttpExceptions&quot; : true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 例外エラー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Error:&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;実行してツイートできていなかったら、もしかしたら次の項の部分が出来ていないかもです・・・&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;アクセスレベルを「Essential」から「Elevated」以上にする。&lt;a href=&quot;#アクセスレベルをessentialからelevated以上にする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これまで紹介した方法で認証部分は出来たのですが、まだ出来ない場合があります。&lt;/p&gt;&lt;p&gt;その出来ない場合というのは、アクセスレベルが&lt;code&gt;Essential access&lt;/code&gt;だと以下のエラー文が出てきて、APIでツイートの投稿を実行できないことがあります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;{ [Exception: Request failed for https://api.twitter.com returned code 403. Truncated server response: {&quot;&lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;&quot;:[{&quot;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;&quot;:&quot;&lt;/span&gt;&lt;span&gt;You&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;currently&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;have&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Essential&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;access&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;which&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;access&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Twitter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpoints&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;only.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;If&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;you&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;need&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;access&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpo...&lt;/span&gt;&lt;span&gt; (use &lt;/span&gt;&lt;span&gt;muteHttpExceptions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;option&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;examine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;full&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;)] name: &lt;/span&gt;&lt;span&gt;&apos;Exception&apos;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;どうやら現在のTwitter APIでは、このアクセスレベルによって、行える処理に制限がかかるそうです。そして、今回行いたいツイートの投稿は、&lt;code&gt;Essential access&lt;/code&gt;では出来ません。&lt;/p&gt;&lt;p&gt;「Essential」だとAPI v2.0しか利用できず、「Elevated」からAPI v1.1が利用できる仕様だそうです。&lt;/p&gt;&lt;p&gt;また、このアクセスレベルというものはTwitterの公式ではこのように発表されています。
&lt;img loading=&quot;lazy&quot; width=&quot;1343&quot; height=&quot;686&quot; src=&quot;/_astro/10.Dnp97dhJ_Zs1niu.webp&quot; srcset=&quot;/_astro/10.Dnp97dhJ_7HX2G.webp 640w, /_astro/10.Dnp97dhJ_Z1zBffu.webp 750w, /_astro/10.Dnp97dhJ_1SfYMW.webp 828w, /_astro/10.Dnp97dhJ_Z2ka0TF.webp 1080w, /_astro/10.Dnp97dhJ_1gkPwR.webp 1280w, /_astro/10.Dnp97dhJ_Zs1niu.webp 1343w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのため、アクセスレベルをデベロッパーポータル上で、「Elevated」以上にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1879&quot; height=&quot;596&quot; src=&quot;/_astro/11.D7qwKMhe_1sNki1.webp&quot; srcset=&quot;/_astro/11.D7qwKMhe_ZHPUX6.webp 640w, /_astro/11.D7qwKMhe_25F5W.webp 750w, /_astro/11.D7qwKMhe_1jlb2l.webp 828w, /_astro/11.D7qwKMhe_qsxRr.webp 1080w, /_astro/11.D7qwKMhe_1C1lXN.webp 1280w, /_astro/11.D7qwKMhe_ZqlcBX.webp 1668w, /_astro/11.D7qwKMhe_1sNki1.webp 1879w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この「Elevated」以上にするには、数々の英文による質問文に回答しなければなりません。その部分は割愛しますが、意外とちゃんとした文法ではない英文を使い回しても審査が一瞬で完了したりします。一体どのような内容だとアウトなのでしょうか・・・？&lt;/p&gt;&lt;p&gt;Elevatedのアクセスレベルになると、以下の画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2300&quot; height=&quot;938&quot; src=&quot;/_astro/12.G0nLE4bM_Zi94f5.webp&quot; srcset=&quot;/_astro/12.G0nLE4bM_6RU55.webp 640w, /_astro/12.G0nLE4bM_PmCoO.webp 750w, /_astro/12.G0nLE4bM_Z1SxmMA.webp 828w, /_astro/12.G0nLE4bM_Z30hxG.webp 1080w, /_astro/12.G0nLE4bM_Z1sA2Di.webp 1280w, /_astro/12.G0nLE4bM_Z16JnVJ.webp 1668w, /_astro/12.G0nLE4bM_Z2fLLDE.webp 2048w, /_astro/12.G0nLE4bM_Zi94f5.webp 2300w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Twitter APIでツイートを投稿する&lt;a href=&quot;#twitter-apiでツイートを投稿する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;認証周りの設定が完了したので、ツイートを投稿します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postTweet&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// const service = twitter.getService(); // 方法Aによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;JP&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceJp&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountJp&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;EN&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTwitterServiceEn&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 方法Bによるサービス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bearerTokenTwitterAccountEn&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.twitter.com/1.1/statuses/update.json&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;method&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;post&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &apos;headers&apos; : {Authorization: &apos;Bearer &apos; + bearerTokenTwitterAccount},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// &quot;muteHttpExceptions&quot; : true,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;payload&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sentence&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endPointUrl&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// 例外エラー処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Error:&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下のレスポンスが返ってくれば、ツイートが出来ていると思われます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;toString:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getResponseCode:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getContent:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getAllHeaders:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getHeaders:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getContentText:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getAs:&lt;/span&gt;&lt;span&gt; [Function],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;getBlob:&lt;/span&gt;&lt;span&gt; [Function] }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふ〜、終わったあ。こういう認証部分がけっこう面倒いのよな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;要するにスゴく面倒くさかったんだね&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Node.js】Seleniumでテスト自動化ツール用ライブラリを作った</title><link>https://endorphinbath.com/posts/nodejs-selenium-auto-test-library/</link><guid isPermaLink="true">https://endorphinbath.com/posts/nodejs-selenium-auto-test-library/</guid><description>Node.js上でSeleniumを使用したテスト自動化ツールを、楽に作るためのライブラリを作りました。このツールで、OutSystemsを始めとしたローコードやノーコードで作ったシステムのテストを自動化できるかもです。</description><pubDate>Tue, 28 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん・・・、OutSystemsで作ったシステムだから、打鍵しないと確認できないなぁ・・・。せっかく、製造で工数を減らしているのに、テストコードを書けないのはネックだよなぁ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;一体どうすりゃこんな膨大な手作業を無くせるんだぁ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_102.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;テッテレ〜！ Selenium〜！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれ？ まるで、ド◯えもんのような容姿になった？ 声も変わった？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;容姿が変わったのは錯覚だね。それから声も変わってないね。ヘリウムじゃなくてセレニウムだね。 なんか、いろんな言語で使えるテスト自動化モジュールっぽいよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おー！ じゃあ、今回はそれを使ってみるか！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Seleniumについて&lt;a href=&quot;#seleniumについて&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Seleniumとは、テスト自動化ツールであり、主にJava、Ruby、Python、Javascriptで使用できます。&lt;/p&gt;&lt;p&gt;今回は、Javascript（Node.js）上で動くテスト自動化ツールを作っていきました。利用したOSはWindows 10で、ブラウザはChromeです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Seleniumを使える環境を作る&lt;a href=&quot;#seleniumを使える環境を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まずは環境構築です。最初にNode.jsをインストールします。こんなPowershellの画像が出てきたらインストール完了です。
&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20220101_01.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、&lt;code&gt;npm install&lt;/code&gt;します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;selenium-webdriver&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocha&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--save&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そしたら、最後にchromedriverを入手します。僕は&lt;a href=&quot;https://sites.google.com/chromium.org/driver/downloads&quot; target=&quot;_blank&quot;&gt;このページ&lt;/a&gt;から入手しました。&lt;/p&gt;&lt;p&gt;そして、入手したchromedriverを実行したいフォルダの中に置いたら、Seleniumを実行する環境は完成です！&lt;/p&gt;&lt;p&gt;最小構成:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;execution_directory&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;chromedriver.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;index.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;package.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;このフォルダの状態で以下のコマンドを実行すると、テストが開始されます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mocha&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index.js&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--timeout&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;package.jsonの中身&lt;a href=&quot;#packagejsonの中身&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;package.jsonはそのフォルダ内に適用されるコンフィグの意味合いを持つファイルです。&lt;/p&gt;&lt;p&gt;そして、Package.jsonを編集すると、実行するスクリプトを短く出来ます。例えば以下のように設定するとこのように入力するとテストを開始できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;psl&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;npx mocha kouhochi-ichiran.js --timeout 0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;シェル:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;psl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h2&gt;ツールを作るためのライブラリ&lt;a href=&quot;#ツールを作るためのライブラリ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、テスト自動化ツールを作るためのライブラリを作りました。&lt;/p&gt;&lt;p&gt;ディレクトリ構成としては下記のようなイメージです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;./&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── lib/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── lib-methods.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   ├── lib-variables.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│   └── getXpathByElement.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── screen-01.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── screen-02.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── package.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;細かいソースは公開できませんが、役割としては、以下のように分担させました。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;lib-variables.js📖&lt;a href=&quot;#lib-variablesjs&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このファイルにはクラスだけが入っています。そして、それらのクラスは、変数として使用してもらうための属性値を持っています。例えば、個々の画面の各々の要素のXPathが入っていたりします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;lib-methods.js🦾&lt;a href=&quot;#lib-methodsjs&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;関数とクラスが入っているファイルです。テストをするためによく使う処理をまとめました。&lt;/p&gt;&lt;p&gt;OperatorやInspectorは、基本的にとある属性（もしくは要素）からどの属性（もしくは要素）を取得したりクリックするかが記述されたメソッドを持っているクラスになります。こんなイメージです。
&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/01/20220101_02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;getXpathByElement.js🧗&lt;a href=&quot;#getxpathbyelementjs&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一般的にDOMから要素のXPathを取得する方法は、ブラウザの開発者ツールからとされています。
しかし、Seleniumで要素にアクセスするためにいちいちDOMを右クリックしてXPathを取得するのも面倒だと思います。僕の場合は、300回右クリックしてXPathをメモするのは嫌だったので、一気にXPathを取得する方法を探しました。&lt;/p&gt;&lt;p&gt;今回の方法では、2つファイルを作り実現しました。作るファイルは下記の責務で分かれています:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ブラウザで実行させるスクリプトが入ったファイル&lt;/li&gt;
&lt;li&gt;普通にseleniumを実行するファイル&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Chromeで実行し、対象のCSSクラス名は&lt;code&gt;checkbox&lt;/code&gt;でした。&lt;/p&gt;&lt;p&gt;まず、ブラウザ側のファイルです。こちらの&lt;a href=&quot;https://qiita.com/ProjectICKX/items/eb4a48598a15675897cb&quot; target=&quot;_blank&quot;&gt;Qiita記事&lt;/a&gt;を参考にしました。
最後の方は文法としては変ですが、配列のインデックスをスクリプトに載せるために&lt;code&gt;&quot;scriptSeparator&quot;&lt;/code&gt;と記述しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getXpathByElement&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NODE_TYPE_ELEMENT_NODE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instanceof&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Array&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NODE_TYPE_ELEMENT_NODE&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ErrorException&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;nodes other than the element node was passed. node_type:&apos;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&apos; node_name:&apos;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stacker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeName&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toLowerCase&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeName&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_count&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;children&lt;/span&gt;&lt;span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_count&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;node_point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;node_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;[&apos;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;node_point&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&apos;]&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;stacker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;unshift&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;node_name&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; ((&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;parentNode&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nodeName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;#document&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stacker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;toLowerCase&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getXpathByElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementsByClassName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;checkbox&quot;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;&quot;scriptSeparator&quot;&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;そして、seleniumを実行するファイルです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;Builder&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;selenium-webdriver&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;fs&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lodash&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;separator&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;readFileSync&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`./&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;separator&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getXpathsByClassName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xpaths&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;lib/getXpathByElement.js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptFileName&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;scriptSeparator&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElements&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elements&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpaths&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;cloneDeep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xpaths&lt;/span&gt;&lt;span&gt;) );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;テスト&quot;&lt;/span&gt;&lt;span&gt;, () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;before&lt;/span&gt;&lt;span&gt;(() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Builder&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;forBrowser&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;chrome&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;after&lt;/span&gt;&lt;span&gt;(() &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;quit&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;{(&lt;/span&gt;&lt;span&gt;`URLを開いたり、対象の要素を画面上に表示する。`&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// URLを開いたり、対象の要素を画面上に表示する処理&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`XPath取得`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getXpathsByClassName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;checkbox&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;上記の他にも試したんですけど、上手く行きませんでした。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;driver.findElements(By.className(className))&lt;/code&gt;で取得した要素を&lt;code&gt;executeScript&lt;/code&gt;に渡す。: ブラウザ側で認識している要素とどうやら違うようで、返り値がすべてnullになったので、失敗。&lt;/li&gt;
&lt;li&gt;ブラウザ側でXPathの配列を作る。: メモリ不足エラーでブラウザが止まり、失敗。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Functions 🔧&lt;a href=&quot;#functions-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sleep&lt;/strong&gt;: レンダリングが終わるであろう時間だけ処理を待ちます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;assertEqual_and_log&lt;/strong&gt;: アサーションを行って、同時にログも出力します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;outputLog&lt;/strong&gt;: ログを出力します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;getStrRepeatedToMark&lt;/strong&gt;: 引数の文字列を繰り返して出力します。主にログの部分を見やすくするために使います。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Classes 👨‍👨‍👧‍👦&lt;a href=&quot;#classes-&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Operator&lt;/strong&gt; 🖱: 画面をスクロールしたり、クリックしたりする係です。クリックする際に同時に画面をスクロールするように実装しているつもりです。&lt;code&gt;openAppViaO365()&lt;/code&gt;については&lt;a href=&quot;https://qiita.com/Landmaster135/items/9d0064e86d42297ea84b&quot; target=&quot;_blank&quot;&gt;この記事&lt;/a&gt;で紹介しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inspector&lt;/strong&gt; 🔍: 画面の要素から属性値を取得したりする係です。&lt;code&gt;getPseudoElementsContentsByClassName()&lt;/code&gt;については&lt;a href=&quot;https://qiita.com/Landmaster135/items/c0f26163950425c50167&quot; target=&quot;_blank&quot;&gt;この記事&lt;/a&gt;で紹介しています。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Photographer&lt;/strong&gt; 📸: 画面をスクショする係です。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gofer&lt;/strong&gt; 🧹: 雑用です。 今のところ、配列をエクセルに貼り付けやすい形で出力したり、数字を0埋めします。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;使用例&lt;a href=&quot;#使用例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;例えば、Office365の画面を操作する場合:&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;Builder&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;until&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;selenium-webdriver&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;util&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;util&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;assert&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;lodash&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;path&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;fs&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fsp&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;require&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;fs/promises&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 一般ツール&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;waitTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;waitTime&lt;/span&gt;&lt;span&gt;) );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;assertEqual_and_log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;case_no&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;equal&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;case_no&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;expected&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;actual&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;remark&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;remark&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;repeatStr&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;repeat&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;repeatNumberToMark&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getTextLines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;separator&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;readFileSync&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`./&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;fileName&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;separator&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lines&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Selenium関連ツール&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Operator&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;openAppViaO365&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;40000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;openAppViaO365&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;manage&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;maximize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;i0116&quot;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;sendKeys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;idSIButton9&quot;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;b&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;i0118&quot;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;sendKeys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;idSIButton9&quot;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;c&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;idBtn_Back&quot;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;d&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;openAppDirect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;40000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;openAppDirect&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;openAppDev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;40000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;openAppDev&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;manage&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;maximize&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;//*[@id=&quot;Input_UsernameVal&quot;]&apos;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;sendKeys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;b&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;//*[@id=&quot;Input_PasswordVal&quot;]&apos;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;sendKeys&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;c&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;//*[@id=&quot;b6-Button&quot;]/button&apos;&lt;/span&gt;&lt;span&gt;)).&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;waitTimeToDisplay&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;d&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clickElementsByElementArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;elementArray&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;clickElementsByElementArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elementArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// scroll in the window.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arguments[0].scrollIntoView()&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;elementArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// click element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;elementArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clickElementsByXpathArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;clickElementsByXpathArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// scroll in the window.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arguments[0].scrollIntoView()&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// click element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;xpathArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clickElementsByIdArray&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sleepMilisecond&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;clickElementsByIdArray&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// scroll in the window.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arguments[0].scrollIntoView()&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sleepMilisecond&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// click element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sleepMilisecond&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;idArray&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;c&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clickElementByXpath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;clickElementByXpath&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// scroll in the window.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arguments[0].scrollIntoView()&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// click element.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;scrollDisplayToTargetXpath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;scrollDisplayToTargetXpath&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// scroll in the window.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;findElement&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;By&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xpath&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;driver&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeScript&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;arguments[0].scrollIntoView()&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputLog&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;getStrRepeatedToMark&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おし、なんとかテスト自動化の土台ができたな・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでローコードとかノーコードのテスト工数を減らしたいね&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】自分がブログで書いた記事のURLからスクレイピングしてドキュメントに出力する</title><link>https://endorphinbath.com/posts/gas-export-from-article/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-export-from-article/</guid><description>下書きを書かずに投稿してしまったブログの記事をスクレイピングして、Googleドライブ上に出力するツールを作りました。スクレイピングにエラーにならずに失敗した時のログを出力する処理も施しています。</description><pubDate>Sat, 25 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;バックアップは大事です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;意味深か？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ツールの概要をざっと紹介します。&lt;/p&gt;&lt;p&gt;僕はGoogleドライブの所定のフォルダに今まで書いたブログの記事の下書きを管理しているのですが、たまに下書きを書かずにWordPress上で公開まで行ってしまう記事があります。（例えば、この記事は「20211103」のIDが付いているのですが、その記事の下書きはありません。）
&lt;img loading=&quot;lazy&quot; width=&quot;2414&quot; height=&quot;1168&quot; src=&quot;/_astro/01.DjXm5OXr_cFc42.webp&quot; srcset=&quot;/_astro/01.DjXm5OXr_1rxOXc.webp 640w, /_astro/01.DjXm5OXr_2mfxSS.webp 750w, /_astro/01.DjXm5OXr_Z3BQ7c.webp 828w, /_astro/01.DjXm5OXr_v98fO.webp 1080w, /_astro/01.DjXm5OXr_1BrrEv.webp 1280w, /_astro/01.DjXm5OXr_DqNn3.webp 1668w, /_astro/01.DjXm5OXr_ykoHs.webp 2048w, /_astro/01.DjXm5OXr_cFc42.webp 2414w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2299&quot; height=&quot;1101&quot; src=&quot;/_astro/02.BlnO4Nd9_1cHM9y.webp&quot; srcset=&quot;/_astro/02.BlnO4Nd9_Z166I8G.webp 640w, /_astro/02.BlnO4Nd9_Zbp0d0.webp 750w, /_astro/02.BlnO4Nd9_CVd49.webp 828w, /_astro/02.BlnO4Nd9_Z2fmuFO.webp 1080w, /_astro/02.BlnO4Nd9_FTkez.webp 1280w, /_astro/02.BlnO4Nd9_24appy.webp 1668w, /_astro/02.BlnO4Nd9_Z23XaFB.webp 2048w, /_astro/02.BlnO4Nd9_1cHM9y.webp 2299w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2468&quot; height=&quot;526&quot; src=&quot;/_astro/03.DrcVEqPU_1irvcX.webp&quot; srcset=&quot;/_astro/03.DrcVEqPU_1YzrIu.webp 640w, /_astro/03.DrcVEqPU_Z16AHk4.webp 750w, /_astro/03.DrcVEqPU_Z13hu6q.webp 828w, /_astro/03.DrcVEqPU_Z1MSxTQ.webp 1080w, /_astro/03.DrcVEqPU_Z2ncJ3p.webp 1280w, /_astro/03.DrcVEqPU_Z1Kc8cQ.webp 1668w, /_astro/03.DrcVEqPU_Z1WsW6B.webp 2048w, /_astro/03.DrcVEqPU_1irvcX.webp 2468w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その際にこのツールが実行されると、Googleスプレッドシートで管理している台帳で公開済みになっている記事の内容を読み取って、Googleドキュメントとして出力してくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;2468&quot; height=&quot;583&quot; src=&quot;/_astro/04.Ca2CxSmL_LYvma.webp&quot; srcset=&quot;/_astro/04.Ca2CxSmL_Z1Wjq2F.webp 640w, /_astro/04.Ca2CxSmL_KKMk1.webp 750w, /_astro/04.Ca2CxSmL_2i5oMH.webp 828w, /_astro/04.Ca2CxSmL_Z2bEO7n.webp 1080w, /_astro/04.Ca2CxSmL_1zqys4.webp 1280w, /_astro/04.Ca2CxSmL_Z2cFFKr.webp 1668w, /_astro/04.Ca2CxSmL_Z2qVIiN.webp 2048w, /_astro/04.Ca2CxSmL_LYvma.webp 2468w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1933&quot; height=&quot;1253&quot; src=&quot;/_astro/05.C4gSsKs8_1H3NSW.webp&quot; srcset=&quot;/_astro/05.C4gSsKs8_1AnASj.webp 640w, /_astro/05.C4gSsKs8_2r6RvM.webp 750w, /_astro/05.C4gSsKs8_Z10U63.webp 828w, /_astro/05.C4gSsKs8_Z26P58t.webp 1080w, /_astro/05.C4gSsKs8_6l9PI.webp 1280w, /_astro/05.C4gSsKs8_1O0aLy.webp 1668w, /_astro/05.C4gSsKs8_1H3NSW.webp 1933w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールのソース&lt;a href=&quot;#ツールのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ツールのソースはこんな感じです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draftFolderId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAlreadyPostedList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; [], &lt;/span&gt;&lt;span&gt;alreadyPostedChr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;済&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of aticle already posted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedChr&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssColumns&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;ブログ_記事&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row_for_postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row_for_postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_postedNumber&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for get list from GSS.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;permalinkList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;permalinkList_formated&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index of row to start reading sheet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_date&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index of 「起票日」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_posted&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index og 「投稿済」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_permalink&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// index of 「パーマリンク」column.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get dateList and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_date&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;dateList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&apos;JST&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;yyyyMMdd&apos;&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get permalinkList and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;permalinkList&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_permalink&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;permalinkList_formated&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;permalinkList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get postedList.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_posted&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValues&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// create returnList&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedNumber&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;dateList_formated&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;permalinkList_formated&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;returnList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readYetReadArticles&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAlreadyPostedList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getYetReadList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exportYetReadArticles&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;yetReadArticlesList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://www.endorphinbath.com/&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;editFile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;editFileId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;docFile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body_docFile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;docFileName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endOfText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&amp;lt;p&amp;gt;以上になります！&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;      &amp;lt;/div&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;errorDocFile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body_errorDocFile&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// テンプレートファイル（「yyyyMMdd(E)」）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;templateFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 出力先フォルダ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;outputFolder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;draftFolderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 「ErrorLog_Batch」Docファイル&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;errorDocFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DocumentApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;openById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body_errorDocFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;errorDocFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBody&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;paragraph&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body_errorDocFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;appendParagraph&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;JST&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;yyyyMMdd&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;---ErrorLog---&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Read articles not read yet and which draft is nothing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;yetReadArticlesList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;targetUrl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UrlFetchApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getContentText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;UTF-8&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Get articleTitle and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;h1 class=&quot;entry-title&quot; itemprop=&quot;headline&quot;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;/h1&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;          /&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/        /&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Get articleText and cleansing.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;div class=&quot;entry-content cf&quot; itemprop=&quot;mainEntityOfPage&quot;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endOfText&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;iterate&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/p&amp;gt;&lt;/span&gt;&lt;span&gt;\n\n\n\n&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;/&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;p&amp;gt;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;lt;p&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Check whether scraping is correctly.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;docFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;_&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;articleTitle&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;indexOf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;h2&amp;gt;&amp;lt;span id=&quot;toc1&quot;&amp;gt;はじまり&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// Copy document with articleTitle.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;editFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;templateFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;makeCopy&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;docFileName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;outputFolder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;editFileId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;editFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;docFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DocumentApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;openById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;editFileId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body_docFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;docFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getBody&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// And write articleText.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;body_docFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;(); &lt;/span&gt;&lt;span&gt;// 全消去&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;paragraph&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body_docFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;appendParagraph&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;articleText&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;editFileId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;paragraph&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body_errorDocFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;appendParagraph&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;docFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;paragraph&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;body_errorDocFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;appendParagraph&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getYetReadList&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for prepare.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draftFolderId&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// Folder ID of draft for article.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_now&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date_format_8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;yyyyMMdd&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of folders.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of aticle not read yet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFiles&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_now&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// If draft of article exitsts, break while loop.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file_now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;date_format_8&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// If draft of article is nothing, ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// If Permalink is not null, ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;// Push Article into list.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exportPostedArticles&lt;/span&gt;&lt;span&gt;()  {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// declare for execute.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readGssColumns&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;yetReadArticlesList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readYetReadArticles&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;postedList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;exportYetReadArticles&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;yetReadArticlesList&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ツール作成時のハイライト&lt;a href=&quot;#ツール作成時のハイライト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;section&gt;&lt;h3&gt;1.　iteratorの初期化を忘れてハマった。&lt;a href=&quot;#1iteratorの初期化を忘れてハマった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;実際にハマった部分がここです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// .... (abbreviate) ....&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFiles&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// get list of aticle not read yet.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;alreadyPostedList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file_now&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// If draft of article exitsts, break while loop.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file_now&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;substring&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;date_format_8&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// If draft of article is nothing, ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// If Permalink is not null, ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;// Push Article into list.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]]);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yetReadList&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;return yetReadList;&lt;/code&gt;でどう足掻いても要素が１つしか出力されず、その解析に時間が掛かりました・・・。&lt;/p&gt;&lt;p&gt;原因は、&lt;code&gt;files&lt;/code&gt;がwhile文の中のiteratorの役割になっていますが、そのiteratorをforEach文の外で代入していたのが、そのバグの原因でした。そのせいで、for文が２回目に入る時に、iteratorが再代入されなかったのです。&lt;/p&gt;&lt;p&gt;先程貼った全ソースの中では、iteratorの代入文をforEachループの中に入れたので、解決しています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.　ParserをGAS上のライブラリに追加する。&lt;a href=&quot;#2parserをgas上のライブラリに追加する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回、GASで初めてスクレイピングを導入して、GAS上の「ライブラリ」という部分を初めて触りました。&lt;/p&gt;&lt;p&gt;「ファイル」「コード.gs」「ライブラリ」「サービス」と項目が並んでいるので、その右側の「＋」ボタンをクリックして、ライブラリの追加をしました。スクリプトIDは「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」で、検索するとこんな風に表示されるのでその状態で「追加」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2544&quot; height=&quot;1138&quot; src=&quot;/_astro/06.BaIH_2Zn_18yXHl.webp&quot; srcset=&quot;/_astro/06.BaIH_2Zn_2dPWWS.webp 640w, /_astro/06.BaIH_2Zn_Z6oLrv.webp 750w, /_astro/06.BaIH_2Zn_Z1NWv6X.webp 828w, /_astro/06.BaIH_2Zn_Z2aJNiU.webp 1080w, /_astro/06.BaIH_2Zn_ZR7T4R.webp 1280w, /_astro/06.BaIH_2Zn_Z2sbwUR.webp 1668w, /_astro/06.BaIH_2Zn_iKid9.webp 2048w, /_astro/06.BaIH_2Zn_18yXHl.webp 2544w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーし、網羅できたぞー。とりあえず、下書き云々カンヌンを気にせずに執筆できるようになりましたとさ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上になります！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おい！ やめろ！！ スクレイピングに使ってる識別文字列の一部を無闇に使うんじゃねえ！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;へっ？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【P5.js】描画したものの比率が歪んでいるときに対処したこと</title><link>https://endorphinbath.com/posts/p5js-fix-aspectratio/</link><guid isPermaLink="true">https://endorphinbath.com/posts/p5js-fix-aspectratio/</guid><description>P5.jsを描画させた時に縦横の比率がおかしくなる現象が起きたので、その回収までの過程を記載します。</description><pubDate>Fri, 24 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そういえばこの前、P5.jsのcanvasの歪みを直したな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;矯正しようか&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;改修前に起きていた事象&lt;a href=&quot;#改修前に起きていた事象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;改修前に起きていた事象が、まん丸の円を描画したはずなのに、なぜか縦に長い楕円が表示されていたというものです。
&lt;img loading=&quot;lazy&quot; width=&quot;2555&quot; height=&quot;1073&quot; src=&quot;/_astro/01.BWcVhl_J_1bLroj.webp&quot; srcset=&quot;/_astro/01.BWcVhl_J_180xcO.webp 640w, /_astro/01.BWcVhl_J_1l2YEK.webp 750w, /_astro/01.BWcVhl_J_2c7gDm.webp 828w, /_astro/01.BWcVhl_J_Z1XOdQo.webp 1080w, /_astro/01.BWcVhl_J_Z2iQfjG.webp 1280w, /_astro/01.BWcVhl_J_ZYdTfo.webp 1668w, /_astro/01.BWcVhl_J_ZFLmlI.webp 2048w, /_astro/01.BWcVhl_J_1bLroj.webp 2555w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、その時のコードがこれです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;result&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCanvas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;windowWidth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;windowHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;//canvasを指定した要素の子要素にする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;circle&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mouseX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mouseY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mouseClicked&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;事象の原因&lt;a href=&quot;#事象の原因&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;原因は、canvasのサイズをウインドウ全体の幅（赤色）と高さとしているため、ウインドウよりも幅が小さいブログ本文（青色）に描画したものを反映していたことでした。つまり、canvasの幅を小さくして高さはそのままでブログ本文に反映したため、canvasが縦長になったというわけです。
（開発者ツールを使うとまん丸（のよう）になり、使わないと縦長になったので気付きました・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;2555&quot; height=&quot;1073&quot; src=&quot;/_astro/02.B3x4pSdc_Z17etUh.webp&quot; srcset=&quot;/_astro/02.B3x4pSdc_Z1yDcxg.webp 640w, /_astro/02.B3x4pSdc_Z1lAK5k.webp 750w, /_astro/02.B3x4pSdc_Zuwt6I.webp 828w, /_astro/02.B3x4pSdc_MlXCW.webp 1080w, /_astro/02.B3x4pSdc_sjWaE.webp 1280w, /_astro/02.B3x4pSdc_1LWieW.webp 1668w, /_astro/02.B3x4pSdc_25oP8C.webp 2048w, /_astro/02.B3x4pSdc_Z17etUh.webp 2555w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;レッツ改修&lt;a href=&quot;#レッツ改修&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;改修したコードが以下になります。描画する要素の幅を取得して、その幅をcanvasの幅としています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;result&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;canvasWidth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;clientWidth&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCanvas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;canvasWidth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;windowHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;//canvasを指定した要素の子要素にする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 直径をマウスのx座標にする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;circle&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mouseX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mouseY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mouseClicked&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;改修した後の画面はこのように描画され、まん丸になっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2555&quot; height=&quot;1063&quot; src=&quot;/_astro/03.DFrs_17z_ZQVWjg.webp&quot; srcset=&quot;/_astro/03.DFrs_17z_1c6o1v.webp 640w, /_astro/03.DFrs_17z_1p8Ptr.webp 750w, /_astro/03.DFrs_17z_ZgNTs8.webp 828w, /_astro/03.DFrs_17z_Z1EHRPX.webp 1080w, /_astro/03.DFrs_17z_Z9LnMy.webp 1280w, /_astro/03.DFrs_17z_UXlbO.webp 1668w, /_astro/03.DFrs_17z_2gzPsQ.webp 2048w, /_astro/03.DFrs_17z_ZQVWjg.webp 2555w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はこんなもんです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;縦横の比率が直ってよかったね～。おじさんの顔はずっと細長いままだけど、それも直せるのかな？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕の顔の細長さは、どう頑張っても直せないね・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_020.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;覆水盆に返らず・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【WordPress】P5.jsをCocoon上で使用する</title><link>https://endorphinbath.com/posts/wordpress-p5js-on-cocoon/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wordpress-p5js-on-cocoon/</guid><description>P5.jsをCocoon上で動かしてみます。SiteGuardに引っ掛からずに表示させるようにしています。</description><pubDate>Thu, 23 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、WebページにProcessingの表現ができちゃうよ的なツールの「P5.js」をCocoonテーマのブログ上で使用する手順をまとめたよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あいよ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;今回の手順&lt;a href=&quot;#今回の手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回、P5.jsをCocoon上で使用するための設定手順は以下になります。僕は固定ページ上のみに設定しました。&lt;/p&gt;&lt;p&gt;※SiteGuardが入っている前提での設定手順になります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;まず、「Cocoon設定」の「アクセス解析・認証」では設定できないことを知る。&lt;/li&gt;
&lt;li&gt;なので、固定ページ内のHTMLの中にscriptタグを入れる。&lt;/li&gt;
&lt;li&gt;P5.jsの描画したものを表示する場所の指定をする。&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;1. 「Cocoon設定」の「アクセス解析・認証」では設定できないことを知る。&lt;a href=&quot;#1-cocoon設定のアクセス解析認証では設定できないことを知る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、僕はheadタグの中にmetaタグを入れたときと同様に、scriptタグを入れました。&lt;/p&gt;&lt;p&gt;画像では入っていませんが、「Cocoon設定」の「アクセス解析・認証」の「ヘッド用コード」の中に、以下のコードを入れました。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.min.js&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2249&quot; height=&quot;1254&quot; src=&quot;/_astro/01.DXP0ejw__Z1PRMwC.webp&quot; srcset=&quot;/_astro/01.DXP0ejw__152Eib.webp 640w, /_astro/01.DXP0ejw__1fGDaM.webp 750w, /_astro/01.DXP0ejw__ZtPj8h.webp 828w, /_astro/01.DXP0ejw__1nJS13.webp 1080w, /_astro/01.DXP0ejw__wVQqU.webp 1280w, /_astro/01.DXP0ejw__ZVOLWn.webp 1668w, /_astro/01.DXP0ejw__Z108P9b.webp 2048w, /_astro/01.DXP0ejw__Z1PRMwC.webp 2249w&quot; /&gt;&lt;/p&gt;&lt;p&gt;しかし、入れた後に「変更をまとめて保存」をクリックすると、こんな風にSiteGuardのチェックに引っ掛かってしまうのです。なんてことだ！
&lt;img loading=&quot;lazy&quot; width=&quot;2570&quot; height=&quot;569&quot; src=&quot;/_astro/02.DJE-_HzE_Z1TJUSg.webp&quot; srcset=&quot;/_astro/02.DJE-_HzE_RiTzb.webp 640w, /_astro/02.DJE-_HzE_ZkK0FP.webp 750w, /_astro/02.DJE-_HzE_2kBAX5.webp 828w, /_astro/02.DJE-_HzE_ZRHE7N.webp 1080w, /_astro/02.DJE-_HzE_Z1ttJ0F.webp 1280w, /_astro/02.DJE-_HzE_ZQJi7g.webp 1668w, /_astro/02.DJE-_HzE_Z15B5IT.webp 2048w, /_astro/02.DJE-_HzE_Z1VFXQ2.webp 2560w, /_astro/02.DJE-_HzE_Z1TJUSg.webp 2570w&quot; /&gt;&lt;/p&gt;&lt;p&gt;試しに自分のブログのDBに潜って、直接、p5.min.jsのファイルを置いてそこを読み取るようにソースを書き直してみたのですが、無情にも同じ画面が出てきました。Oh, my god.
&lt;img loading=&quot;lazy&quot; width=&quot;2570&quot; height=&quot;569&quot; src=&quot;/_astro/02.DJE-_HzE_Z1TJUSg.webp&quot; srcset=&quot;/_astro/02.DJE-_HzE_RiTzb.webp 640w, /_astro/02.DJE-_HzE_ZkK0FP.webp 750w, /_astro/02.DJE-_HzE_2kBAX5.webp 828w, /_astro/02.DJE-_HzE_ZRHE7N.webp 1080w, /_astro/02.DJE-_HzE_Z1ttJ0F.webp 1280w, /_astro/02.DJE-_HzE_ZQJi7g.webp 1668w, /_astro/02.DJE-_HzE_Z15B5IT.webp 2048w, /_astro/02.DJE-_HzE_Z1VFXQ2.webp 2560w, /_astro/02.DJE-_HzE_Z1TJUSg.webp 2570w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なので、headの中に置くという選択肢は諦めました。色々WAFをいじるのもあれなので。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 固定ページ内のHTMLの中にscriptタグを入れる。&lt;a href=&quot;#2-固定ページ内のhtmlの中にscriptタグを入れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、試した固定ページの中に入れてしまうという方法です。つまり、bodyタグの中に入れるということですね。これは上手くいきました。&lt;/p&gt;&lt;p&gt;「カスタムJavaScript」の中に書いたP5.jsのコードはこちらになります。白い丸が表示されます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCanvas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;windowWidth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;windowHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 直径をマウスのx座標にする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;circle&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mouseX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mouseY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mouseClicked&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;それで、固定ページに書いたHTMLはここに配置しました。
&lt;img loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;844&quot; src=&quot;/_astro/03.63eO-5T6_2SCxM.webp&quot; srcset=&quot;/_astro/03.63eO-5T6_2p6G7b.webp 640w, /_astro/03.63eO-5T6_ZsAl7X.webp 750w, /_astro/03.63eO-5T6_ICMik.webp 828w, /_astro/03.63eO-5T6_Z1aRw3.webp 1080w, /_astro/03.63eO-5T6_14xkB4.webp 1280w, /_astro/03.63eO-5T6_Z1Q51Am.webp 1668w, /_astro/03.63eO-5T6_2SCxM.webp 1912w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、表示はされました。&lt;/p&gt;&lt;p&gt;しかし、これだと記事の下に表示されてしまって、なんか違うんですよね・・・（「あ」と「い」の間に表示したい・・・）
&lt;img loading=&quot;lazy&quot; width=&quot;2251&quot; height=&quot;1091&quot; src=&quot;/_astro/04.CI2rWSYy_Z1EY6uy.webp&quot; srcset=&quot;/_astro/04.CI2rWSYy_ZIh2ns.webp 640w, /_astro/04.CI2rWSYy_Z2lJqlw.webp 750w, /_astro/04.CI2rWSYy_Z2erIsQ.webp 828w, /_astro/04.CI2rWSYy_ZS766m.webp 1080w, /_astro/04.CI2rWSYy_ZvYAIk.webp 1280w, /_astro/04.CI2rWSYy_1Kdnhr.webp 1668w, /_astro/04.CI2rWSYy_ZT2lUv.webp 2048w, /_astro/04.CI2rWSYy_Z1EY6uy.webp 2251w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. P5.jsの描画したものを表示する場所の指定をする。&lt;a href=&quot;#3-p5jsの描画したものを表示する場所の指定をする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;描画する場所を指定するためには、HTML上で描画するタグを指定するのと、Javascriptを修正する必要があります。まず、描画する場所はここに指定しました。（「あ」と「い」の間ですね。）
&lt;img loading=&quot;lazy&quot; width=&quot;1617&quot; height=&quot;566&quot; src=&quot;/_astro/06.Cl3nptNd_AYVQ8.webp&quot; srcset=&quot;/_astro/06.Cl3nptNd_WHEMS.webp 640w, /_astro/06.Cl3nptNd_Z2sxXi4.webp 750w, /_astro/06.Cl3nptNd_Z2klswT.webp 828w, /_astro/06.Cl3nptNd_ZRlGUU.webp 1080w, /_astro/06.Cl3nptNd_hkWup.webp 1280w, /_astro/06.Cl3nptNd_AYVQ8.webp 1617w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そういえば、先程記載し忘れていたのですが、このHTML文を書いた後にこのブロックからフォーカスアウトすると、そのブロックが以下の状態になります。この状態だとちゃんとページに保存されないので、「・・・」（三点リーダー）をクリックして、「HTMLに変換」をクリックします。&lt;/p&gt;&lt;p&gt;そうすると、更新したさいにちゃんとこのHTML文が反映されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1709&quot; height=&quot;356&quot; src=&quot;/_astro/05.Clq6ChR0_1EXVHl.webp&quot; srcset=&quot;/_astro/05.Clq6ChR0_qAOiT.webp 640w, /_astro/05.Clq6ChR0_ZcqAm0.webp 750w, /_astro/05.Clq6ChR0_Z22eBUT.webp 828w, /_astro/05.Clq6ChR0_Z1ILKTF.webp 1080w, /_astro/05.Clq6ChR0_e49Pw.webp 1280w, /_astro/05.Clq6ChR0_QcPEE.webp 1668w, /_astro/05.Clq6ChR0_1EXVHl.webp 1709w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「カスタムJavaScript」の中に書いたP5.jsのコードはこちらに修正しました。&lt;/p&gt;&lt;p&gt;&lt;code&gt;result&lt;/code&gt;のIDに描画されるようにします。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;result&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCanvas&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;windowWidth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;windowHeight&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;canvas&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parent&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;);  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;//canvasを指定した要素の子要素にする&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;draw&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;clear&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;circle&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;mouseX&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;mouseY&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mouseClicked&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;すると、このように表示され、目当ての場所にP5.jsが描画されました。
&lt;img loading=&quot;lazy&quot; width=&quot;2299&quot; height=&quot;1154&quot; src=&quot;/_astro/07.C3EozllX_2tEa21.webp&quot; srcset=&quot;/_astro/07.C3EozllX_ZmRQMK.webp 640w, /_astro/07.C3EozllX_wFL9m.webp 750w, /_astro/07.C3EozllX_Z1SjHPi.webp 828w, /_astro/07.C3EozllX_1njnOb.webp 1080w, /_astro/07.C3EozllX_1BdODD.webp 1280w, /_astro/07.C3EozllX_qSAwO.webp 1668w, /_astro/07.C3EozllX_Z28Qoa.webp 2048w, /_astro/07.C3EozllX_2tEa21.webp 2299w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2286&quot; height=&quot;656&quot; src=&quot;/_astro/08.Dw9EoiOR_9dzTF.webp&quot; srcset=&quot;/_astro/08.Dw9EoiOR_1tdI0o.webp 640w, /_astro/08.Dw9EoiOR_1WLoLp.webp 750w, /_astro/08.Dw9EoiOR_1c00RD.webp 828w, /_astro/08.Dw9EoiOR_1MqQEO.webp 1080w, /_astro/08.Dw9EoiOR_Z1mhNXf.webp 1280w, /_astro/08.Dw9EoiOR_1GE3R6.webp 1668w, /_astro/08.Dw9EoiOR_Z18JwRe.webp 2048w, /_astro/08.Dw9EoiOR_9dzTF.webp 2286w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんとか描画が出来て一安心です・・・。今回はこんなもんになります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでCocoonテーマでもProcessing的なことを書けるわけだね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【SQL】SAP HANAでDB処理が速くなるクエリ</title><link>https://endorphinbath.com/posts/saphana-faster-query/</link><guid isPermaLink="true">https://endorphinbath.com/posts/saphana-faster-query/</guid><description>ここで記載するクエリをSAP HANAのDBで使用すると、一般的なInsert文やExport文と比較して、実行速度が速くなりかつCPU使用量も削減することが出来ます。</description><pubDate>Mon, 20 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、SAP HANAでテーブルのレコードをEXPORTするために使用したSQLを紹介します。2012年リリースのHANA DBより以前のバージョンだと、１つのテーブルに2000万件以上レコードが存在する場合、ちゃんとEXPORT出来ないというバグが存在します。そのため、一時的にテーブルを分割したテーブルを用意する必要があり、その時のEXPORTの作業までに時短ができたクエリになります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;仏説摩訶般若波羅蜜多心経　観自在菩薩　行深般若波羅蜜多時　照見五蘊皆空　度一切苦厄　舎利子　色不異空　空不異色　色即是空　空即是色　受想行識亦復如是　舎利子　是諸法空相　不生不滅　不垢不浄　不増不減　是故空中・・・・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;冒頭の文がいきなり長いからってどさくさに紛れて般若心経を唱えるんじゃあない。 はい、般若心経じゃなくて、HANA SQLどうぞ～！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;速くなるSQL文&lt;a href=&quot;#速くなるsql文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、クエリの紹介になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;CREATE文&lt;a href=&quot;#create文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;速くする前ではただ単に分割一時テーブルを作成するだけですが、速くした後ではテーブルをパーティション化させて作成します。&lt;/p&gt;&lt;p&gt;このALTER TABLE文の一工夫を加えることで、INSERT文でレコードを追加する処理が、およそ半分くらいの時間で済み、CPU使用率も平均して半分くらいになります。&lt;/p&gt;&lt;p&gt;ALTER TABLE文のPARTITIONS句の数値は、増やしていくと段々効果が無くなってくるので、そこの検証および調整が必要です。&lt;/p&gt;&lt;p&gt;速くする前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; COLUMN &lt;/span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;INFO_NUMBER&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NVARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;NOT NULL&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_CD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NVARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;YEAR&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INTEGER&lt;/span&gt;&lt;span&gt; CS_INT,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;CC_Q_INFO_STATUS_CD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;TROUBLE_INFODB_LINK_DATE_TIME&quot;&lt;/span&gt;&lt;span&gt; LONGDATE CS_LONGDATE,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;TEMP_REG_READ_START_DAY&quot;&lt;/span&gt;&lt;span&gt; DAYDATE CS_DAYDATE,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;DEL_FLG&quot;&lt;/span&gt;&lt;span&gt; ALPHANUM() CS_ALPHANUM,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PRIMARY KEY&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;INFO_NUMBER&quot;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;UNLOAD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PRIORITY &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AUTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MERGE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;速くした後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;CREATE&lt;/span&gt;&lt;span&gt; COLUMN &lt;/span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;INFO_NUMBER&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NVARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;NOT NULL&lt;/span&gt;&lt;span&gt; ,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_CD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NVARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;YEAR&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INTEGER&lt;/span&gt;&lt;span&gt; CS_INT,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;CC_Q_INFO_STATUS_CD&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VARCHAR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;TROUBLE_INFODB_LINK_DATE_TIME&quot;&lt;/span&gt;&lt;span&gt; LONGDATE CS_LONGDATE,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;TEMP_REG_READ_START_DAY&quot;&lt;/span&gt;&lt;span&gt; DAYDATE CS_DAYDATE,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;DEL_FLG&quot;&lt;/span&gt;&lt;span&gt; ALPHANUM() CS_ALPHANUM,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PRIMARY KEY&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&quot;INFO_NUMBER&quot;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;UNLOAD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PRIORITY &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AUTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MERGE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DROP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PRIMARY KEY&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ALTER&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TABLE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PARTITION&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BY&lt;/span&gt;&lt;span&gt; ROUNDROBIN PARTITIONS &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;EXPORT文&lt;a href=&quot;#export文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらは速くした後では、分割一時テーブルからのEXPORTを並列実行してくれるようになります。カラム数が多い場合は、THREAD句の数字を減らして検証および調整が必要となります。&lt;/p&gt;&lt;p&gt;こちらも処理時間とCPU使用率が半分くらいになります。&lt;/p&gt;&lt;p&gt;速くする前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20211126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20201126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20201126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20201126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP3&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20211126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;USER_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20211126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;USER_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20211126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;速くした後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;EXPORT &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WARDROBE_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;WEATHER_INFO_TMP3&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;USER_INFO_TMP1&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;USER_INFO_TMP2&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;CONSULT_PARTY_INFO&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;CC_Q_INFO&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;WARDROBE_AP&quot;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&quot;CC_A_INFO&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; CSV &lt;/span&gt;&lt;span&gt;INTO&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/work/20211126_export&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WITH&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REPLACE&lt;/span&gt;&lt;span&gt; THREAD &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;wc⇒awk（SQLじゃなくてBashです。）&lt;a href=&quot;#wcawksqlじゃなくてbashです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらはCSVをEXPORTした後に、CSVの行数がレコード数と同じかどうかを確認するために使用したBashになるのですが、時短になったのでついでに記載しておきます。&lt;/p&gt;&lt;p&gt;大体、処理時間が2/3くらいに削減できます。&lt;/p&gt;&lt;p&gt;速くする前:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-l&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/work/20211126_export/taihi/index/WARDROBE_AP/WA/WARDROBE_INFO/data.cs&lt;/span&gt;&lt;span&gt;v&amp;gt;&lt;/span&gt;&lt;span&gt;linesResult.txt&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;速くした後:&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;END {print NR}&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/work/20211126_export/taihi/index/WARDROBE_AP/WA/WARDROBE_INFO/data.cs&lt;/span&gt;&lt;span&gt;v&amp;gt;&lt;/span&gt;&lt;span&gt;linesResult.txt&lt;/span&gt;&lt;span&gt; 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は時短できるSQLを紹介しました！ どうでした？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_020.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;得阿耨多羅三藐三菩提　故知般若波羅蜜多　是大神呪　是大明呪　是無上呪　是無等等呪　能除一切苦　真実不虚　故説般若波羅蜜多呪　即説呪日　羯諦　羯諦　波羅羯諦　波羅僧羯諦・・・・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ダメだ、内なる自分と戦ってるわ・・・ 今回はこのへんで！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GitHub】「github-readme-stats」と「github-profile-trophy」でGitHubをゴージャスに見せる</title><link>https://endorphinbath.com/posts/github-to-be-splendiferous/</link><guid isPermaLink="true">https://endorphinbath.com/posts/github-to-be-splendiferous/</guid><description>GitHubのプロフィール画面を豪華にするために、README.mdをいじりました。けっこう簡単にゴージャスになります。手が空いた時に設定してみて下さい。</description><pubDate>Sat, 18 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、GitHubをゴジャースにしちゃおうっていう回だね！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし行こう。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;出来上がりの想定&lt;a href=&quot;#出来上がりの想定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回の設定でこんなのが出来上がります。一気に彩り豊かになりました。（数値が弱そうですが、それでも彩り良くしてみたかったんです！！）&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2524&quot; height=&quot;1245&quot; src=&quot;/_astro/01.BG5FQPDF_Z2jWGzd.webp&quot; srcset=&quot;/_astro/01.BG5FQPDF_EjIWj.webp 640w, /_astro/01.BG5FQPDF_1xyy8G.webp 750w, /_astro/01.BG5FQPDF_1Gb4M6.webp 828w, /_astro/01.BG5FQPDF_Z1WrRVK.webp 1080w, /_astro/01.BG5FQPDF_THpGQ.webp 1280w, /_astro/01.BG5FQPDF_Zbvh8b.webp 1668w, /_astro/01.BG5FQPDF_ZwkFvA.webp 2048w, /_astro/01.BG5FQPDF_Z2jWGzd.webp 2524w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定の流れ：「github-readme-stats」&lt;a href=&quot;#設定の流れgithub-readme-stats&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、「github-readme-stats」のリポジトリに飛んでみましょう。&lt;/p&gt;&lt;a href=&quot;https://github.com/anuraghazra/github-readme-stats&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;anuraghazra&lt;/div&gt;&lt;/div&gt;&lt;div&gt;/&lt;/div&gt;&lt;div&gt;github-readme-stats&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Waiting for api.github.com...&lt;/div&gt;&lt;div&gt;&lt;div&gt;00K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;div&gt;0K&lt;/div&gt;&lt;span&gt;Waiting...&lt;/span&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そこにあるMarkdownを自分のusernameを入れて、自分のプロフィールページのREADME.mdに打ち込めば、動くかと思います。僕は、「GitHub Stats Card」と「Top Languages Card」を設定しました。&lt;/p&gt;&lt;p&gt;ここまでは普通に動くと思います。&lt;/p&gt;&lt;p&gt;しかし、横並びになりません。Markdownだと出来ないのかな？&lt;/p&gt;&lt;p&gt;そう思ったら、どうやら公式ページ曰く、HTMLを上手く打ち込めば横並びに表示できるそうなのです・・・。（これを見るまで、MarkdownにHTMLを打ち込めることを知らなかった・・・（笑））&lt;/p&gt;&lt;p&gt;この「github-readme-stats」の公式ページにはこんな記述があるかと思います。（2021/11/24時点）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github.com/anuraghazra/github-readme-stats&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;center&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github-readme-stats.vercel.app/api/pin/?username=anuraghazra&amp;amp;repo=github-readme-stats&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github.com/anuraghazra/github-readme-stats&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;center&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github-readme-stats.vercel.app/api/pin/?username=anuraghazra&amp;amp;repo=convoychat&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;これを打ち込んで、自分のプロフィール画面を見てみると・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;動きません（笑）&lt;a href=&quot;#動きません笑&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;なんでかなーと思って、色々webサーフィンしたり試してみると、どうやら、&lt;code&gt;github-readme-stats.vercel.app/api/pin/?username&lt;/code&gt;の&lt;code&gt;/pin&lt;/code&gt;の部分が要らないようなのです。（おいおい、公式だろ？とは思いましたが、まあそんなこともありますよね。）&lt;/p&gt;&lt;p&gt;それから、&lt;code&gt;/pin&lt;/code&gt;の部分を直して、layoutやthemeを公式ページのカタログを見ながら設定して、まあ落ち着きました。themeはtoyonightが最もしっくり来ました。上の方です。
&lt;img loading=&quot;lazy&quot; width=&quot;2524&quot; height=&quot;1245&quot; src=&quot;/_astro/01.BG5FQPDF_Z2jWGzd.webp&quot; srcset=&quot;/_astro/01.BG5FQPDF_EjIWj.webp 640w, /_astro/01.BG5FQPDF_1xyy8G.webp 750w, /_astro/01.BG5FQPDF_1Gb4M6.webp 828w, /_astro/01.BG5FQPDF_Z1WrRVK.webp 1080w, /_astro/01.BG5FQPDF_THpGQ.webp 1280w, /_astro/01.BG5FQPDF_Zbvh8b.webp 1668w, /_astro/01.BG5FQPDF_ZwkFvA.webp 2048w, /_astro/01.BG5FQPDF_Z2jWGzd.webp 2524w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h2&gt;設定の流れ：「github-profile-trophy」&lt;a href=&quot;#設定の流れgithub-profile-trophy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、「github-profile-trophy」でトロフィーの表示を設定しましょう。&lt;/p&gt;&lt;p&gt;こちらもそんなに難しくなく、theme選びに迷いました。&lt;/p&gt;&lt;p&gt;ステータスカードと同様にtokyonightで揃えたかったのですが、トロフィーの方はだいぶ配色が異なっていて、tokyonightだと白基調になってしまうのです！　なんてこった！&lt;/p&gt;&lt;p&gt;なので結局、トロフィーのthemeはDraculaに収まりました。下の方です。
&lt;img loading=&quot;lazy&quot; width=&quot;2524&quot; height=&quot;1245&quot; src=&quot;/_astro/01.BG5FQPDF_Z2jWGzd.webp&quot; srcset=&quot;/_astro/01.BG5FQPDF_EjIWj.webp 640w, /_astro/01.BG5FQPDF_1xyy8G.webp 750w, /_astro/01.BG5FQPDF_1Gb4M6.webp 828w, /_astro/01.BG5FQPDF_Z1WrRVK.webp 1080w, /_astro/01.BG5FQPDF_THpGQ.webp 1280w, /_astro/01.BG5FQPDF_Zbvh8b.webp 1668w, /_astro/01.BG5FQPDF_ZwkFvA.webp 2048w, /_astro/01.BG5FQPDF_Z2jWGzd.webp 2524w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;結局のREADME.mdのソース&lt;a href=&quot;#結局のreadmemdのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が、結局のところのREADME.mdのソースコードになります。ああ、一番上にあるデフォルトのプロフィール記述が懐かしい・・・（笑）&lt;/p&gt;&lt;p&gt;ちょっと余白がある方が好きなので、pタグで囲いました。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!-- - 👋 Hi, I’m @Landmaster135&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- 👀 I’m interested in ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- 🌱 I’m currently learning ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- 💞️ I’m looking to collaborate on ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- 📫 How to reach me ... --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Landmaster135/Landmaster135 is a ✨ special ✨ repository because its `README.md` (this file) appears on your GitHub profile.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;You can click the Preview link to take a look at your changes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;left&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github.com/anuraghazra/github-readme-stats&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;170.2em&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Landmaster135&apos;s GitHub stats&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github-readme-stats.vercel.app/api/?username=Landmaster135&amp;amp;theme=tokyonight&amp;amp;show_icons=true&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github.com/anuraghazra/github-readme-stats&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;170.2em&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Top Langs&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github-readme-stats.vercel.app/api/top-langs/?username=Landmaster135&amp;amp;layout=compact&amp;amp;theme=tokyonight&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github.com/ryo-ma/github-profile-trophy&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;img&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;alt&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Trophy&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://github-profile-trophy.vercel.app/?username=Landmaster135&amp;amp;theme=dracula&amp;amp;column=7&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!-- [![Top Langs](https://github-readme-stats.vercel.app/api/top-langs/?username=Landmaster135&amp;amp;layout=compact&amp;amp;theme=tokyonight)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;](https://github.com/anuraghazra/github-readme-stats)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[![Landmaster135&apos;s GitHub stats](https://github-readme-stats.vercel.app/api?username=Landmaster135&amp;amp;theme=tokyonight&amp;amp;show_icons=true)](https://github.com/anuraghazra/github-readme-stats) --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;!-- [![trophy](https://github-profile-trophy.vercel.app/?username=Landmaster135&amp;amp;theme=onedark&amp;amp;column=7&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)](https://github.com/ryo-ma/github-profile-trophy) --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はこんな感じだな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;青と赤が多めな見た目に落ち着いたな&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>今まで105缶の魚の缶詰を食べた僕がオススメのサバ缶を紹介します。</title><link>https://endorphinbath.com/posts/105-mackerel-recommend/</link><guid isPermaLink="true">https://endorphinbath.com/posts/105-mackerel-recommend/</guid><description>今まで105缶の魚の缶詰を食べた僕が、食べてきたサバ缶の中からオススメのサバ缶を紹介したいと思います。身を削る思いで、食べたサバ缶をランク付けしましたので、ぜひサバ缶を食べる時の参考にしてみて下さい。</description><pubDate>Thu, 16 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;他が全部A評価なのに、中性脂肪がE評価のせいで、再検査扱いになりました・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;何の話？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回はサバ缶の紹介になります。&lt;a href=&quot;#今回はサバ缶の紹介になります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この前に届いた健康診断の結果を見てみたら、中性脂肪だけがE評価を下されて再検査扱いとなってしまいました・・・。
おそらく、この2ヶ月間サバ缶を毎日1缶食べていたためだと思われます・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;513&quot; src=&quot;/_astro/01.BT4AMQlW_ZP1bj8.webp&quot; srcset=&quot;/_astro/01.BT4AMQlW_ZP1bj8.webp 628w&quot; /&gt;&lt;/p&gt;&lt;p&gt;・・・というわけで、今まで105缶の魚の缶詰を食べた僕が、食べてきたサバ缶の中からオススメのサバ缶を6個紹介したいと思います。&lt;/p&gt;&lt;p&gt;サバ缶のパワーはすごいです。&lt;/p&gt;&lt;p&gt;2ヶ月で、健康診断があのような結果になってしまうのですから・・・（笑）&lt;/p&gt;&lt;p&gt;そんな身を削る思いで、食べたサバ缶をランク付けしましたので、ぜひサバ缶を食べる時の参考にしてみて下さい。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ランキンぐぅ～👍&lt;a href=&quot;#ランキンぐぅ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;5位：伊藤食品_美味しい鯖_醤油煮&lt;a href=&quot;#5位伊藤食品_美味しい鯖_醤油煮&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/02.02AE4-M4_1pMxKI.webp&quot; srcset=&quot;/_astro/02.02AE4-M4_1pMxKI.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ラベルがかっこよさげだから食べる前にテンションが上がる。&lt;/p&gt;&lt;p&gt;醤油煮なのでもちろんご飯と合う。&lt;/p&gt;&lt;p&gt;水で洗う前にラベルは剥がしておいた方がいいですよ！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4位：ローソンオリジナル_さば水煮&lt;a href=&quot;#4位ローソンオリジナル_さば水煮&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/03.BAJYceOK_Z1S8GcF.webp&quot; srcset=&quot;/_astro/03.BAJYceOK_Z1S8GcF.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ローソンのサバ缶はバカにできない・・・。&lt;/p&gt;&lt;p&gt;程よい塩分で、鯖の味わいもあります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3位：九州旬のさば_鯖_味噌煮_フンドーキン「九州産麦みそ」&lt;a href=&quot;#3位九州旬のさば_鯖_味噌煮_フンドーキン九州産麦みそ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/04.COfl7eRz_1kKgKA.webp&quot; srcset=&quot;/_astro/04.COfl7eRz_1kKgKA.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;男は初めてのサバ缶が忘れられない・・・？&lt;/p&gt;&lt;p&gt;サバ缶を意識的に食べようと思ってから初めて食べたサバ缶です。味噌とサバ缶が上手く混ざっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2位：HOKO_CoCo壱番屋さばカレー&lt;a href=&quot;#2位hoko_coco壱番屋さばカレー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/05.BfHVDLkL_Z1hb85v.webp&quot; srcset=&quot;/_astro/05.BfHVDLkL_Z1hb85v.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「カレーと鯖なんて合うのかしら・・」と思っている方は、想像が裏切られます。&lt;/p&gt;&lt;p&gt;「カレーに漬けたらそりゃあ美味いわな。」と思っている方は、想像以上になります。&lt;/p&gt;&lt;p&gt;ご飯と一緒に召し上がれ。辛さ的には2辛。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;1位：高木商店_国産_寒さば_水煮&lt;a href=&quot;#1位高木商店_国産_寒さば_水煮&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/06.BduclkT8_1H2JGh.webp&quot; srcset=&quot;/_astro/06.BduclkT8_1H2JGh.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ローソンも良かったが、やはりこいつのほうが美味かった。魚としてしっかり美味い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;殿堂入り：やまめ_さば醤油煮&lt;a href=&quot;#殿堂入りやまめ_さば醤油煮&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;800&quot; src=&quot;/_astro/07.D85WNnHj_1eOd9f.webp&quot; srcset=&quot;/_astro/07.D85WNnHj_1eOd9f.webp 600w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回の殿堂入りがこちら。&lt;/p&gt;&lt;p&gt;鯖が柔らかく、タレも均整の取れた味わいとなっておる。執務室で食べましたが、一旦作業の手を止めて味わってしまいました。ご飯と一緒に食べたかったなあ・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ランキングおさらい&lt;a href=&quot;#ランキングおさらい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;







































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;順位&lt;/th&gt;&lt;th&gt;サバ缶の名前&lt;/th&gt;&lt;th&gt;メーカー&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;5位&lt;/td&gt;&lt;td&gt;伊藤食品_美味しい鯖_醤油煮&lt;/td&gt;&lt;td&gt;伊藤食品&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4位&lt;/td&gt;&lt;td&gt;ローソンオリジナル_さば水煮&lt;/td&gt;&lt;td&gt;マルハニチロ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3位&lt;/td&gt;&lt;td&gt;九州旬のさば_鯖_味噌煮_フンドーキン「九州産麦みそ」&lt;/td&gt;&lt;td&gt;相浦缶詰&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2位&lt;/td&gt;&lt;td&gt;HOKO_CoCo壱番屋さばカレー&lt;/td&gt;&lt;td&gt;宝幸&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1位&lt;/td&gt;&lt;td&gt;高木商店_国産_寒さば_水煮&lt;/td&gt;&lt;td&gt;高木商店&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;殿堂入り&lt;/td&gt;&lt;td&gt;やまめ_さば醤油煮&lt;/td&gt;&lt;td&gt;高木商店&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これがマイ・フェイヴァリット・マッカレルだ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おサバも程々にね&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>データセンターで働くときあるある5選</title><link>https://endorphinbath.com/posts/datacenter-working-aruaru/</link><guid isPermaLink="true">https://endorphinbath.com/posts/datacenter-working-aruaru/</guid><description>今回は、データセンターで働く時の僕の中のあるあるを5選でまとめてみました。データセンターを利用する前に読んでみて下さい。</description><pubDate>Wed, 15 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ただいま～！ 寒すぎ寒すぎ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おかえり～。最近、寒すぎ寒すぎサムスン電子だなマジで。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん、そうだね。もう少し厚着をしないとだなあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;寒いといえば、データセンターで働いていた頃を思い出すなあ・・・。よし、今回はデータセンターの記事を書くぞっ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;寒い時に寒い話するのかよ・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;データセンターあるある5選です。どうぞっ。&lt;a href=&quot;#データセンターあるある5選ですどうぞっ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 寒い。&lt;a href=&quot;#1-寒い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/01.BC0GKFdC_2lH7tU.webp&quot; srcset=&quot;/_astro/01.BC0GKFdC_FUQSd.webp 640w, /_astro/01.BC0GKFdC_Z1QVQgG.webp 750w, /_astro/01.BC0GKFdC_tccmg.webp 828w, /_astro/01.BC0GKFdC_Z18yT3E.webp 1080w, /_astro/01.BC0GKFdC_2lH7tU.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、これに尽きると思います。&lt;/p&gt;&lt;p&gt;データセンターのサーバーは基本的に端末を冷やすための環境となっています。そのため、夏場にデータセンターに行くと、上着を持っておらず半袖1枚でサーバールームで作業するハメになり、必ず後悔することになるでしょう。&lt;/p&gt;&lt;p&gt;このサーバールームの寒さに耐えられるのは、小学校の時に学年に1人はいた、1年中タンクトップでも平気と謳っているヤツくらいでしょう。&lt;/p&gt;&lt;p&gt;秋に着るような格好で向かうことをオススメします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 警備員が来るのが遅い。&lt;a href=&quot;#2-警備員が来るのが遅い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/02.BrAuJt0F_Zexp7q.webp&quot; srcset=&quot;/_astro/02.BrAuJt0F_KOQ7o.webp 640w, /_astro/02.BrAuJt0F_Z1M2R2v.webp 750w, /_astro/02.BrAuJt0F_y6bAr.webp 828w, /_astro/02.BrAuJt0F_1lmH8V.webp 1080w, /_astro/02.BrAuJt0F_Zexp7q.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データセンターは基本的に2つ3つの棟を1人で警備しています。なので、自分がいる棟と警備員がいる棟が別であることはザラにあり、棟を移動する分だけ時間が掛かります。&lt;/p&gt;&lt;p&gt;棟を移動する時間はどれぐらいが一般的なんでしょうかね・・・。&lt;/p&gt;&lt;p&gt;僕が通っていたデータセンターでは、大体パズドラのダンジョンを2周できるくらい待っていました。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 端末を置き去りにしがち。&lt;a href=&quot;#3-端末を置き去りにしがち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/03.CJBfh1Sw_Z1RfS3c.webp&quot; srcset=&quot;/_astro/03.CJBfh1Sw_2vFWfp.webp 640w, /_astro/03.CJBfh1Sw_Z2bKTu.webp 750w, /_astro/03.CJBfh1Sw_2iWhIs.webp 828w, /_astro/03.CJBfh1Sw_ZhkKLP.webp 1080w, /_astro/03.CJBfh1Sw_Z1RfS3c.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データセンターの中にはあまり人はいません。日中は、自分のグループ以外に2つグループがいれば多いくらいです。夜になると、ほとんど自分のグループだけの状態でした。&lt;/p&gt;&lt;p&gt;そのような状況であるため、僕の先輩とかは端末を休憩室に放っておいてサーバールームに作業に行ったりしていました。さすがに僕は、端末を置きっぱなしにするのはマズイと思ったのでずっとそこで見張っていましたが・・・。（PCにロックさえ掛かっていなかったので、ロックは掛けました（笑））&lt;/p&gt;&lt;p&gt;このように、第三者がほとんどいない環境なので、端末を置き去りにしがちですが、この世では何があるか分からないので端末は財布と同じような意識で持ち歩きましょう・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. カメラのレンズにシールを貼る。&lt;a href=&quot;#4-カメラのレンズにシールを貼る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;851&quot; height=&quot;1280&quot; src=&quot;/_astro/04.DpJNpdjj_Z21wWXp.webp&quot; srcset=&quot;/_astro/04.DpJNpdjj_Z18uk7y.webp 640w, /_astro/04.DpJNpdjj_Z9lJF.webp 750w, /_astro/04.DpJNpdjj_63UlS.webp 828w, /_astro/04.DpJNpdjj_Z21wWXp.webp 851w&quot; /&gt;&lt;/p&gt;&lt;p&gt;入館する時に持ち込むカメラでデータセンターの中を撮影できないようにするために、カメラのレンズにシールを貼らせてきます。そして、退館する時にシールが剥がれていると警備員に理不尽に怒られます。&lt;/p&gt;&lt;p&gt;なので、カメラのレンズが出っ張っていたりすると、シールが剥がれやすいので気をつけましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 物の管理がガサツなこともある。&lt;a href=&quot;#5-物の管理がガサツなこともある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;289&quot; src=&quot;/_astro/05.DS6ONz_H_12Or7m.webp&quot; srcset=&quot;/_astro/05.DS6ONz_H_12Or7m.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データセンターではキャビネットやロッカーなども借りることが出来ますが、そこに預けている物の管理に関しては少し懐疑的になりましょう。&lt;/p&gt;&lt;p&gt;なぜなら、僕がいたPJで予備として持っていたテープ装置がデータセンターのキャビネットに預けられていたのですが、そのテープ装置が紛失されてしまったことがあったためです。&lt;/p&gt;&lt;p&gt;原因は、どうやらデータセンターではキャビネットの中を定期的に点検することがあるらしく、その際にキャビネットの中にあったテープ装置を誤って捨ててしまったからのようです。&lt;/p&gt;&lt;p&gt;あの時のプロジェクトリーダーはさすがに怒っていましたね・・・（笑）&lt;/p&gt;&lt;p&gt;なぜなら、テープ装置というのはバックアップを取るために色々と設定をする必要があり、その設定を既に済ませたテープ装置をデータセンターで保管していたので、テープ装置を弁償されても再度その設定をしなければならなかったためです。（このPJはテープ装置を代えずになんとか終了を迎えられましたが・・・。）&lt;/p&gt;&lt;p&gt;このように、データセンターに預けるのもリスクはあるため、先程のケースだったら、別の場所（社内とか）に同じテープ装置を保管しておくと行ったリスクヘッジも考えておいた方が良いと思いました。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;テープ装置を捨てるのは流石にヤバいな・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;データセンターに重要品を置くのはアンチパターンなのかもしれんな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【1つの業界しか就活していない方へ】別の業界も見てみて下さい。（小生は建築⇒ITに進んだ人です。）</title><link>https://endorphinbath.com/posts/research-various-business-worlds/</link><guid isPermaLink="true">https://endorphinbath.com/posts/research-various-business-worlds/</guid><description>僕は学生時代に建築学科の専攻でしたが、結局就職した業種はIT（SIer）でした。その選択は間違ってはいなかったと思っているのですが、後悔はあります。僕と同じように後悔する人を減らすためにこの記事を執筆します。</description><pubDate>Tue, 14 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回、けっこう長い記事になったから、会話はほぼ無しにしますね。それでは、どうぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いってら～。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;それでは&lt;a href=&quot;#それでは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こんにちは。&lt;/p&gt;&lt;p&gt;この表題でなぜ記事を書こうと思ったかというと、僕は学生時代に建築学科の専攻でした。&lt;/p&gt;&lt;p&gt;そして、モラトリアムを継続したいという願望の元、大学院でも建築学科の道を進み続け、結局就職した業種は、ITでした。&lt;/p&gt;&lt;p&gt;「なんでせっかく６年間も建築を勉強し続けたのにITに行ったんだ？」と思った方もいるかもしれません。確かに、僕もそう思って途中まで建築一本に絞って就活を続けていましたし、周りの同期も建築業界に進もうとしていた人がほとんどでした。&lt;/p&gt;&lt;p&gt;しかしながら、途中で建築に少し関わっている業種にシフトしていって、最終的にはITの業種も視野に入れて就活をしました。&lt;/p&gt;&lt;p&gt;そして、現在ITの会社で2年以上働いていますが、僕はITという選択を取ったことを全く後悔していません。かなり自分に合っていると思います。&lt;/p&gt;&lt;p&gt;また、建築業界で働いていたら後悔していたのではないかと思っています。（インターンシップには夏に20日間くらいかけて行っていたので、薄々自分には向いていないかもと思っていたのです・・・。）&lt;/p&gt;&lt;p&gt;そんな僕が、建築学科に行ってからITの職種に就くまでの流れをここで語らせてもらいたいと思います。現在、自分の選択について悩んでいる方は、ちょっとでも参考になれば良いかなと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;建築学科に進んだワケ&lt;a href=&quot;#建築学科に進んだワケ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、高校3年生の頃から話を始めます。&lt;/p&gt;&lt;p&gt;そもそもなぜ、大学で建築学科を専攻したのかと言いますと、理由は2つあるんです。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;卒業生の進路のバリエーションが幅広いから&lt;a href=&quot;#卒業生の進路のバリエーションが幅広いから&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;1つ目は、卒業生の進路のバリエーションが幅広いからです。&lt;/p&gt;&lt;p&gt;まず、文系か理系か、という日本の昔ながらの二元論的な枠組みの中で、僕は理系だなと思っていました。&lt;/p&gt;&lt;p&gt;そして、漠然と理系だなとは思っていたのですが、専攻は決めかねていました。&lt;/p&gt;&lt;p&gt;「全部職業体験させてから専攻を選ばせろよ！」と、高校生ながらに戸惑いながら、色々な大学のパンフレットを見ていると、どの大学でも建築学科だけ「卒業生の進路」の円グラフがカラフルだったのです。&lt;/p&gt;&lt;p&gt;「まだやりたいこと決まってないから、選択肢がたくさんありそう建築学科にしよう。」と思い、建築学科を受験するのでした・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自分でもなれそうだと思ったから&lt;a href=&quot;#自分でもなれそうだと思ったから&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう1つは、自分でもなれそうだと思ったからです。&lt;/p&gt;&lt;p&gt;受験期に、僕の親は何を血迷ったのか、家のリフォームを断行しました。&lt;/p&gt;&lt;p&gt;「なんで受験期に！？」という疑問はさておき、そのリフォームの担当の方がひどく要領が悪かったのです。&lt;/p&gt;&lt;p&gt;僕の母とリフォーム担当が色々と折衝を重ね、「この図面で行きましょう！」みたいな感じでリフォームが始まりました。&lt;/p&gt;&lt;p&gt;そのリフォーム中に様子を見に行くと、急に母は「なんでこんなところに壁があるの！？」と怒り始めました。確かに図面を見ると、そこには壁がないのです。しかし、僕たちの目の前には壁あります。&lt;/p&gt;&lt;p&gt;そして、リフォーム担当を呼び出し、事情を聞きました。&lt;/p&gt;&lt;p&gt;すると、リフォーム担当は「いやあ、あそこは壁無いと構造上成立しないので、壁を作ったんですよ～。(*ﾟ∀ﾟ)」と言い出しました。&lt;/p&gt;&lt;p&gt;それを聞いて母親は、「じゃあ、なんで施主の私に確認しないんだ(# ﾟДﾟ)」と怒っていました。その怒り、ごもっともです。&lt;/p&gt;&lt;p&gt;さらに、その壁ができた場所がキッチンだったので、母親は本当に怒っていました。&lt;/p&gt;&lt;p&gt;・・・まあ、このリフォームの小言は言い出すとキリがないので、これくらいにしておきます。&lt;/p&gt;&lt;p&gt;こんな事件があり、僕は、建築士という仕事を、他人（ステークホルダーとも言いますね。高校生の頃の僕は知る由もありませんが。）に確認も取れないような人間がなれてしまうような職種なんだなと思いました。こんな要領が悪い人間がなれてしまうくらい一級建築士って取得するのが簡単なんだなと思いました。（一級建築士保有って聞いた時はビックリしましたよ！）&lt;/p&gt;&lt;p&gt;こんな事件で、「仮に建築士になっても、僕でもやっていけそうだ。」と、なんかあの時のムカつくリフォーム担当が建築学科に進んだ後の進路を保証してくれた気がしたのでした。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;建築の業種を選ばなかった理由①：建築に向いていなかった&lt;a href=&quot;#建築の業種を選ばなかった理由建築に向いていなかった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;建築学科に入ってからのことになります。建築は、基本的に3つ（意匠、設備、構造）の部門に分かれており、僕はこれらの何れも好きになれませんでした。以下に、記述します・・・。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;①　意匠&lt;a href=&quot;#意匠&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;意匠は、大学2年生の頃から設計の授業が本格的に始まり、対象の敷地に対してどのような建築物を立てるかを考える、いわゆるデザイン的な部門になります。&lt;/p&gt;&lt;p&gt;ここで感じたのが、「ひどくコスパが悪い。」でした。これには、3つ感じることがあります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;①-1　模型やソフトなど金がかかる&lt;a href=&quot;#-1模型やソフトなど金がかかる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、1つ目は、「模型やソフトなど金がかかる」ことです。&lt;/p&gt;&lt;p&gt;意匠の設計の授業では、基本的に模型を使って話をします。&lt;/p&gt;&lt;p&gt;この出費が地味に手痛いんですよね・・・。学生は基本的に貧乏ですよ！？&lt;/p&gt;&lt;p&gt;そして、たまに模型を壊してしまう困ったちゃんな講師とかもいたりします。&lt;/p&gt;&lt;p&gt;「他人がキレイに積み上げた積み木を何の考えなしに破壊する幼稚園児と一緒じゃないか・・・」と思いながら、模型が破壊された動機の話を聞いていました。（僕は壊されなくて本当に良かったです～。というより破壊する模型を提出していなかったんですけどね（笑）あの頃はサボりまくっていました（笑））&lt;/p&gt;&lt;p&gt;そして、最終提出ではない模型ではまだマシなのですが、最終提出のものになるとそれなりに良い模型を作ることになるのです。そこがコスパ悪いですよね～・・・。1日も使わないのに・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;①-2　正解がない&lt;a href=&quot;#-2正解がない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;2つ目は、「正解がない」ことです。&lt;/p&gt;&lt;p&gt;設計には正解などありません。どのような設計を提案して、それを是とさせるかは、提案者の話術によるところがあります。&lt;/p&gt;&lt;p&gt;なので、提案者の話とそれを聞いている人すなわち講師のセンス・考えが合わなければ、それは正解ではありません。&lt;/p&gt;&lt;p&gt;そうした話術や設計センスは、授業だけでなく色々なコンペに取り組んで磨いていくのでしょうが、自分はそこまでの熱意が生まれませんでした。&lt;/p&gt;&lt;p&gt;そして、その状態で模型を作っていると、「自分は一体何を作っているんだ？」と、意味の分からない心理状態になりものすごい虚無感が生まれるのです。&lt;/p&gt;&lt;p&gt;正解じゃないかもしれない没になるかもしれないものを作るために、スチレンボードを正しい縮尺で切り出して、スチのりがはみ出ないように丁寧に塗って、塩ビ板は切ったところ以外傷つかないように気をつけて切り出して・・・、
ああ、死ぬほどコスパが悪い。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;①-3　効率的ではないことが正解であることもある&lt;a href=&quot;#-3効率的ではないことが正解であることもある&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3つ目は、「効率的ではないことが正解であることもある」ことです。&lt;/p&gt;&lt;p&gt;僕の性分は、「どれだけ怠けながら成果を最大化できるかを考える」ことです。&lt;/p&gt;&lt;p&gt;なので、その思想は僕が設計するときも活用しており、「こうすれば、効率が良い建物になるじゃん！」と考えて設計していました。&lt;/p&gt;&lt;p&gt;しかし、建築の世界では、それは正解ではないことが多いのです。「不便さ」というものが建物に必要な場合があるのです。&lt;/p&gt;&lt;p&gt;例えば、図書館を設計したときとかは、僕はどうすれば本に効率よくアクセスできるかなどを考えながら設計していました。しかし、講師から言われたのは、「どう不便にするかで人と人のふれあいが生まれるか。」とか何とか言われたのを幽かに覚えています。&lt;/p&gt;&lt;p&gt;うーん、そういうのに興味はなかったですねえ。&lt;/p&gt;&lt;p&gt;建物をどんな間取りにするかで人と人のやり取りがどう変わるかなんてほとんど予想できないし・・・。それで僕が持論を述べても結局その講師と折衝できるかはまた別の話だし・・・。コスパ悪い・・・。経済とか株とかを議論するのと同じレベルでコスパ悪いですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;②　設備&lt;a href=&quot;#設備&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設備は、換気とか、室温とか、排水とか、人間がその建物の中および周囲でどう快適に過ごせるかどうかを考える部門です。&lt;/p&gt;&lt;p&gt;貫通孔の大きさとか、CFD解析および流体力学とか考えて・・・、&lt;/p&gt;&lt;p&gt;うん、あんまり興味なかったですね。次行きましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;③　構造&lt;a href=&quot;#構造&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;構造は、建物がどうやったら倒れないで済むかを考える部門です。&lt;/p&gt;&lt;p&gt;そして、僕が建築学科の中で専攻した部門が、構造になります。1番自分に合っていた部門は構造でしたね。解析を回した後のコンター図を見るのが好きでした。&lt;/p&gt;&lt;p&gt;これはですね～、コスパというよりは飽きてしまったというのがあります。&lt;/p&gt;&lt;p&gt;2０日間のインターンシップで、工場の構造設計（意匠設計とは違います。建物が倒れないようにコンクリートの厚さとか鉄筋の本数とかを設計します。）をしました。&lt;/p&gt;&lt;p&gt;それでやってみて、僕は、他の建物の設計もこの工場の延長線上にしかないものなんだなあと思ってしまいました。&lt;/p&gt;&lt;p&gt;まあ、結局は国で定められている設計基準に従って建物を設計します。そして、その設計の手順はある程度決まっています。その手順にちゃんと従えば、ある程度の建物はちゃんと着工が始まります。あまり創意工夫はない仕事だと思います。&lt;/p&gt;&lt;p&gt;もっと大きい建物になると、時刻歴応答解析とかいう設計もする必要があるのですが、これはすんごいザックリ言うと、建物の固有周期が、地震時の地面の周期とズレていればいいよねみたいな感じです。&lt;/p&gt;&lt;p&gt;「振動数って何？美味しいの？甘いの？」と思ってる方への説明としては、ブランコの漕ぎ方で説明します。ブランコって振り子のように前後に振動しています。そして、ブランコ漕ぐときって、後ろ→前の時は足を前に、前→後ろの時は足を後ろに持っていきますよね？　これって、いわばブランコの進行方向と自分の重力（正確に言うと「重心」ですが）を一致させているから、ブランコが前後に大きく振れるようになるのです。&lt;/p&gt;&lt;p&gt;つまり、振動している方向に同じ方向の力が加わると、揺れが大きくなるのです。この加わるタイミングが同じ状態が「周期が合っている」状態になるのです。そして、揺れが大きくなってしまうと建物が壊れてしまうので、「周期がズレている」状態になるように建物を設計するのです。&lt;/p&gt;&lt;p&gt;なんか説明したら、結構長い時間、脱線してしまいましたね・・・。まあ、要するに、設計の概要が分かってしまったら、僕の構造設計への興味は潰えてしまったのです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;建築の業種を選ばなかった理由②：国家資格を取らなければならない。&lt;a href=&quot;#建築の業種を選ばなかった理由国家資格を取らなければならない&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;建築士は、1級建築士もしくは2級建築士にならなければなりません。&lt;/p&gt;&lt;p&gt;ならなければならないというのは、設計業を行う企業や組織は、1級建築士もしくは2級建築士が一定数以上所属していないと、設計業を行ってはならない法律となっているのです。&lt;/p&gt;&lt;p&gt;デカイ建物だと1級建築士、一戸建てくらいの規模だと2級建築士が必要になります。&lt;/p&gt;&lt;p&gt;この建築士試験というものが過酷なんですよ・・・。建築学科を専攻していた人でも勉強必須です。学科はまだマシなんですけど、製図とかマジで練習しないと受からないんですよね・・・。そのために、資格学校とかに通って、貴重な若い時間を資格取得のために費やさなければならない・・・。&lt;/p&gt;&lt;p&gt;「そんなに建築に熱意があるわけでもない小生が、一生やるかも分からない設計業にそんな膨大な（大体半年くらい？それで受からない場合もある。）時間を費やせるか！」と思い、建築は断念しました。&lt;/p&gt;&lt;p&gt;IT資格の「基本情報技術者」は、情報学科でもない僕でも1、2ヶ月くらいで取れたのに・・・。コスパ悪いです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;しかし、僕は当初、建築業界に絞って就活をしていた！&lt;a href=&quot;#しかし僕は当初建築業界に絞って就活をしていた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;うーん、この時はちょっと思考停止状態でしたかね・・・。（そもそも、建築学科に進んだ理由は、進路が幅広いからだったろうに・・・）&lt;/p&gt;&lt;p&gt;身の回りの同期が、みんな建築業界で就活をしたり、学科推薦を取ろうとしたりしてました。&lt;/p&gt;&lt;p&gt;その時に、僕は、組織設計事務所に照準を絞って就活をしていました。&lt;/p&gt;&lt;p&gt;なんで、組織設計事務所の内定のためにあんな頑張ってたんでしょうか・・・。なんか組織設計事務所であれば、楽しい設計ライフが待っているんじゃないかという淡い期待があったんだと思います。そして、組織設計事務所は、内定時期が早いです。４月前に決まってしまいます。だから、焦りもあったんですかねえ。&lt;/p&gt;&lt;p&gt;結果としては、全落ちだったんですよね。最終面接まで行ったところもあったんですが、まあ、こういう運命だったっていうのと、たぶん自分には合っていなかったかなあと、「命拾いしたー！」という安堵も今はあります（笑）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;迷走時期もありました・・・&lt;a href=&quot;#迷走時期もありました&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、組織設計事務所の採用であぶれた僕は、建築業界ではないけどちょっと近い感じの業種のイベントなどに行っていました。&lt;/p&gt;&lt;p&gt;ディスプレイ系、素材系、オリエンタルランド・・・、など行きましたが、うーん、どれもちょっと違いましたね。やっぱりちょっと違うので、書類選考や面接でもミスマッチになっちゃうんですよね・・・。まあ、でも、これはお互いのために良かったと思っています。やっぱり、動き出しが遅かったなあと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ITの業種を選んだ理由①：プログラミングが好きだった。&lt;a href=&quot;#itの業種を選んだ理由プログラミングが好きだった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まあ、もう就活がよく分からなくなり、就活の時期もけっこう進んできた５月くらいにITの業種のイベントなどに行くようになります。&lt;/p&gt;&lt;p&gt;その理由としては、まず、プログラミングが好きだったというのはあります。&lt;/p&gt;&lt;p&gt;僕は、大学院1年生になってから、教授の紹介でシステムを作っている職場でアルバイトを始めていました。&lt;/p&gt;&lt;p&gt;最初は、VB.netのお勉強から始まり、VB6のシステムのちょっとした改修やその会社で開発しているシステムのコーディングなどを経験しました。&lt;/p&gt;&lt;p&gt;初めてのプログラム改修でVB6をいじった時は、本当にワケが分かりませんでしたね（笑）　社員の方も夜12時を回る前くらいまで付き合って下さって、お世話になりました（笑）　「最初はそんなもんだよ。」と言われて、少し救われたのを覚えています。&lt;/p&gt;&lt;p&gt;それから、VB.netをいじったり、組織設計事務所の書類の内容を強くするためにいじったGrasshopper（Rhinocerosっていう3Dモデリングソフトのノードプログラミング機能のことです。）だったり、VBAもいじったり、ここからプログラミングに徐々に親しんでいくようになりました。&lt;/p&gt;&lt;p&gt;それらをいじっているときは、特に苦はありませんでした。（まあ、バグが解決できない時は苦しんでいますが）&lt;/p&gt;&lt;p&gt;なんだか、自分の趣向として、何かが一気に貯まるのを見るのが好きで、例えば、初めてアルバイトをした時に銀行の預金残高が増えているのを見た時はすごいエンドルフィンが出ていたのを覚えています（笑）　プログラミングとか関数って実行して成功すると、一気にデータが可視化されるじゃないですか。あの感覚が僕はずーっと好きなんですよね。&lt;/p&gt;&lt;p&gt;なので、プログラミングが好きなんですよね、僕は。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ITの業種を選んだ理由②：アナログなものを作らなくてもいい。&lt;a href=&quot;#itの業種を選んだ理由アナログなものを作らなくてもいい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は、建築学科の時にそれなりに物を作ってきました。&lt;/p&gt;&lt;p&gt;たくさんの模型、木造の壁、レンガのアーチ、・・・、まあ、生涯で考えればもっと作ってますよね。&lt;/p&gt;&lt;p&gt;しかしながら、僕は、アナログなものを作った後に、飾っていたそれに埃が被るのを見る瞬間の感覚がすごい嫌いなんですよね・・・。&lt;/p&gt;&lt;p&gt;最近、家の収納棚の奥に眠っていた小学生の頃に作った木製のパチンコ台を見つけたのですが、「埃が被ってるし、こんなの所有していて何の意味があるんだ？　発射台壊れてるし、写真撮って捨てよ！」と感じて、捨ててしまいました。&lt;/p&gt;&lt;p&gt;僕にとって「物」って、使用できるかできないかの2種類しかなくて、使用できなかったらただの思い出にしかならないので、そういった思い出に埃が被るくらいなら写真に撮って捨ててしまいます。&lt;/p&gt;&lt;p&gt;そのため、埃が被らないデジタルなものを作れるのが、ITの魅力として感じていることの1つだったりします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ITで働いていて良かったと思う点①：知識欲をすぐ満たせる。&lt;a href=&quot;#itで働いていて良かったと思う点知識欲をすぐ満たせる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これは選んだ理由ではないのですが、ITは知識欲をすぐに満たすことが出来ます。&lt;/p&gt;&lt;p&gt;IT関連の情報はWebにいくらでも転がっているので、分からないことがあったら、すぐに調べることが出来ます。&lt;/p&gt;&lt;p&gt;まあ、IT人口は、建築人口よりも遥かに多いですしね。会社だけでなく、世界中に聞けるのですぐスッキリできます。今の時代と業種のおかげですね。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ITで働いていて良かったと思う点②：構造的な考え方が出来るようになる。&lt;a href=&quot;#itで働いていて良かったと思う点構造的な考え方が出来るようになる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これもIT業界に入った後に気付くのですが、ビジネススキルってプログラミングな考え方が出来るか出来ないかでかなり差が生まれるのですよ。&lt;/p&gt;&lt;p&gt;まあ、ビジネスをするのは人間なので、非言語能力が大事なのは事実です。&lt;/p&gt;&lt;p&gt;しかし、その非言語能力は、言語能力があってこそという部分もあると思います。構造的なモノの考え方は、僕は新入社員研修のときに教わりました。その考え方は、プログラミングで処理をどう分岐させるかとか、いつからいつまで繰り返すか、何かマスタみたいなのが作れないかとか、プログラムチックな考え方を、ビジネススキルに踏襲させたようなものです。&lt;/p&gt;&lt;p&gt;考え方を強くしたことで、ただ動きが速い人間から、瞬時に構造的に判断して速く動く人間になれたような気がしています。（なれたかは知らんが、頭の回し方が分かってきたって感じですかね。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ITで働いていて良かったと思う点③：潰しが聞いて応用もできる。&lt;a href=&quot;#itで働いていて良かったと思う点潰しが聞いて応用もできる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ITって今や何れの業界にも絡んでくる分野になっていますよね。PCを使わない仕事って本当に減ってきていますよね。この前、FinTechで騒いでいたら、EdTech、AdTech、FashTech、Heattech、・・・、Heattechは違うなあ。&lt;a href=&quot;https://tech-camp.in/note/technology/71502/&quot; target=&quot;_blank&quot;&gt;なんかX-Techは18種類くらいあるらしいですね。&lt;/a&gt;&lt;/p&gt;&lt;p&gt;まあでも、とある環境内でクライアントからサーバにリクエストしてDBをいじったりして、その結果をレスポンスでクライアントに返すという基本的な動作は変わらないので、そこらへん分かっていれば、最近流行りのてくのろじーも問題なく適応できるんじゃないかなあと思っています。それで最近、本来サーバで行う処理をクライアントにさせようっていう技術が出てきたりしたり、端末が車だったり航空機だったりにもなったりしているって感じですよね。&lt;/p&gt;&lt;p&gt;基本が分かっていれば、大体大丈夫になるという分野です。（まあ、いずれの分野もそんな感じはしますが。）プログラミング言語も有名所を2つ3つ触って、HTML、CSSがある程度分かれば、他の言語になっても理解できたりします。&lt;/p&gt;&lt;p&gt;この守破離の理念に沿って、どんどん技術のブレークスルーが進んでいく業界は見ていて楽しいです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;とまあ、今回の記事は、建築業界をディスって、IT業界の好きを語ったものになりました。&lt;/p&gt;&lt;p&gt;さて、今回の表題は、「【1つの業界しか就活していない方へ】別の業界も見てみて下さい。」です。&lt;/p&gt;&lt;p&gt;最後に言いたいのは、「自分からもっと情報を仕入れるようにして下さい。」ということです。&lt;/p&gt;&lt;p&gt;自分はITを選んで後悔はしていませんが、「もっと早くITの分野で就活をしていたら、もっと面白い会社に入れたんじゃないのか？」とも思っているのです。&lt;/p&gt;&lt;p&gt;僕が働いているSIerの職種は、他社から請け負う仕事ですので、その相手先から意味の分からない質問や行きあたりばったりの要件定義など、あまり生産性のない仕事が結構あったりします。また、顧客がITに不慣れな場合もあります。例えば、開発中の画面のチェックを、画面をスクショして印刷したものに赤ペンで書き込んで、それをまたスキャンして、送ってくる・・・など・・・。&lt;/p&gt;&lt;p&gt;僕としては、ぶっちゃけそんな仕事はしたくないのですよね・・・。ほとんど興味がないんですよね・・・。&lt;/p&gt;&lt;p&gt;なので、どなたがSIerの仕事に興味があるのかは何でも良いのですが、僕としては他の職種で自分に合うものがあったのではないかと思っています。&lt;/p&gt;&lt;p&gt;現在、学生で就活を行っているもしくは控えている方は、もっとたくさんの情報に触れてそこから取捨選択をして、自分が満足できる人生を送ってもらいたいのです。&lt;/p&gt;&lt;p&gt;学生の時間の量は凄まじいです。今の僕の情報の処理スピードで、学生時代を駆け抜けていたら、もっと出来たことがあった筈なのです・・・。&lt;/p&gt;&lt;p&gt;僕の後悔は先に立ちませんが、今就活を迎えている方は間に合います。後悔が残らないように、ダッシュは早い内からしておくことをオススメします。&lt;/p&gt;&lt;p&gt;ここに書いたことは転職でも役に立てれば良いかなとも思っています。視野を広げてこれから先の人生の進路を考えていきたいですね。&lt;/p&gt;&lt;p&gt;以上になります！　ぶっ続けで文字をたくさん書いていたら、もう画像を貼る気力も出ません（笑）&lt;/p&gt;&lt;p&gt;最後まで読んで下さってありがとうございました(ﾟ∀ﾟ)&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ふ～、疲れた。&lt;a href=&quot;#ふ疲れた&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふ～、こんなもんかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、視野広く行動していきましょうね！　さいなら～！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Penguinkind in Penguin Isle：（「ペンギンの島」のペンギンを種類で見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-penguinkind/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-penguinkind/</guid><description>There are various penguins in the world. Now, I will show part of them that be observable in PenguinIsle.</description><pubDate>Mon, 13 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあああ、今回もペンギンの回だぜえええ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;また始まる&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ペンギンの種類のリスト&lt;a href=&quot;#ペンギンの種類のリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Penguinkind&lt;/th&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;アデリーペンギン（Adelie Penguin）&lt;/td&gt;&lt;td&gt;僕が思うに最もピングーっぽいペンギン。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ジェンツーペンギン（Gentoo Penguin）&lt;/td&gt;&lt;td&gt;目に白い線が入っているペンギン。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヒゲペンギン（Chinstrap Penguin）&lt;/td&gt;&lt;td&gt;ひげ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マカロニペンギン（Macaroni Penguin）&lt;/td&gt;&lt;td&gt;長いまつげ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フンボルトペンギン（Humboldt Penguin）&lt;/td&gt;&lt;td&gt;模様がやたら入っているペンギン。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コガタペンギン（Little Penguin）&lt;/td&gt;&lt;td&gt;ちいさい。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ロイヤルペンギン（Royal Penguin）&lt;/td&gt;&lt;td&gt;マカロニペンギンをスマートにした感じ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オウサマペンギン（King Penguin）&lt;/td&gt;&lt;td&gt;でかい。アメフト部。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コウテイペンギン（Emperor Penguin）&lt;/td&gt;&lt;td&gt;かなりでかい。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キイロメペンギン（Yellow Eyed Penguin）&lt;/td&gt;&lt;td&gt;目じゃなくて目の周りが黄色いペンギン。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シュレーターペンギン（Erect Crested Penguin）&lt;/td&gt;&lt;td&gt;マカロニペンギンをミニマムにスマートにした感じ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マゼランペンギン（Magellan Penguin）&lt;/td&gt;&lt;td&gt;走らない。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h2&gt;ペンギンの種類の紹介&lt;a href=&quot;#ペンギンの種類の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;アデリーペンギン（Adelie Penguin）&lt;a href=&quot;#アデリーペンギンadelie-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕が思うに最もピングーっぽいペンギン。でも、ピングーはコウテイペンギンらしいよ。変だな～。
&lt;img loading=&quot;lazy&quot; width=&quot;1060&quot; height=&quot;761&quot; src=&quot;/_astro/01.adOGPvog_1BtJyr.webp&quot; srcset=&quot;/_astro/01.adOGPvog_LxBp0.webp 640w, /_astro/01.adOGPvog_Z8gXtE.webp 750w, /_astro/01.adOGPvog_Z1Xla0H.webp 828w, /_astro/01.adOGPvog_1BtJyr.webp 1060w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジェンツーペンギン（Gentoo Penguin）&lt;a href=&quot;#ジェンツーペンギンgentoo-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;目に白い線が入っているペンギン。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;869&quot; src=&quot;/_astro/02.CA6fgRag_Z2pofpD.webp&quot; srcset=&quot;/_astro/02.CA6fgRag_Z5ceYs.webp 640w, /_astro/02.CA6fgRag_1x0c24.webp 750w, /_astro/02.CA6fgRag_Z179ABo.webp 828w, /_astro/02.CA6fgRag_Z2pofpD.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ヒゲペンギン（Chinstrap Penguin）&lt;a href=&quot;#ヒゲペンギンchinstrap-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;うちのヒゲペンギンたちは全て、毛編み帽子とマフラーを身に着けています。暖かそう。
&lt;img loading=&quot;lazy&quot; width=&quot;1069&quot; height=&quot;971&quot; src=&quot;/_astro/03.CQsnna8K_rvpMW.webp&quot; srcset=&quot;/_astro/03.CQsnna8K_Qbc4X.webp 640w, /_astro/03.CQsnna8K_ZCMXnn.webp 750w, /_astro/03.CQsnna8K_ZhfpMn.webp 828w, /_astro/03.CQsnna8K_rvpMW.webp 1069w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マカロニペンギン（Macaroni Penguin）&lt;a href=&quot;#マカロニペンギンmacaroni-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;うちのマカロニペンギンたちは全て、冬のソナタになってます・・・。メガネが足らんけど。
&lt;img loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;841&quot; src=&quot;/_astro/04.nRlzoJqP_Zyqs1S.webp&quot; srcset=&quot;/_astro/04.nRlzoJqP_Rwwzz.webp 640w, /_astro/04.nRlzoJqP_2uIXB6.webp 750w, /_astro/04.nRlzoJqP_2iHUli.webp 828w, /_astro/04.nRlzoJqP_Zyqs1S.webp 1045w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フンボルトペンギン（Humboldt Penguin）&lt;a href=&quot;#フンボルトペンギンhumboldt-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;うちのフンボルトペンギンたちは全て、1年中クリスマスリースを首に巻いて過ごしています・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1055&quot; height=&quot;833&quot; src=&quot;/_astro/05.BQvkJSjq_Z45lag.webp&quot; srcset=&quot;/_astro/05.BQvkJSjq_Ir2Tp.webp 640w, /_astro/05.BQvkJSjq_XYgWI.webp 750w, /_astro/05.BQvkJSjq_Z1LvGWz.webp 828w, /_astro/05.BQvkJSjq_Z45lag.webp 1055w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コガタペンギン（Little Penguin）&lt;a href=&quot;#コガタペンギンlittle-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一瞬、赤ちゃんペンギンなんじゃないかと錯覚するぐらい小さいペンギン。
&lt;img loading=&quot;lazy&quot; width=&quot;1064&quot; height=&quot;809&quot; src=&quot;/_astro/06.CTP4OYse_Z2theew.webp&quot; srcset=&quot;/_astro/06.CTP4OYse_Z1s7huG.webp 640w, /_astro/06.CTP4OYse_Z1sWXJp.webp 750w, /_astro/06.CTP4OYse_1YLbks.webp 828w, /_astro/06.CTP4OYse_Z2theew.webp 1064w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ロイヤルペンギン（Royal Penguin）&lt;a href=&quot;#ロイヤルペンギンroyal-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;マカロニペンギンをスマートにした感じ。真正面の顔がイケメン。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;793&quot; src=&quot;/_astro/07.I0fRqfuG_2rJ8Kk.webp&quot; srcset=&quot;/_astro/07.I0fRqfuG_Z5Occk.webp 640w, /_astro/07.I0fRqfuG_Z29GMhd.webp 750w, /_astro/07.I0fRqfuG_Z235geV.webp 828w, /_astro/07.I0fRqfuG_2rJ8Kk.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;オウサマペンギン（King Penguin）&lt;a href=&quot;#オウサマペンギンking-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デケえ上に群れています。僕の高校時代のアメフト部かよ。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1021&quot; src=&quot;/_astro/08.CkDUubsO_Z1UcRVu.webp&quot; srcset=&quot;/_astro/08.CkDUubsO_Z2dlqof.webp 640w, /_astro/08.CkDUubsO_Z2cutM6.webp 750w, /_astro/08.CkDUubsO_13nKy7.webp 828w, /_astro/08.CkDUubsO_Z1UcRVu.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コウテイペンギン（Emperor Penguin）&lt;a href=&quot;#コウテイペンギンemperor-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;うちのコウテイペンギンは全てぬくぬくしています・・・。しかも座って怠けなやがって・・・。&lt;/p&gt;&lt;p&gt;ちなみに、僕が最も好きなペンギンです。
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;917&quot; src=&quot;/_astro/09.CrIXePIV_Z3pY4e.webp&quot; srcset=&quot;/_astro/09.CrIXePIV_Z2h7u1T.webp 640w, /_astro/09.CrIXePIV_ZjWDVy.webp 750w, /_astro/09.CrIXePIV_ZRo00u.webp 828w, /_astro/09.CrIXePIV_Z3pY4e.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;キイロメペンギン（Yellow Eyed Penguin）&lt;a href=&quot;#キイロメペンギンyellow-eyed-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;目が黄色いんじゃなくて、目の周りが黄色いペンギンです。
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;807&quot; src=&quot;/_astro/10.feLW2zib_ZL4MEA.webp&quot; srcset=&quot;/_astro/10.feLW2zib_Z14MRg6.webp 640w, /_astro/10.feLW2zib_MsFhI.webp 750w, /_astro/10.feLW2zib_ZeWMQe.webp 828w, /_astro/10.feLW2zib_ZL4MEA.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シュレーターペンギン（Erect Crested Penguin）&lt;a href=&quot;#シュレーターペンギンerect-crested-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;マカロニペンギンを、ミニマムにスマートにした感じですかね。
&lt;img loading=&quot;lazy&quot; width=&quot;1065&quot; height=&quot;859&quot; src=&quot;/_astro/11.CDRTH-aW_ZaR1PW.webp&quot; srcset=&quot;/_astro/11.CDRTH-aW_2mieTG.webp 640w, /_astro/11.CDRTH-aW_Z15GrRI.webp 750w, /_astro/11.CDRTH-aW_Z1QJ0ID.webp 828w, /_astro/11.CDRTH-aW_ZaR1PW.webp 1065w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マゼランペンギン（Magellan Penguin）&lt;a href=&quot;#マゼランペンギンmagellan-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このゲームのマゼランペンギンだからなのか、マゼランペンギンの習性なのかは知らんが、
全く走らない。動きが遅い。&lt;/p&gt;&lt;p&gt;いつまで経っても歩いているので、静止するのを待てず、つい歩いている写真を撮ってしまいました。
&lt;img loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;825&quot; src=&quot;/_astro/12.ByVK7HRO_Z212Wx6.webp&quot; srcset=&quot;/_astro/12.ByVK7HRO_Z21dIP9.webp 640w, /_astro/12.ByVK7HRO_Z1i0bsy.webp 750w, /_astro/12.ByVK7HRO_2aIXBj.webp 828w, /_astro/12.ByVK7HRO_Z212Wx6.webp 1071w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあああ、今回もペンギンの回だぜえええ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いやもう終わったけども。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Penguins having done with animalkind in Penguin Isle：（「ペンギンの島」の動物を辞めたペンギンたちを見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-penguins-having-done-with-animal/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-penguins-having-done-with-animal/</guid><description>There are some penguins trying not to be penguinkind. Moreover, others are having done with animalkind in PenguinIsle.</description><pubDate>Sun, 12 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回は動物ですらないものに変身したペンギンを紹介だあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;動物じゃない？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動物を辞めたペンギンのリスト&lt;a href=&quot;#動物を辞めたペンギンのリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;動物を辞めてこれになった&lt;/th&gt;&lt;th&gt;手に入れたイベント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ホットドッグ（Hot Dog）&lt;/td&gt;&lt;td&gt;Exchanging penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ポップコーン（Popcorn）&lt;/td&gt;&lt;td&gt;Exchanging penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アボカド（Avocado）&lt;/td&gt;&lt;td&gt;Competition Winner&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カボチャ（Pumpkin）&lt;/td&gt;&lt;td&gt;2021 Halloween Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ドングリ（Acorn）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;キャンプファイヤー（Campfire）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ランタン（Lantern）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新芽（Sprout）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;婚約指輪（Proposing）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バービー（Barbie）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;香水（Perfume）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;チョコレート（Chocolate）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ジンジャーブレッド（Gingerbread）&lt;/td&gt;&lt;td&gt;Christmas 2020 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;骸骨（Skeleton）&lt;/td&gt;&lt;td&gt;Halloween 2020 Limited&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ミイラ（Mummy）&lt;/td&gt;&lt;td&gt;Halloween 2020 Limited&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;吹き戻し（Blowout）&lt;/td&gt;&lt;td&gt;1st Anniversary Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;苺（Strawberry）&lt;/td&gt;&lt;td&gt;1st Anniversary Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;蝋燭（Candle）&lt;/td&gt;&lt;td&gt;1st Anniversary Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ケーキ（Cake）&lt;/td&gt;&lt;td&gt;1st Anniversary Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バナナ（Banana）&lt;/td&gt;&lt;td&gt;Summer Holiday Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;桜の木（Sakura Tree）&lt;/td&gt;&lt;td&gt;Cherry Blossom Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;福袋（Lucky Bag）&lt;/td&gt;&lt;td&gt;New Year 2020 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クリスマスツリー（Xmas Tree）&lt;/td&gt;&lt;td&gt;Xmas Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;動物を辞めたペンギンの紹介&lt;a href=&quot;#動物を辞めたペンギンの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;ホットドッグ（Hot Dog）&lt;a href=&quot;#ホットドッグhot-dog&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ペンギンからマスタードが出てきています(*ﾟ∀ﾟ)
&lt;img loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;659&quot; src=&quot;/_astro/01.D_aWRWeJ_1FShq0.webp&quot; srcset=&quot;/_astro/01.D_aWRWeJ_Z1FLaT5.webp 640w, /_astro/01.D_aWRWeJ_vzPG8.webp 750w, /_astro/01.D_aWRWeJ_Z2tQ9LS.webp 828w, /_astro/01.D_aWRWeJ_1FShq0.webp 1070w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ポップコーン（Popcorn）&lt;a href=&quot;#ポップコーンpopcorn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ペンギンがポップコーンに埋もれています。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;785&quot; src=&quot;/_astro/02.BLJqLDAa_IPgsB.webp&quot; srcset=&quot;/_astro/02.BLJqLDAa_23R16n.webp 640w, /_astro/02.BLJqLDAa_z0UBB.webp 750w, /_astro/02.BLJqLDAa_FCrDS.webp 828w, /_astro/02.BLJqLDAa_IPgsB.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アボカド（Avocado）&lt;a href=&quot;#アボカドavocado&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;輪切りにされています。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;653&quot; src=&quot;/_astro/03.DAltC8vo_1ubGuP.webp&quot; srcset=&quot;/_astro/03.DAltC8vo_10Ydbd.webp 640w, /_astro/03.DAltC8vo_Z1hOoro.webp 750w, /_astro/03.DAltC8vo_1lWetD.webp 828w, /_astro/03.DAltC8vo_1ubGuP.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カボチャ（Pumpkin）&lt;a href=&quot;#カボチャpumpkin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;かわいい・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;619&quot; src=&quot;/_astro/04.uutRkrzK_Rgnh6.webp&quot; srcset=&quot;/_astro/04.uutRkrzK_5Bgwv.webp 640w, /_astro/04.uutRkrzK_4SEgm.webp 750w, /_astro/04.uutRkrzK_Z1P3NMd.webp 828w, /_astro/04.uutRkrzK_Rgnh6.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ドングリ（Acorn）&lt;a href=&quot;#ドングリacorn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これ全部ペンギンなんだよなあ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1039&quot; height=&quot;565&quot; src=&quot;/_astro/05.BOH4irTN_ZYt0Qj.webp&quot; srcset=&quot;/_astro/05.BOH4irTN_Z13qPBc.webp 640w, /_astro/05.BOH4irTN_2x2hGx.webp 750w, /_astro/05.BOH4irTN_s24BL.webp 828w, /_astro/05.BOH4irTN_ZYt0Qj.webp 1039w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;キャンプファイヤー（Campfire）&lt;a href=&quot;#キャンプファイヤーcampfire&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;燃えています。昂ぶっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;707&quot; src=&quot;/_astro/06.DQhaMTiK_Z2teQFI.webp&quot; srcset=&quot;/_astro/06.DQhaMTiK_1RhYrp.webp 640w, /_astro/06.DQhaMTiK_ZJ9cth.webp 750w, /_astro/06.DQhaMTiK_ZnsyTH.webp 828w, /_astro/06.DQhaMTiK_Z2teQFI.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ランタン（Lantern）&lt;a href=&quot;#ランタンlantern&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;スッポリ入っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;715&quot; src=&quot;/_astro/07.C2IiR_5U_Z6bFxr.webp&quot; srcset=&quot;/_astro/07.C2IiR_5U_Z2t927k.webp 640w, /_astro/07.C2IiR_5U_ZzpzOc.webp 750w, /_astro/07.C2IiR_5U_ZMKrPJ.webp 828w, /_astro/07.C2IiR_5U_Z6bFxr.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;新芽（Sprout）&lt;a href=&quot;#新芽sprout&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これからも健やかに育つでしょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;635&quot; src=&quot;/_astro/08.B0pXhfGK_1cYTyD.webp&quot; srcset=&quot;/_astro/08.B0pXhfGK_vli6o.webp 640w, /_astro/08.B0pXhfGK_ZDpjkY.webp 750w, /_astro/08.B0pXhfGK_1VMPOg.webp 828w, /_astro/08.B0pXhfGK_1cYTyD.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;婚約指輪（Proposing）&lt;a href=&quot;#婚約指輪proposing&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;指輪デケえなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;749&quot; src=&quot;/_astro/09.CIztdfuO_1rFrw.webp&quot; srcset=&quot;/_astro/09.CIztdfuO_2hlMUj.webp 640w, /_astro/09.CIztdfuO_Z1YAq0V.webp 750w, /_astro/09.CIztdfuO_ZMumyd.webp 828w, /_astro/09.CIztdfuO_1rFrw.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バービー（Barbie）&lt;a href=&quot;#バービーbarbie&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;バービーの周りに群がるムサいアメフト部員たち・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;755&quot; src=&quot;/_astro/10.u01X6Yar_1FatYj.webp&quot; srcset=&quot;/_astro/10.u01X6Yar_Z1Auhlc.webp 640w, /_astro/10.u01X6Yar_Z1mgR3C.webp 750w, /_astro/10.u01X6Yar_2rRzOn.webp 828w, /_astro/10.u01X6Yar_1FatYj.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;香水（Perfume）&lt;a href=&quot;#香水perfume&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;スポイトを押したらペンギンの体液が出てきます・・・嘘です・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;739&quot; src=&quot;/_astro/11.djlWQe3N_Ziwnrb.webp&quot; srcset=&quot;/_astro/11.djlWQe3N_1LFLC0.webp 640w, /_astro/11.djlWQe3N_Z1UeVI8.webp 750w, /_astro/11.djlWQe3N_ZI8Sgp.webp 828w, /_astro/11.djlWQe3N_Ziwnrb.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;チョコレート（Chocolate）&lt;a href=&quot;#チョコレートchocolate&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これ、けっこう乱暴なデザインだよね。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;815&quot; src=&quot;/_astro/12.CoE7Ox___ZDFWNq.webp&quot; srcset=&quot;/_astro/12.CoE7Ox___Z14vsqm.webp 640w, /_astro/12.CoE7Ox___dIzwl.webp 750w, /_astro/12.CoE7Ox___ZNGSBB.webp 828w, /_astro/12.CoE7Ox___ZDFWNq.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジンジャーブレッド（Gingerbread）&lt;a href=&quot;#ジンジャーブレッドgingerbread&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;薄いです。thin.
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;631&quot; src=&quot;/_astro/13.CANAkMHQ_Z1Ofo1y.webp&quot; srcset=&quot;/_astro/13.CANAkMHQ_TnFNs.webp 640w, /_astro/13.CANAkMHQ_2cKNJJ.webp 750w, /_astro/13.CANAkMHQ_Z2akoGu.webp 828w, /_astro/13.CANAkMHQ_Z1Ofo1y.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;骸骨（Skeleton）&lt;a href=&quot;#骸骨skeleton&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こんな骨格してるんだあ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;641&quot; src=&quot;/_astro/14.DasDofYr_Z1Plgcr.webp&quot; srcset=&quot;/_astro/14.DasDofYr_Z1RJld2.webp 640w, /_astro/14.DasDofYr_Z1IpdrY.webp 750w, /_astro/14.DasDofYr_Z11ji5h.webp 828w, /_astro/14.DasDofYr_Z1Plgcr.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ミイラ（Mummy）&lt;a href=&quot;#ミイラmummy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;歩きにくそう。ずっと包帯を持っている。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;555&quot; src=&quot;/_astro/15.D2kArhGj_Z1AJ1cH.webp&quot; srcset=&quot;/_astro/15.D2kArhGj_1RdCtO.webp 640w, /_astro/15.D2kArhGj_9SpbD.webp 750w, /_astro/15.D2kArhGj_Z21rY9X.webp 828w, /_astro/15.D2kArhGj_Z1AJ1cH.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;吹き戻し（Blowout）&lt;a href=&quot;#吹き戻しblowout&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;画角が大変だった。
&lt;img loading=&quot;lazy&quot; width=&quot;1075&quot; height=&quot;981&quot; src=&quot;/_astro/16.DRS-PfVE_ZTzXLn.webp&quot; srcset=&quot;/_astro/16.DRS-PfVE_Z2sC3Fb.webp 640w, /_astro/16.DRS-PfVE_17zTFp.webp 750w, /_astro/16.DRS-PfVE_T6WFi.webp 828w, /_astro/16.DRS-PfVE_ZTzXLn.webp 1075w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;苺（Strawberry）&lt;a href=&quot;#苺strawberry&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;また乱暴な・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;861&quot; src=&quot;/_astro/17.3h3Ir3ey_dFXec.webp&quot; srcset=&quot;/_astro/17.3h3Ir3ey_Zf1fdj.webp 640w, /_astro/17.3h3Ir3ey_1WcGok.webp 750w, /_astro/17.3h3Ir3ey_1ba8xp.webp 828w, /_astro/17.3h3Ir3ey_dFXec.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;蝋燭（Candle）&lt;a href=&quot;#蝋燭candle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;溶けた蝋が顔に垂れるんよ。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;1109&quot; src=&quot;/_astro/18.Cfp8GBk0_Z1K2LtE.webp&quot; srcset=&quot;/_astro/18.Cfp8GBk0_2rJs96.webp 640w, /_astro/18.Cfp8GBk0_2qBb6D.webp 750w, /_astro/18.Cfp8GBk0_2ppEtA.webp 828w, /_astro/18.Cfp8GBk0_Z1K2LtE.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ケーキ（Cake）&lt;a href=&quot;#ケーキcake&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;よく乗れたな。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1135&quot; src=&quot;/_astro/19.pwvOn-bj_1HG7Qf.webp&quot; srcset=&quot;/_astro/19.pwvOn-bj_Z1zrG5P.webp 640w, /_astro/19.pwvOn-bj_WKRxC.webp 750w, /_astro/19.pwvOn-bj_U7sbg.webp 828w, /_astro/19.pwvOn-bj_1HG7Qf.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バナナ（Banana）&lt;a href=&quot;#バナナbanana&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;乱暴・・・だけど、こいつは手が使えるだけ安心。
&lt;img loading=&quot;lazy&quot; width=&quot;1069&quot; height=&quot;981&quot; src=&quot;/_astro/20.MxUkJGoC_Z2pS9qP.webp&quot; srcset=&quot;/_astro/20.MxUkJGoC_Z1huzQC.webp 640w, /_astro/20.MxUkJGoC_1IFRSQ.webp 750w, /_astro/20.MxUkJGoC_ZmTiSN.webp 828w, /_astro/20.MxUkJGoC_Z2pS9qP.webp 1069w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;桜の木（Sakura Tree）&lt;a href=&quot;#桜の木sakura-tree&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;木としてはまだ若い。
&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;909&quot; src=&quot;/_astro/21.z-xS6h7p_WOjQ.webp&quot; srcset=&quot;/_astro/21.z-xS6h7p_Z1rWFAE.webp 640w, /_astro/21.z-xS6h7p_14dE4N.webp 750w, /_astro/21.z-xS6h7p_Z1pSoxs.webp 828w, /_astro/21.z-xS6h7p_WOjQ.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;福袋（Lucky Bag）&lt;a href=&quot;#福袋lucky-bag&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう中身見えちゃってるから、ドキドキもしないよね。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;893&quot; src=&quot;/_astro/22._LgbtT-w_1oT8X8.webp&quot; srcset=&quot;/_astro/22._LgbtT-w_ZGD9qT.webp 640w, /_astro/22._LgbtT-w_ZdtHAB.webp 750w, /_astro/22._LgbtT-w_Z28zgCK.webp 828w, /_astro/22._LgbtT-w_1oT8X8.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クリスマスツリー（Xmas Tree）&lt;a href=&quot;#クリスマスツリーxmas-tree&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;裾を引きずっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;781&quot; src=&quot;/_astro/23.BDEvHOFV_2joTht.webp&quot; srcset=&quot;/_astro/23.BDEvHOFV_1LX7EB.webp 640w, /_astro/23.BDEvHOFV_i72aP.webp 750w, /_astro/23.BDEvHOFV_XK3Ne.webp 828w, /_astro/23.BDEvHOFV_2joTht.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;個人的には、香水ペンギンが一番エキセントリックだったなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本当に動物じゃないじゃん！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>チームリーダーを5ヶ月やった僕が考える、リーダーとして押さえておくべき7つのこと</title><link>https://endorphinbath.com/posts/teamleader-to-be-based-on-7tips/</link><guid isPermaLink="true">https://endorphinbath.com/posts/teamleader-to-be-based-on-7tips/</guid><description>初めてチームリーダーを任されて5ヶ月経過した僕が考えたことになります。入社3年目のペーペーが、配下のPGさんに知識レベルで敵うわけがないので、「とりあえず最低限まとめ役として機能していれば良いかな。」というぐらいの心持ちで臨みました。</description><pubDate>Thu, 09 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_010.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;むむむ・・・、どうしようかなあ・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうした、何を迷っているんだ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああ、本をタブレットで読もうと思って、どれにしようか迷っているのだよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうか、電子書籍か・・・。そういえば、以前にプロジェクトでまとめ役をやっていたことがあったなあ。思い出されるわぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おっと？　タブレットからのまとめ役と解きますか？　その心は？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どちらもリーダーとしての役割があるでしょう～！ 今回も始まるよ～！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_014.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なるほど～！　電子書籍リーダー（Reader）とチームリーダー（Leader）だった～！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;リーダーを任されたプロジェクトの前置き&lt;a href=&quot;#リーダーを任されたプロジェクトの前置き&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こんな題名で書いていきますが、初めてチームリーダーを任されて５ヶ月経過した僕が考えることがテーマになります。&lt;/p&gt;&lt;p&gt;プロジェクトの種別としては、開発プロジェクトというか改修プロジェクトというか、品質がとんでもないことになっていたシステムを改善しましょうといった感じのプロジェクトでした。&lt;/p&gt;&lt;p&gt;ザックリとした体制としては以下のような体制だったような気がします。この中の1つのTのリーダーでした。1つのTに2人のリーダーがいた感じだったので、あまり重荷ではありませんでした。
&lt;img loading=&quot;lazy&quot; width=&quot;1117&quot; height=&quot;692&quot; src=&quot;/_astro/01.DusUxtNw_jC6Ud.webp&quot; srcset=&quot;/_astro/01.DusUxtNw_Mcoyr.webp 640w, /_astro/01.DusUxtNw_2pwUyx.webp 750w, /_astro/01.DusUxtNw_ZzT4Tt.webp 828w, /_astro/01.DusUxtNw_ZoKXYc.webp 1080w, /_astro/01.DusUxtNw_jC6Ud.webp 1117w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まあ、入社3年目のペーペーが、配下（名目的には）のPGさんに知識レベルで敵うわけがないので、「とりあえず最低限まとめ役として機能して、自分の担当分だけでも円滑に改修していければ良いかな。」というぐらいの心持ちで臨みました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;リーダーとして押さえておくべき7つのこと&lt;a href=&quot;#リーダーとして押さえておくべき7つのこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 感謝を言葉にして伝える。&lt;a href=&quot;#1-感謝を言葉にして伝える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは本当に忘れないようにしています。&lt;/p&gt;&lt;p&gt;接客業のアルバイトのときの「いらっしゃいませ～ありがとうございました」並に口癖（というかチャット癖）にするようにしています。&lt;/p&gt;&lt;p&gt;相手が時間を掛けた分、その労力には必ず労いを掛けるのは大事ですよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 相手に非が無ければ謝る。&lt;a href=&quot;#2-相手に非が無ければ謝る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここでミソなのは、自分に非が無くても相手に非が無ければ謝るということです。&lt;/p&gt;&lt;p&gt;実体験としては、僕のチームの配下のPGさんがソースのマージが必要な部分の確認が漏れていたことが原因で、顧客が利用する環境へのリリースが遅れた事がありました。&lt;/p&gt;&lt;p&gt;このとき、ソースのマージ部分はPGさんしか知りようがないので、僕はPGさんが報告したマージ部分しか確認しようがありませんでした。そのため、僕には非が無いわけなのですが・・・、謝らなければなりませんよね。&lt;/p&gt;&lt;p&gt;謝る対象の人は・・・、まず、ソースのマージはそのミスをしたPGさんではない方が行っていたので、その方に謝って再度マージをしてもらいました。次に、顧客への納期が遅れているため、その顧客に謝ってくれているPMに謝って、とりあえずリリースが遅れている直接原因と現在の進捗を報告しました。&lt;/p&gt;&lt;p&gt;人を束ねる人は、自分に非がなくても謝る・・・。社会人の宿命ですね。あと、子供を持ったときもそうなりますよね、たぶん。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 毅然とした態度を取る。&lt;a href=&quot;#3-毅然とした態度を取る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リーダーは決断の連続です。&lt;/p&gt;&lt;p&gt;毎回、最適な決断が行えるように、ほとんど毎日同じ服を着て決断疲れを起こさないようにしていますが、それでも自分の決断が正しかったのかどうか後で考えてしまうことがあります。&lt;/p&gt;&lt;p&gt;しかし、それを考えることに特に意味は無さそうです。自分が行った決断が正しかったかどうかを徹底的に問い詰めてくる人がいる環境は、ほとんどないと思ったほうが良いと思います。&lt;/p&gt;&lt;p&gt;リーダーを任されるように評価を受けている人は、決断力に大きな問題がある人ではないかと思われます。&lt;/p&gt;&lt;p&gt;そのため、後で決断を間違えたと後悔することもあると思いますが、そこは自分が正しかったと思って今後も邁進していきましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. やり取りを文字に残す。&lt;a href=&quot;#4-やり取りを文字に残す&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕は複数の画面の改修を担当して、かつそれ以外の画面を担当しているチームとも連携を取っていました。&lt;/p&gt;&lt;p&gt;そこで改修方法を最低限でも良いのでメモして残しておいたら、自分や他の人が直すときの手引きになりました。かつて行った改修作業が他の部分でも必要だった事はザラにあります。&lt;/p&gt;&lt;p&gt;また、こういうメモ書きを残しておくことが苦手な人もいます。その場合は貴方がメモを残してあげましょう。&lt;/p&gt;&lt;p&gt;そして、この文字に残すという作業はタイピング速度が肝になってきます。そのため、タイピング速度というのは業務遂行力にガチで直結するんですよね・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 優先度を決める。&lt;a href=&quot;#5-優先度を決める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リーダーになると、配下のメンバーに色々な作業を投げることになりますが、その際に優先度も都度、提示してあげましょう。&lt;/p&gt;&lt;p&gt;そして、この「優先度」なのですが、「重要度」と何だか一緒に考える方にチラホラお会いするのですが、僕は「優先度」と「重要度」という2軸で捉える考え方は不要だと思っています。&lt;/p&gt;&lt;p&gt;なぜなら、タスクは時間軸のみ捉えるべきだからです。もう少し細かく言うと、あくまで時間という軸でどの順番で作業をしていくと効率的に作業が進むのかを考えるべきであって、「重要」かどうかよりも「優先」という、時間軸に合ったワードを使う方が望ましいと思います。&lt;/p&gt;&lt;p&gt;例えば、「納期が3日後であるAのタスクとBのタスクがあって、AはBよりも重要だけど2日で終わり、Bは3日で終わる。」というケースの場合、タスクBを先に着手したほうが良いのです。これを「重要度」と「優先度」いう観点を混同してタスクAを先に着手させてタスクBの確認が遅れると、本来両方とも3日後に納品できるはずが、Aしか納品できなくなってしまうことが起きるのではないでしょうか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. 作業はまとまった時間で行う。&lt;a href=&quot;#6-作業はまとまった時間で行う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;リーダーになると、人に話しかけられたりチャットが飛んでくることが増えます。そのもらった瞬間に毎度毎度反応していたら、自分の作業が全く進みません。&lt;/p&gt;&lt;p&gt;そのため、話しかけられたりチャットが飛んできてもキリが悪ければ無視するか後回しにするように伝えましょう。大体の人は、後回しにしてくれます。&lt;/p&gt;&lt;p&gt;人は1つの作業に本格的に集中するのに5分くらいかかります。そのため、なるべく、作業の切り替えを少なくしましょう。&lt;/p&gt;&lt;p&gt;しかしながら、レスポンスは早いほうが良いです。そのため、キリが良いところだったら、すぐさま確認して返事をしてあげましょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. たまに話す機会を作る。&lt;a href=&quot;#7-たまに話す機会を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕自身は、9.5割くらいの業務はチャットで文字に起こしながら進めたほうが良いと思っています。そして、ボイスチャットは話した内容を全部覚えられないし、業務遂行においては悪手だと思っていました。そのため、プロジェクト参画当初の2，3ヶ月くらいは、ガリガリ文字を書きながら業務を遂行していました。&lt;/p&gt;&lt;p&gt;しかし、チームメンバーの中にはボイスチャットで話して仕事を進めたい方が一定数いるということに、2、3ヶ月経ってから気付きました。そうではないメンバーに対してはこの限りではありませんが、話したいメンバーとは定期的に話す機会を設けてあげましょう。&lt;/p&gt;&lt;p&gt;その話す機会を作ったら、何だかコミュニケーションを取りやすい環境になっていたのです。その毎度の定例会でも、柔らかい雰囲気を感じているのは、僕だけ・・・なのかは分かりませんが、少なくとも僕自身はそう感じています。個人チャットする機会も増えましたしね。&lt;/p&gt;&lt;p&gt;たまに効率的ではないことを行うことが効率性を呼ぶこともあります。なので、チームメンバーにどう業務を進めたいかをたまに相談しましょう。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お後がよろしいようで。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;確かに効率だけを考えるんじゃなくて、一緒に仕事をしているのは人間だということを考えて、業務を進めていこうってことだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お～～。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Creatures except penguin in Penguin Isle：（「ペンギンの島」のペンギン以外の生物を見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-creatures-except-penguin/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-creatures-except-penguin/</guid><description>There are many creatures except penguin in PenguinIsle. They make me smiled and been calm down, too.</description><pubDate>Tue, 07 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は「ペンギンの島」に出てくるペンギン以外の生物を紹介するよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ペンギンじゃないの？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ペンギン以外の生物のリスト&lt;a href=&quot;#ペンギン以外の生物のリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;












































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ペンギン以外の生物&lt;/th&gt;&lt;th&gt;手に入れたイベント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ウサギ（Arctic Hare）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クラカケアザラシ（Ribbon Seal）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;南アフリカオットセイ（Northern Fur Seal）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;トナカイ（Reindeer）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ウェッデルアザラシ（Weddell Seal）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;セイウチ（Walrus）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヘラジカ（Moose）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ゾウアザラシ（Elephant Seal）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ジャコウウシ（Muskox）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;タテゴトアザラシ（Harp Seal）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フォックス・テリア（Fox Terrier）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ホッキョクグマ（Polar Bear）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ホッキョクギツネ（Arctic Fox）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アカギツネ（Red Fox）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヤドカリ（Hermit Crab）&lt;/td&gt;&lt;td&gt;Blue Ocean Event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メスジカ（Female Sika Deer）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 20221 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オスジカ（Male Sika Deer）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 20221 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ダンディなフラミンゴ（Dandy Flamingo）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;エレガントなフラミンゴ（Elegant Flamingo）&lt;/td&gt;&lt;td&gt;Valentine 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ジンジャーブレッドトナカイ（Gingerbread Deer）&lt;/td&gt;&lt;td&gt;Christmas 2020 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;サクラハープアザラシ（Cherry Blossom Harp Seal）&lt;/td&gt;&lt;td&gt;Cherry Blossom Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アルパカ（Alpaca）&lt;/td&gt;&lt;td&gt;New Year 2020 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マフラーオットセイ（Muffler Fur Seal）&lt;/td&gt;&lt;td&gt;Xmas Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;トナカイのルドルフ（Rudolph Reindeer）&lt;/td&gt;&lt;td&gt;Xmas Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マフラーホッキョクグマ（Muffler Polar Bear）&lt;/td&gt;&lt;td&gt;Xmas Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h2&gt;ペンギン以外の生物の紹介&lt;a href=&quot;#ペンギン以外の生物の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;ウサギ（Arctic Hare）&lt;a href=&quot;#ウサギarctic-hare&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちっこいのお。
&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;601&quot; src=&quot;/_astro/01.BAUYSaMe_EwybQ.webp&quot; srcset=&quot;/_astro/01.BAUYSaMe_1IfljR.webp 640w, /_astro/01.BAUYSaMe_Z2dBoyY.webp 750w, /_astro/01.BAUYSaMe_1vDKLu.webp 828w, /_astro/01.BAUYSaMe_EwybQ.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クラカケアザラシ（Ribbon Seal）&lt;a href=&quot;#クラカケアザラシribbon-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;丸っこくてくぁいい。
&lt;img loading=&quot;lazy&quot; width=&quot;1033&quot; height=&quot;647&quot; src=&quot;/_astro/02.DluweINl_1WaBvC.webp&quot; srcset=&quot;/_astro/02.DluweINl_ZHsHqw.webp 640w, /_astro/02.DluweINl_Z1APozR.webp 750w, /_astro/02.DluweINl_1M0sWt.webp 828w, /_astro/02.DluweINl_1WaBvC.webp 1033w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;南アフリカオットセイ（Northern Fur Seal）&lt;a href=&quot;#南アフリカオットセイnorthern-fur-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いつでもだっちゅーのポーズ。
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;879&quot; src=&quot;/_astro/03.dAjCBy3Z_Z1c905P.webp&quot; srcset=&quot;/_astro/03.dAjCBy3Z_Z20RbxB.webp 640w, /_astro/03.dAjCBy3Z_ZWGf7c.webp 750w, /_astro/03.dAjCBy3Z_Z2iKiye.webp 828w, /_astro/03.dAjCBy3Z_Z1c905P.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;トナカイ（Reindeer）&lt;a href=&quot;#トナカイreindeer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんかずーっと水面に向かって走ってる。
&lt;img loading=&quot;lazy&quot; width=&quot;974&quot; height=&quot;695&quot; src=&quot;/_astro/04.4zgnonRg_ZxHKIk.webp&quot; srcset=&quot;/_astro/04.4zgnonRg_Z1duuKO.webp 640w, /_astro/04.4zgnonRg_Z1Oco1B.webp 750w, /_astro/04.4zgnonRg_bL2Pe.webp 828w, /_astro/04.4zgnonRg_ZxHKIk.webp 974w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ウェッデルアザラシ（Weddell Seal）&lt;a href=&quot;#ウェッデルアザラシweddell-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ねむそう。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;823&quot; src=&quot;/_astro/05.qkr_JTEu_ZAcAXI.webp&quot; srcset=&quot;/_astro/05.qkr_JTEu_Z23nX7L.webp 640w, /_astro/05.qkr_JTEu_2qUXQk.webp 750w, /_astro/05.qkr_JTEu_1ouuHn.webp 828w, /_astro/05.qkr_JTEu_ZAcAXI.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;セイウチ（Walrus）&lt;a href=&quot;#セイウチwalrus&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上目遣いがくぁいい。
&lt;img loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;765&quot; src=&quot;/_astro/06.BC5n6N1u_120zxe.webp&quot; srcset=&quot;/_astro/06.BC5n6N1u_ZiG9Ro.webp 640w, /_astro/06.BC5n6N1u_ZDufaV.webp 750w, /_astro/06.BC5n6N1u_Z2tyqGY.webp 828w, /_astro/06.BC5n6N1u_120zxe.webp 1070w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ヘラジカ（Moose）&lt;a href=&quot;#ヘラジカmoose&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;勇ましい。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;885&quot; src=&quot;/_astro/07.3f5efse4_Zl0e7R.webp&quot; srcset=&quot;/_astro/07.3f5efse4_Zg4IVd.webp 640w, /_astro/07.3f5efse4_M6cuc.webp 750w, /_astro/07.3f5efse4_Z2r55Jn.webp 828w, /_astro/07.3f5efse4_Zl0e7R.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ゾウアザラシ（Elephant Seal）&lt;a href=&quot;#ゾウアザラシelephant-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ぶさかわいい。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;663&quot; src=&quot;/_astro/08.C_VGI7J6_GSAzh.webp&quot; srcset=&quot;/_astro/08.C_VGI7J6_olrb.webp 640w, /_astro/08.C_VGI7J6_2cKn2o.webp 750w, /_astro/08.C_VGI7J6_ZMFCqC.webp 828w, /_astro/08.C_VGI7J6_GSAzh.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジャコウウシ（Muskox）&lt;a href=&quot;#ジャコウウシmuskox&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんか知らんが、木の上に立っている。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;981&quot; src=&quot;/_astro/09.CiQvXHtS_fdu08.webp&quot; srcset=&quot;/_astro/09.CiQvXHtS_ALvXB.webp 640w, /_astro/09.CiQvXHtS_Z1se94Q.webp 750w, /_astro/09.CiQvXHtS_Z16FAtQ.webp 828w, /_astro/09.CiQvXHtS_fdu08.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タテゴトアザラシ（Harp Seal）&lt;a href=&quot;#タテゴトアザラシharp-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;小型のアザラシであるかわいい。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;757&quot; src=&quot;/_astro/10.DTBZ_kSA_Z1ocRKA.webp&quot; srcset=&quot;/_astro/10.DTBZ_kSA_1Oxwe5.webp 640w, /_astro/10.DTBZ_kSA_23KVvE.webp 750w, /_astro/10.DTBZ_kSA_1mJKaP.webp 828w, /_astro/10.DTBZ_kSA_Z1ocRKA.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フォックス・テリア（Fox Terrier）&lt;a href=&quot;#フォックステリアfox-terrier&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;シュレーターペンギンと同じくらいのサイズ。意外とデカイ。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;783&quot; src=&quot;/_astro/11.D9OCimX5_1drAPj.webp&quot; srcset=&quot;/_astro/11.D9OCimX5_ZxjYYM.webp 640w, /_astro/11.D9OCimX5_Z22b5ty.webp 750w, /_astro/11.D9OCimX5_Z1lx3Qa.webp 828w, /_astro/11.D9OCimX5_1drAPj.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ホッキョクグマ（Polar Bear）&lt;a href=&quot;#ホッキョクグマpolar-bear&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;宙に浮いている・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1005&quot; src=&quot;/_astro/12.BFSw_hOh_Z2t5hlk.webp&quot; srcset=&quot;/_astro/12.BFSw_hOh_Z1y6KPh.webp 640w, /_astro/12.BFSw_hOh_Z1vMUtO.webp 750w, /_astro/12.BFSw_hOh_10GYGb.webp 828w, /_astro/12.BFSw_hOh_Z2t5hlk.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ホッキョクギツネ（Arctic Fox）&lt;a href=&quot;#ホッキョクギツネarctic-fox&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ピクニックペンギンの連れのように見える。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1340&quot; src=&quot;/_astro/13.Bi46NPQt_Z1eu4a8.webp&quot; srcset=&quot;/_astro/13.Bi46NPQt_1hV5c1.webp 640w, /_astro/13.Bi46NPQt_umAw9.webp 750w, /_astro/13.Bi46NPQt_Z14wXtg.webp 828w, /_astro/13.Bi46NPQt_Z1eu4a8.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アカギツネ（Red Fox）&lt;a href=&quot;#アカギツネred-fox&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;忠犬ポーズ。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;803&quot; src=&quot;/_astro/14.D-EzgzCp_V1B4N.webp&quot; srcset=&quot;/_astro/14.D-EzgzCp_ZBnGu7.webp 640w, /_astro/14.D-EzgzCp_Z3cS8I.webp 750w, /_astro/14.D-EzgzCp_1mun5Y.webp 828w, /_astro/14.D-EzgzCp_V1B4N.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ヤドカリ（Hermit Crab）&lt;a href=&quot;#ヤドカリhermit-crab&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今の所、唯一の甲殻類。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;617&quot; src=&quot;/_astro/15.DcCpXLxb_fhPbd.webp&quot; srcset=&quot;/_astro/15.DcCpXLxb_Z1XGJBy.webp 640w, /_astro/15.DcCpXLxb_Z6i75a.webp 750w, /_astro/15.DcCpXLxb_1aOiRE.webp 828w, /_astro/15.DcCpXLxb_fhPbd.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;メスジカ（Female Sika Deer）&lt;a href=&quot;#メスジカfemale-sika-deer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんかずーっと水面に向かって走ってる。その２
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1091&quot; src=&quot;/_astro/16.DQLyc0y-_Z1H4MGV.webp&quot; srcset=&quot;/_astro/16.DQLyc0y-_1JfjWo.webp 640w, /_astro/16.DQLyc0y-_ZMs5fV.webp 750w, /_astro/16.DQLyc0y-_ZNvvTp.webp 828w, /_astro/16.DQLyc0y-_Z1H4MGV.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;オスジカ（Male Sika Deer）&lt;a href=&quot;#オスジカmale-sika-deer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;鹿って、トナカイより小さいんだね。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1329&quot; src=&quot;/_astro/17.cMopU7OF_Z2odj0B.webp&quot; srcset=&quot;/_astro/17.cMopU7OF_1X1EcN.webp 640w, /_astro/17.cMopU7OF_1asawV.webp 750w, /_astro/17.cMopU7OF_ZpLded.webp 828w, /_astro/17.cMopU7OF_Z2odj0B.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ダンディなフラミンゴ（Dandy Flamingo）&lt;a href=&quot;#ダンディなフラミンゴdandy-flamingo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;シルクハットを冠っています。絶対に落としません。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1381&quot; src=&quot;/_astro/18.DrD1DD7H_Z28noB2.webp&quot; srcset=&quot;/_astro/18.DrD1DD7H_Z1cGP6y.webp 640w, /_astro/18.DrD1DD7H_Z1isXk6.webp 750w, /_astro/18.DrD1DD7H_ZlVu8d.webp 828w, /_astro/18.DrD1DD7H_Z28noB2.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;エレガントなフラミンゴ（Elegant Flamingo）&lt;a href=&quot;#エレガントなフラミンゴelegant-flamingo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;シルクハットを冠っていません。絶対に冠りません。
&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;1083&quot; src=&quot;/_astro/19.CXb9RpZ6_ZTXARO.webp&quot; srcset=&quot;/_astro/19.CXb9RpZ6_Z1d9q5M.webp 640w, /_astro/19.CXb9RpZ6_1kkiuO.webp 750w, /_astro/19.CXb9RpZ6_Z1dKa3P.webp 828w, /_astro/19.CXb9RpZ6_ZTXARO.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジンジャーブレッドトナカイ（Gingerbread Deer）&lt;a href=&quot;#ジンジャーブレッドトナカイgingerbread-deer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;平べったいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1495&quot; src=&quot;/_astro/20.BpoPANn5_niWtA.webp&quot; srcset=&quot;/_astro/20.BpoPANn5_Z1XucF0.webp 640w, /_astro/20.BpoPANn5_Z1N4wyM.webp 750w, /_astro/20.BpoPANn5_DgcvP.webp 828w, /_astro/20.BpoPANn5_niWtA.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;サクラハープアザラシ（Cherry Blossom Harp Seal）&lt;a href=&quot;#サクラハープアザラシcherry-blossom-harp-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;桜の花びらのようなシャンプーハットのようなものを召している。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1185&quot; src=&quot;/_astro/21.DYYuaJC2_5390I.webp&quot; srcset=&quot;/_astro/21.DYYuaJC2_Z1VAWjP.webp 640w, /_astro/21.DYYuaJC2_Z1XgygA.webp 750w, /_astro/21.DYYuaJC2_xiM4o.webp 828w, /_astro/21.DYYuaJC2_5390I.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アルパカ（Alpaca）&lt;a href=&quot;#アルパカalpaca&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;けっこうデカイ。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1437&quot; src=&quot;/_astro/22.DJCazBSA_ZeJKgC.webp&quot; srcset=&quot;/_astro/22.DJCazBSA_Z1vnddr.webp 640w, /_astro/22.DJCazBSA_UBvw3.webp 750w, /_astro/22.DJCazBSA_Z1oEBib.webp 828w, /_astro/22.DJCazBSA_ZeJKgC.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マフラーオットセイ（Muffler Fur Seal）&lt;a href=&quot;#マフラーオットセイmuffler-fur-seal&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;マフラーどころかセーターみたいなものも着ている。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;643&quot; src=&quot;/_astro/23.AoE2ld6Q_Z15SMUm.webp&quot; srcset=&quot;/_astro/23.AoE2ld6Q_Z8cEPF.webp 640w, /_astro/23.AoE2ld6Q_17rTn.webp 750w, /_astro/23.AoE2ld6Q_9bRFX.webp 828w, /_astro/23.AoE2ld6Q_Z15SMUm.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;トナカイのルドルフ（Rudolph Reindeer）&lt;a href=&quot;#トナカイのルドルフrudolph-reindeer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;赤鼻。
&lt;img loading=&quot;lazy&quot; width=&quot;1013&quot; height=&quot;881&quot; src=&quot;/_astro/24.C_Ei6_9f_Zzz1e6.webp&quot; srcset=&quot;/_astro/24.C_Ei6_9f_RGunO.webp 640w, /_astro/24.C_Ei6_9f_2fOOS3.webp 750w, /_astro/24.C_Ei6_9f_ZJJfyx.webp 828w, /_astro/24.C_Ei6_9f_Zzz1e6.webp 1013w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マフラーホッキョクグマ（Muffler Polar Bear）&lt;a href=&quot;#マフラーホッキョクグマmuffler-polar-bear&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;マフラーだけだと寒くない？
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1043&quot; src=&quot;/_astro/25.2m-bNMRS_Z1OpK8Y.webp&quot; srcset=&quot;/_astro/25.2m-bNMRS_1fWoWC.webp 640w, /_astro/25.2m-bNMRS_Z1gtPiy.webp 750w, /_astro/25.2m-bNMRS_Z1hh6YS.webp 828w, /_astro/25.2m-bNMRS_Z1OpK8Y.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とまあ、今回はこんなもんだな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本当にペンギンじゃないじゃん！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Penguins having done with penguinkind in Penguin Isle：（「ペンギンの島」のペンギンを辞めたペンギンたちを見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-penguins-having-done-with-penguin/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-penguins-having-done-with-penguin/</guid><description>In PenguinIsle, there are some penguins doubtful whether penguin or not. Let me show them.</description><pubDate>Mon, 06 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;This time, penguins are finally through with penguinkind!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Awesome! Let&apos;s get to it!&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;ペンギンを辞めたペンギンのリスト&lt;a href=&quot;#ペンギンを辞めたペンギンのリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ペンギンを辞めたペンギン&lt;/th&gt;&lt;th&gt;手に入れたイベント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;スタントマン（Stuntman）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シャチ（Orca）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;タツノオトシゴ（Seahorse）&lt;/td&gt;&lt;td&gt;Treasure Chest&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ハスキー（Husky）&lt;/td&gt;&lt;td&gt;Exchanging Penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ジンベエザメ（Whale Shark）&lt;/td&gt;&lt;td&gt;Exchanging Penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ピンクドラゴン（Pink Dragon）&lt;/td&gt;&lt;td&gt;Exchanging Penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コウモリ（Bat）&lt;/td&gt;&lt;td&gt;2021 Halloween Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シマリス（Chipmunk）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ホタル（Firefly）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;セミ（Cicada）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カブトムシ（Beetle）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クワガタ（Stag Beetle）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プテラノドン（Pteranodon）&lt;/td&gt;&lt;td&gt;Dinosaurs Event Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;フグ（Swellfish）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マグロ（Tuna）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クマノミ（Clownfish）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オニイトマキエイ（Manta Ray）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ウミガメ（Turtle）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヒトデ（Starfish）&lt;/td&gt;&lt;td&gt;Blue Ocean event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;赤ちゃんラッコ（Baby Sea Otter）&lt;/td&gt;&lt;td&gt;Sea Otter Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;てんとう虫（Ladybug）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;蝶の妖精（Butterfly Fairy）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ミツバチ（Bee）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レッサーパンダ（Lesser Panda）&lt;/td&gt;&lt;td&gt;Bamboo Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;黄色い牛（Yellow Cow）&lt;/td&gt;&lt;td&gt;New Year 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ネズミ（Mouse）&lt;/td&gt;&lt;td&gt;New Year 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;招き猫（Manekineko）&lt;/td&gt;&lt;td&gt;New Year 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;乳牛（Dairy Cow）&lt;/td&gt;&lt;td&gt;New Year 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ティラノサウルス（Tyrannosaurus）&lt;/td&gt;&lt;td&gt;Carnival Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ルドルフ（Rudolph）&lt;/td&gt;&lt;td&gt;Xmas Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h2&gt;ペンギンを辞めたペンギンの紹介&lt;a href=&quot;#ペンギンを辞めたペンギンの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;スタントマン（Stuntman）&lt;a href=&quot;#スタントマンstuntman&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1143&quot; src=&quot;/_astro/01.BcklW9ec_Z8B7P5.webp&quot; srcset=&quot;/_astro/01.BcklW9ec_Zxp47F.webp 640w, /_astro/01.BcklW9ec_ZyNv7h.webp 750w, /_astro/01.BcklW9ec_1W20aQ.webp 828w, /_astro/01.BcklW9ec_Z8B7P5.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シャチ（Orca）&lt;a href=&quot;#シャチorca&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1107&quot; src=&quot;/_astro/02.Cw18MBy-_5vj6s.webp&quot; srcset=&quot;/_astro/02.Cw18MBy-_iixyP.webp 640w, /_astro/02.Cw18MBy-_Z2ewVC4.webp 750w, /_astro/02.Cw18MBy-_hqDDD.webp 828w, /_astro/02.Cw18MBy-_5vj6s.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タツノオトシゴ（Seahorse）&lt;a href=&quot;#タツノオトシゴseahorse&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;873&quot; src=&quot;/_astro/03.BDlkwiYt_2fKT7n.webp&quot; srcset=&quot;/_astro/03.BDlkwiYt_ZYYUnJ.webp 640w, /_astro/03.BDlkwiYt_CcvCM.webp 750w, /_astro/03.BDlkwiYt_2tdmd9.webp 828w, /_astro/03.BDlkwiYt_2fKT7n.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ハスキー（Husky）&lt;a href=&quot;#ハスキーhusky&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1021&quot; src=&quot;/_astro/04.Da8KB9vP_ZwG8gA.webp&quot; srcset=&quot;/_astro/04.Da8KB9vP_25x479.webp 640w, /_astro/04.Da8KB9vP_26o0Ii.webp 750w, /_astro/04.Da8KB9vP_h57fz.webp 828w, /_astro/04.Da8KB9vP_ZwG8gA.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジンベエザメ（Whale Shark）&lt;a href=&quot;#ジンベエザメwhale-shark&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;1255&quot; src=&quot;/_astro/05.DH__dSGe_Uy2Ot.webp&quot; srcset=&quot;/_astro/05.DH__dSGe_Z1w4Hy8.webp 640w, /_astro/05.DH__dSGe_WqyJg.webp 750w, /_astro/05.DH__dSGe_Z1CThq9.webp 828w, /_astro/05.DH__dSGe_Uy2Ot.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ピンクドラゴン（Pink Dragon）&lt;a href=&quot;#ピンクドラゴンpink-dragon&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;797&quot; src=&quot;/_astro/06.CJO6orFr_ZwJIAz.webp&quot; srcset=&quot;/_astro/06.CJO6orFr_CjUwm.webp 640w, /_astro/06.CJO6orFr_Z20za8D.webp 750w, /_astro/06.CJO6orFr_Z1SWD6m.webp 828w, /_astro/06.CJO6orFr_ZwJIAz.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コウモリ（Bat）&lt;a href=&quot;#コウモリbat&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;757&quot; src=&quot;/_astro/07.BCHMqMFo_H0YSk.webp&quot; srcset=&quot;/_astro/07.BCHMqMFo_Z1Rp8Oo.webp 640w, /_astro/07.BCHMqMFo_Z2dde7V.webp 750w, /_astro/07.BCHMqMFo_2aWIlb.webp 828w, /_astro/07.BCHMqMFo_H0YSk.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シマリス（Chipmunk）&lt;a href=&quot;#シマリスchipmunk&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;733&quot; src=&quot;/_astro/08.hmt8Lknc_ds6mt.webp&quot; srcset=&quot;/_astro/08.hmt8Lknc_2hIDqL.webp 640w, /_astro/08.hmt8Lknc_Z1pc4Tm.webp 750w, /_astro/08.hmt8Lknc_lUt8t.webp 828w, /_astro/08.hmt8Lknc_ds6mt.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ホタル（Firefly）&lt;a href=&quot;#ホタルfirefly&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1185&quot; src=&quot;/_astro/09.ja0VWYlH_Z1gJN9X.webp&quot; srcset=&quot;/_astro/09.ja0VWYlH_Z1YlW87.webp 640w, /_astro/09.ja0VWYlH_w8xNS.webp 750w, /_astro/09.ja0VWYlH_tdXun.webp 828w, /_astro/09.ja0VWYlH_Z1gJN9X.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;セミ（Cicada）&lt;a href=&quot;#セミcicada&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;665&quot; src=&quot;/_astro/10.D_ZIZwif_1PbjFP.webp&quot; srcset=&quot;/_astro/10.D_ZIZwif_Zwnh1j.webp 640w, /_astro/10.D_ZIZwif_1EXJyT.webp 750w, /_astro/10.D_ZIZwif_Z1TtKue.webp 828w, /_astro/10.D_ZIZwif_1PbjFP.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カブトムシ（Beetle）&lt;a href=&quot;#カブトムシbeetle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;739&quot; src=&quot;/_astro/11.CJbZps_v_1g9hRq.webp&quot; srcset=&quot;/_astro/11.CJbZps_v_1zHzEj.webp 640w, /_astro/11.CJbZps_v_Z27d8FO.webp 750w, /_astro/11.CJbZps_v_ZU75e6.webp 828w, /_astro/11.CJbZps_v_1g9hRq.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クワガタ（Stag Beetle）&lt;a href=&quot;#クワガタstag-beetle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1155&quot; src=&quot;/_astro/12.D2mwPg7Y_Z1okz5G.webp&quot; srcset=&quot;/_astro/12.D2mwPg7Y_Z14AaD3.webp 640w, /_astro/12.D2mwPg7Y_Z1Nbd0H.webp 750w, /_astro/12.D2mwPg7Y_1pHNFT.webp 828w, /_astro/12.D2mwPg7Y_Z1okz5G.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プテラノドン（Pteranodon）&lt;a href=&quot;#プテラノドンpteranodon&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1117&quot; src=&quot;/_astro/13.CvD1MMpj_1gGbBq.webp&quot; srcset=&quot;/_astro/13.CvD1MMpj_ZtkP1o.webp 640w, /_astro/13.CvD1MMpj_22xTQk.webp 750w, /_astro/13.CvD1MMpj_21moeh.webp 828w, /_astro/13.CvD1MMpj_1gGbBq.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;フグ（Swellfish）&lt;a href=&quot;#フグswellfish&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;715&quot; src=&quot;/_astro/14.aBa36QzL_Z1PGPop.webp&quot; srcset=&quot;/_astro/14.aBa36QzL_1evmD3.webp 640w, /_astro/14.aBa36QzL_Z1VWjRK.webp 750w, /_astro/14.aBa36QzL_Z1AgGjb.webp 828w, /_astro/14.aBa36QzL_Z1PGPop.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;マグロ（Tuna）&lt;a href=&quot;#マグロtuna&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1055&quot; src=&quot;/_astro/15.qBIyXbB0_1xCGLv.webp&quot; srcset=&quot;/_astro/15.qBIyXbB0_Z1TaIJI.webp 640w, /_astro/15.qBIyXbB0_Z1SzW5I.webp 750w, /_astro/15.qBIyXbB0_Z1S3p1j.webp 828w, /_astro/15.qBIyXbB0_1xCGLv.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クマノミ（Clownfish）&lt;a href=&quot;#クマノミclownfish&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;629&quot; src=&quot;/_astro/16.CQWb611w_14dhxO.webp&quot; srcset=&quot;/_astro/16.CQWb611w_K1B6m.webp 640w, /_astro/16.CQWb611w_1tnerw.webp 750w, /_astro/16.CQWb611w_Z2jGtoA.webp 828w, /_astro/16.CQWb611w_14dhxO.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;オニイトマキエイ（Manta Ray）&lt;a href=&quot;#オニイトマキエイmanta-ray&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;747&quot; src=&quot;/_astro/17.CPvhwJeM_Z2hoOjb.webp&quot; srcset=&quot;/_astro/17.CPvhwJeM_ZzhL2v.webp 640w, /_astro/17.CPvhwJeM_Zl4lJV.webp 750w, /_astro/17.CPvhwJeM_Q1GGM.webp 828w, /_astro/17.CPvhwJeM_Z2hoOjb.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ウミガメ（Turtle）&lt;a href=&quot;#ウミガメturtle&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;991&quot; height=&quot;637&quot; src=&quot;/_astro/18.8qUHwMmg_m5GP8.webp&quot; srcset=&quot;/_astro/18.8qUHwMmg_2ovgBB.webp 640w, /_astro/18.8qUHwMmg_ZnBACx.webp 750w, /_astro/18.8qUHwMmg_SKYhq.webp 828w, /_astro/18.8qUHwMmg_m5GP8.webp 991w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ヒトデ（Starfish）&lt;a href=&quot;#ヒトデstarfish&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;787&quot; src=&quot;/_astro/19.Bix3GWpd_ZFwPXG.webp&quot; srcset=&quot;/_astro/19.Bix3GWpd_1h3peW.webp 640w, /_astro/19.Bix3GWpd_ZLOaOV.webp 750w, /_astro/19.Bix3GWpd_Z6b9cx.webp 828w, /_astro/19.Bix3GWpd_ZFwPXG.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;赤ちゃんラッコ（Baby Sea Otter）&lt;a href=&quot;#赤ちゃんラッコbaby-sea-otter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;785&quot; src=&quot;/_astro/20.BMLaurZZ_Z1yeIvU.webp&quot; srcset=&quot;/_astro/20.BMLaurZZ_Z1hLsc3.webp 640w, /_astro/20.BMLaurZZ_2iyA87.webp 750w, /_astro/20.BMLaurZZ_2pb7ao.webp 828w, /_astro/20.BMLaurZZ_Z1yeIvU.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;てんとう虫（Ladybug）&lt;a href=&quot;#てんとう虫ladybug&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;795&quot; src=&quot;/_astro/21.CQqngfjS_Z8PXHe.webp&quot; srcset=&quot;/_astro/21.CQqngfjS_1i4eku.webp 640w, /_astro/21.CQqngfjS_ZKNlJo.webp 750w, /_astro/21.CQqngfjS_Z1edkie.webp 828w, /_astro/21.CQqngfjS_Z8PXHe.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;蝶の妖精（Butterfly Fairy）&lt;a href=&quot;#蝶の妖精butterfly-fairy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1195&quot; src=&quot;/_astro/22.BUenCNEJ_ZtFs5k.webp&quot; srcset=&quot;/_astro/22.BUenCNEJ_ZW2VWa.webp 640w, /_astro/22.BUenCNEJ_Z10arDe.webp 750w, /_astro/22.BUenCNEJ_Z11Kdc0.webp 828w, /_astro/22.BUenCNEJ_ZtFs5k.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ミツバチ（Bee）&lt;a href=&quot;#ミツバチbee&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1067&quot; height=&quot;891&quot; src=&quot;/_astro/23.DtvPcauo_aCKLJ.webp&quot; srcset=&quot;/_astro/23.DtvPcauo_Z1y2N5p.webp 640w, /_astro/23.DtvPcauo_Z1DTQPe.webp 750w, /_astro/23.DtvPcauo_ZmUvPY.webp 828w, /_astro/23.DtvPcauo_aCKLJ.webp 1067w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;レッサーパンダ（Lesser Panda）&lt;a href=&quot;#レッサーパンダlesser-panda&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;849&quot; src=&quot;/_astro/24.CEE0ov-w_1Mv4RA.webp&quot; srcset=&quot;/_astro/24.CEE0ov-w_Z2u4iIf.webp 640w, /_astro/24.CEE0ov-w_Z2ew4EV.webp 750w, /_astro/24.CEE0ov-w_5a5dH.webp 828w, /_astro/24.CEE0ov-w_1Mv4RA.webp 1070w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;黄色い牛（Yellow Cow）&lt;a href=&quot;#黄色い牛yellow-cow&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;717&quot; src=&quot;/_astro/25.r4IU74MU_1MFg2x.webp&quot; srcset=&quot;/_astro/25.r4IU74MU_1qKeLE.webp 640w, /_astro/25.r4IU74MU_bXfOb.webp 750w, /_astro/25.r4IU74MU_1X5NR1.webp 828w, /_astro/25.r4IU74MU_1MFg2x.webp 1066w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ネズミ（Mouse）&lt;a href=&quot;#ネズミmouse&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1171&quot; src=&quot;/_astro/26.B1Jvv9qv_1tKVOh.webp&quot; srcset=&quot;/_astro/26.B1Jvv9qv_24R1cg.webp 640w, /_astro/26.B1Jvv9qv_Z1bS849.webp 750w, /_astro/26.B1Jvv9qv_1imov6.webp 828w, /_astro/26.B1Jvv9qv_1tKVOh.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;招き猫（Manekineko）&lt;a href=&quot;#招き猫manekineko&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1007&quot; height=&quot;775&quot; src=&quot;/_astro/27.1BWbbwkK_Z1cHb4E.webp&quot; srcset=&quot;/_astro/27.1BWbbwkK_1gdObd.webp 640w, /_astro/27.1BWbbwkK_Z2vIgF1.webp 750w, /_astro/27.1BWbbwkK_W0SoQ.webp 828w, /_astro/27.1BWbbwkK_Z1cHb4E.webp 1007w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;乳牛（Dairy Cow）&lt;a href=&quot;#乳牛dairy-cow&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1129&quot; src=&quot;/_astro/28.8x9_-ZBn_2jOlLl.webp&quot; srcset=&quot;/_astro/28.8x9_-ZBn_Z1fLUuu.webp 640w, /_astro/28.8x9_-ZBn_1hqD8X.webp 750w, /_astro/28.8x9_-ZBn_1gf7vU.webp 828w, /_astro/28.8x9_-ZBn_2jOlLl.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ティラノサウルス（Tyrannosaurus）&lt;a href=&quot;#ティラノサウルスtyrannosaurus&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1337&quot; src=&quot;/_astro/29.BGlU3bI7_Z1QUn9a.webp&quot; srcset=&quot;/_astro/29.BGlU3bI7_Z2r5PFg.webp 640w, /_astro/29.BGlU3bI7_ZGCipW.webp 750w, /_astro/29.BGlU3bI7_fakI5.webp 828w, /_astro/29.BGlU3bI7_Z1QUn9a.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ルドルフ（Rudolph）&lt;a href=&quot;#ルドルフrudolph&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1047&quot; src=&quot;/_astro/30.BQujoN-W_1oilb2.webp&quot; srcset=&quot;/_astro/30.BQujoN-W_205jIi.webp 640w, /_astro/30.BQujoN-W_22807B.webp 750w, /_astro/30.BQujoN-W_ZvOnst.webp 828w, /_astro/30.BQujoN-W_1oilb2.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Babes are so cute!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Really! Moderate roundness hits different!&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Cute baby penguins in Penguin Isle：（「ペンギンの島」の赤ちゃんペンギンたちを見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-baby-penguins/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-baby-penguins/</guid><description>There are many cute penguins in Penguin Isle. So, I &apos;ll show baby penguins I have. They make me calm down every day.</description><pubDate>Sun, 05 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、今回は「ペンギンの島」の赤ちゃんペンギンを紹介しちゃうぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あぁっ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;紹介する赤ちゃんペンギンのリスト&lt;a href=&quot;#紹介する赤ちゃんペンギンのリスト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ペンギン&lt;/th&gt;&lt;th&gt;手に入れたイベント&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ノーマル赤ちゃん（Baby）&lt;/td&gt;&lt;td&gt;Baby Penguin Mileage&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;釣り（Baby Fisherman）&lt;/td&gt;&lt;td&gt;Exchanging Penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新芽（Sprout）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;大きめのドングリ（Bigger Acorn）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;小さめのドングリ（Smaller Acorn）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ハスキー（Husky）&lt;/td&gt;&lt;td&gt;Exchanging Penguin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;昆虫学者（Entomologist）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;おさげ（Pigtail）&lt;/td&gt;&lt;td&gt;Autumn 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;プテラノドン（Pteranodon）&lt;/td&gt;&lt;td&gt;Dinosaurs Event Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クマノミ（Clowfish）&lt;/td&gt;&lt;td&gt;Blue Ocean Event 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;宇宙飛行士（Astronaut）&lt;/td&gt;&lt;td&gt;Competition Winner&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カボチャ（Pumpkin）&lt;/td&gt;&lt;td&gt;2021 Halloween Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;小エルフ（Little Elf）&lt;/td&gt;&lt;td&gt;Christmas 2020 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コウモリ（Bat）&lt;/td&gt;&lt;td&gt;2021 Halloween Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ホタル（Firefly）&lt;/td&gt;&lt;td&gt;Summer Camping 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;てんとう虫（Ladybug）&lt;/td&gt;&lt;td&gt;Spring Bloom Festival 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;赤ちゃんラッコ（Baby Sea Otter）&lt;/td&gt;&lt;td&gt;Sea Otter Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;レッサーパンダ（Lesser Panda）&lt;/td&gt;&lt;td&gt;Bamboo Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ねずみ（Mouse）&lt;/td&gt;&lt;td&gt;New Year 2021 Limited Edition&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;時計塔の中（In The Clock Tower）&lt;/td&gt;&lt;td&gt;Craft&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;赤ちゃんペンギンたち&lt;a href=&quot;#赤ちゃんペンギンたち&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;ノーマル赤ちゃん（Baby）&lt;a href=&quot;#ノーマル赤ちゃんbaby&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Simple is the best.　的な風潮もある。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;697&quot; src=&quot;/_astro/01.C7n9Ach2_Z1ka5Il.webp&quot; srcset=&quot;/_astro/01.C7n9Ach2_Z1HY6Kz.webp 640w, /_astro/01.C7n9Ach2_1jMkHM.webp 750w, /_astro/01.C7n9Ach2_1FsXhm.webp 828w, /_astro/01.C7n9Ach2_Z1ka5Il.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;釣り（Baby Fisherman）&lt;a href=&quot;#釣りbaby-fisherman&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;大人ペンギンとの対比でより可愛くなっている気がする。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;927&quot; src=&quot;/_astro/02.DTc3pM_k_Z2t86Yz.webp&quot; srcset=&quot;/_astro/02.DTc3pM_k_ZROlRP.webp 640w, /_astro/02.DTc3pM_k_2nqdoV.webp 750w, /_astro/02.DTc3pM_k_Z37mrx.webp 828w, /_astro/02.DTc3pM_k_Z2t86Yz.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;新芽（Sprout）&lt;a href=&quot;#新芽sprout&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ぐんぐん育つんだぞ。
&lt;img loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;919&quot; src=&quot;/_astro/03.U7stc_g5_vBy2X.webp&quot; srcset=&quot;/_astro/03.U7stc_g5_1b8VWu.webp 640w, /_astro/03.U7stc_g5_Z2vTQmd.webp 750w, /_astro/03.U7stc_g5_GKcbm.webp 828w, /_astro/03.U7stc_g5_vBy2X.webp 1071w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;大きめのドングリ（Bigger Acorn）&lt;a href=&quot;#大きめのドングリbigger-acorn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;被り物とか暖かそうだなー。
&lt;img loading=&quot;lazy&quot; width=&quot;1075&quot; height=&quot;1007&quot; src=&quot;/_astro/04.Vxo-JtNA_Z1QkC4j.webp&quot; srcset=&quot;/_astro/04.Vxo-JtNA_29D7km.webp 640w, /_astro/04.Vxo-JtNA_2bVWFO.webp 750w, /_astro/04.Vxo-JtNA_Z2anWH5.webp 828w, /_astro/04.Vxo-JtNA_Z1QkC4j.webp 1075w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;小さめのドングリ（Smaller Acorn）&lt;a href=&quot;#小さめのドングリsmaller-acorn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;被り物とかすげえ暖かそうだなー。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;873&quot; src=&quot;/_astro/05.Buip4j0i_1QVyFk.webp&quot; srcset=&quot;/_astro/05.Buip4j0i_ZqMjIo.webp 640w, /_astro/05.Buip4j0i_1bp7i8.webp 750w, /_astro/05.Buip4j0i_pmyrd.webp 828w, /_astro/05.Buip4j0i_1QVyFk.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ハスキー（Husky）&lt;a href=&quot;#ハスキーhusky&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;・・・かなりタイプです。
&lt;img loading=&quot;lazy&quot; width=&quot;1075&quot; height=&quot;805&quot; src=&quot;/_astro/06.Bs9EMCc6_1HFnzG.webp&quot; srcset=&quot;/_astro/06.Bs9EMCc6_Z1oRKhU.webp 640w, /_astro/06.Bs9EMCc6_Z1pIrwD.webp 750w, /_astro/06.Bs9EMCc6_Z1S8q5t.webp 828w, /_astro/06.Bs9EMCc6_1HFnzG.webp 1075w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;昆虫学者（Entomologist）&lt;a href=&quot;#昆虫学者entomologist&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;赤ちゃんペンギンに「昆虫学者」って名付けるのがミソなんだよな。
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;701&quot; src=&quot;/_astro/07.DQz-3STe_1sVuFm.webp&quot; srcset=&quot;/_astro/07.DQz-3STe_Z1707jt.webp 640w, /_astro/07.DQz-3STe_ZwmpdL.webp 750w, /_astro/07.DQz-3STe_ZaFLEc.webp 828w, /_astro/07.DQz-3STe_1sVuFm.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;おさげ（Pigtail）&lt;a href=&quot;#おさげpigtail&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;寓話に出てきそうなやつ。
&lt;img loading=&quot;lazy&quot; width=&quot;1068&quot; height=&quot;829&quot; src=&quot;/_astro/08.Clj2d_fM_Z2vJf5K.webp&quot; srcset=&quot;/_astro/08.Clj2d_fM_Z1x8NaN.webp 640w, /_astro/08.Clj2d_fM_2n9Ddb.webp 750w, /_astro/08.Clj2d_fM_bF9S0.webp 828w, /_astro/08.Clj2d_fM_Z2vJf5K.webp 1068w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;プテラノドン（Pteranodon）&lt;a href=&quot;#プテラノドンpteranodon&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;恐竜の中であえてこれを赤ちゃんペンギンに着させたかー！
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;779&quot; src=&quot;/_astro/09.CfdnEq36_Z1c3vmb.webp&quot; srcset=&quot;/_astro/09.CfdnEq36_Z1GaNb7.webp 640w, /_astro/09.CfdnEq36_2tbJJa.webp 750w, /_astro/09.CfdnEq36_2weN0E.webp 828w, /_astro/09.CfdnEq36_Z1c3vmb.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クマノミ（Clowfish）&lt;a href=&quot;#クマノミclowfish&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;人間の赤ちゃんでもこういうの着てる画像を見たことあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;983&quot; src=&quot;/_astro/10.Ds_8_Z_c_ZtLDhL.webp&quot; srcset=&quot;/_astro/10.Ds_8_Z_c_Z1sK3vJ.webp 640w, /_astro/10.Ds_8_Z_c_27rTOQ.webp 750w, /_astro/10.Ds_8_Z_c_2t0spQ.webp 828w, /_astro/10.Ds_8_Z_c_ZtLDhL.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;宇宙飛行士（Astronaut）&lt;a href=&quot;#宇宙飛行士astronaut&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;うわー、アンリアルー。まあ可愛いからいいんですけどね。
&lt;img loading=&quot;lazy&quot; width=&quot;1077&quot; height=&quot;903&quot; src=&quot;/_astro/11.DA-h5HK9_1VaV4x.webp&quot; srcset=&quot;/_astro/11.DA-h5HK9_Z1Ic4By.webp 640w, /_astro/11.DA-h5HK9_Z1O48mn.webp 750w, /_astro/11.DA-h5HK9_Zx4Mn8.webp 828w, /_astro/11.DA-h5HK9_1VaV4x.webp 1077w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カボチャ（Pumpkin）&lt;a href=&quot;#カボチャpumpkin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;人間の赤ちゃんでも、ハロウィンにこういうのを着させる親はいるよね多分。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1115&quot; src=&quot;/_astro/12.B_RIHjTt_Z16bcpT.webp&quot; srcset=&quot;/_astro/12.B_RIHjTt_Z1rYhGi.webp 640w, /_astro/12.B_RIHjTt_Z1rMJX1.webp 750w, /_astro/12.B_RIHjTt_Z1sYgA4.webp 828w, /_astro/12.B_RIHjTt_Z16bcpT.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;小エルフ（Little Elf）&lt;a href=&quot;#小エルフlittle-elf&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;もう顔が見えないよ。サイズミスったか？
&lt;img loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;743&quot; src=&quot;/_astro/13.BaDjvdJV_2ptPGx.webp&quot; srcset=&quot;/_astro/13.BaDjvdJV_Z1a3QAG.webp 640w, /_astro/13.BaDjvdJV_ZUPrj7.webp 750w, /_astro/13.BaDjvdJV_gfB8B.webp 828w, /_astro/13.BaDjvdJV_2ptPGx.webp 1070w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;コウモリ（Bat）&lt;a href=&quot;#コウモリbat&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;出た～！　 人間の赤ちゃんでもこういうの着てるそうな服シリーズ～！
&lt;img loading=&quot;lazy&quot; width=&quot;1066&quot; height=&quot;743&quot; src=&quot;/_astro/14.HZFBwD7a_Z2bl1DD.webp&quot; srcset=&quot;/_astro/14.HZFBwD7a_Za1HcG.webp 640w, /_astro/14.HZFBwD7a_4bH4S.webp 750w, /_astro/14.HZFBwD7a_1ghKwB.webp 828w, /_astro/14.HZFBwD7a_Z2bl1DD.webp 1066w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ホタル（Firefly）&lt;a href=&quot;#ホタルfirefly&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学芸会かよ～。
&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;793&quot; src=&quot;/_astro/15.B4FXdQWX_55278.webp&quot; srcset=&quot;/_astro/15.B4FXdQWX_1WAuTk.webp 640w, /_astro/15.B4FXdQWX_ZFizKF.webp 750w, /_astro/15.B4FXdQWX_Z18Hyjv.webp 828w, /_astro/15.B4FXdQWX_55278.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;てんとう虫（Ladybug）&lt;a href=&quot;#てんとう虫ladybug&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学芸会だよ～。
&lt;img loading=&quot;lazy&quot; width=&quot;937&quot; height=&quot;537&quot; src=&quot;/_astro/16.D1vyXWl__Zj4u9u.webp&quot; srcset=&quot;/_astro/16.D1vyXWl__Z4vdWO.webp 640w, /_astro/16.D1vyXWl__ZOyXGG.webp 750w, /_astro/16.D1vyXWl__Z1qQq8N.webp 828w, /_astro/16.D1vyXWl__Zj4u9u.webp 937w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;赤ちゃんラッコ（Baby Sea Otter）&lt;a href=&quot;#赤ちゃんラッコbaby-sea-otter&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これもかなり好きです。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1023&quot; src=&quot;/_astro/17.BXzdMnuk_2nGCBE.webp&quot; srcset=&quot;/_astro/17.BXzdMnuk_Cip5F.webp 640w, /_astro/17.BXzdMnuk_Z1T0KbV.webp 750w, /_astro/17.BXzdMnuk_1lRu9h.webp 828w, /_astro/17.BXzdMnuk_2nGCBE.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;レッサーパンダ（Lesser Panda）&lt;a href=&quot;#レッサーパンダlesser-panda&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;あーこれもかなり好きです。笹食うんですよこいつペンギンのくせに。
&lt;img loading=&quot;lazy&quot; width=&quot;1072&quot; height=&quot;1037&quot; src=&quot;/_astro/18.CjxlgshH_ThM5e.webp&quot; srcset=&quot;/_astro/18.CjxlgshH_Z1dwUxT.webp 640w, /_astro/18.CjxlgshH_1kcWYQ.webp 750w, /_astro/18.CjxlgshH_1jpGiw.webp 828w, /_astro/18.CjxlgshH_ThM5e.webp 1072w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ねずみ（Mouse）&lt;a href=&quot;#ねずみmouse&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デブいなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;917&quot; height=&quot;617&quot; src=&quot;/_astro/19.BOiEnOMw_7bmRS.webp&quot; srcset=&quot;/_astro/19.BOiEnOMw_7DyEw.webp 640w, /_astro/19.BOiEnOMw_Xe0RG.webp 750w, /_astro/19.BOiEnOMw_ZDHlAs.webp 828w, /_astro/19.BOiEnOMw_7bmRS.webp 917w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;時計塔の中（In The Clock Tower）&lt;a href=&quot;#時計塔の中in-the-clock-tower&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;針が12時になると、時計塔から赤ちゃんペンギンが出てきます。&lt;/p&gt;&lt;p&gt;ちなみに、「かしわざき　せな」は僕のマイペンギンの以前の名前です。しかし、ペンギンの島のバグで名前が元の「私のペンギン」となってしまいましたが・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1239&quot; src=&quot;/_astro/20.DHqfCU_O_ZDbweY.webp&quot; srcset=&quot;/_astro/20.DHqfCU_O_1AhXsd.webp 640w, /_astro/20.DHqfCU_O_Z10fN4K.webp 750w, /_astro/20.DHqfCU_O_1tIyxl.webp 828w, /_astro/20.DHqfCU_O_ZDbweY.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ハァ～ッ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;みんなすくすく育てよ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>[Game] Habitats I can show in Penguin Isle：（「ペンギンの島」で見せれる生息地を全て見せるよ）</title><link>https://endorphinbath.com/posts/game-penguinisle-habitats/</link><guid isPermaLink="true">https://endorphinbath.com/posts/game-penguinisle-habitats/</guid><description>Let me show various habitats and penguins there in penguin isle. Probably those will make you smiled and been calm down.</description><pubDate>Sat, 04 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、今回は「ペンギンの島」の生息地を全部貼るぞ～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おっ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生息地の一覧&lt;a href=&quot;#生息地の一覧&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




























































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;生息地&lt;/th&gt;&lt;th&gt;生息地にいるペンギン&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;釣り場（Fishing Spot）&lt;/td&gt;&lt;td&gt;釣り屋（Fisherman）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;花畑（Flower Garden）&lt;/td&gt;&lt;td&gt;ファーマー（Farmer）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;採石場（Gravelly Field）&lt;/td&gt;&lt;td&gt;採掘師（Miner）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;温泉（Hot Spring）&lt;/td&gt;&lt;td&gt;掃除屋（Janitar）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;南極基地（Anarctic Base）&lt;/td&gt;&lt;td&gt;南極隊員（Antarctic Explorer）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カモメの巣（Seagull Nest）&lt;/td&gt;&lt;td&gt;管理員（Ranger）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;遊園地（Amusement Park）&lt;/td&gt;&lt;td&gt;風船販売員（Balloon Seller）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;イグルーキャンプ（Igloo Camp）&lt;/td&gt;&lt;td&gt;氷採掘師（Ice Miner）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;彫刻公園（Sculpture Park）&lt;/td&gt;&lt;td&gt;彫刻師（Sculptor）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;イルカ飼育場（Dolphin Farm）&lt;/td&gt;&lt;td&gt;イルカ飼育係（Dolphin Trainer）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;アルバトロス巣（Albatross Nest）&lt;/td&gt;&lt;td&gt;探検家（Explorer）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;灯台（Lighthouse）&lt;/td&gt;&lt;td&gt;灯台守（Lighthouse Keeper）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;鹿牧場（Deer Ranch）&lt;/td&gt;&lt;td&gt;牧場管理員（Ranch Owner）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;熱気球飛行場（Hot Air Balloon Field）&lt;/td&gt;&lt;td&gt;飛行士（Balloon Pilot）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;クジラの巣（Whale’s Nest）&lt;/td&gt;&lt;td&gt;スタントマン（Stuntman）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ドキュメンタリーの撮影現場（Documentary Site）&lt;/td&gt;&lt;td&gt;ディレクター（Director Penguin）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;危険な海岸（Danger Shore）&lt;/td&gt;&lt;td&gt;シャチ（Orca Penguin）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ベーカリー（Bakery）&lt;/td&gt;&lt;td&gt;パティシエ（Patissier）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;映画館（Theater）&lt;/td&gt;&lt;td&gt;映写技師（Projectionist）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ロケット発射場（Rocket Launch Field）&lt;/td&gt;&lt;td&gt;科学者（Scientist）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;観覧車（Ferris Wheel）&lt;/td&gt;&lt;td&gt;オペレーター（Wheel Operator）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;タコライド（Octopus Ride）&lt;/td&gt;&lt;td&gt;タコペンギン（Octopus Penguin）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;海のメリーゴーランド（Ocean Carousel）&lt;/td&gt;&lt;td&gt;タツノオトシゴペンギン（Seahorse Penguin）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;丸太ライド（Log Flume）&lt;/td&gt;&lt;td&gt;ジャングルガイド（Jungle Guide）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;リトルベニス（Little Venezia）&lt;/td&gt;&lt;td&gt;ボート屋（Boatman）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オリンポスの塔（Olympos Tower）&lt;/td&gt;&lt;td&gt;アポロ（Apollo）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ケーブルカー（Cable Car）&lt;/td&gt;&lt;td&gt;エンジニア（Engineer）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バイキング（Viking）&lt;/td&gt;&lt;td&gt;バイキングの族長（Viking Chieftain）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;バンパーカー（Bumper Cars）&lt;/td&gt;&lt;td&gt;タイムキーパー（Timekeeper）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生息地の紹介&lt;a href=&quot;#生息地の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;釣り場（Fishing Spot）&lt;a href=&quot;#釣り場fishing-spot&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;親子なんでしょうか？　二人いや二匹で釣りしています。
&lt;img loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;919&quot; src=&quot;/_astro/30.D2RScLZ0_Z1GgsLk.webp&quot; srcset=&quot;/_astro/30.D2RScLZ0_ZGgLxE.webp 640w, /_astro/30.D2RScLZ0_FQxVz.webp 750w, /_astro/30.D2RScLZ0_Z1aEwjM.webp 828w, /_astro/30.D2RScLZ0_Z1GgsLk.webp 1071w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;花畑（Flower Garden）&lt;a href=&quot;#花畑flower-garden&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;花に水をやっています。麦わら帽子までして、南極でも日光は強いんでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;1169&quot; src=&quot;/_astro/31.CdaYX3w0_12Xxap.webp&quot; srcset=&quot;/_astro/31.CdaYX3w0_9pf54.webp 640w, /_astro/31.CdaYX3w0_ZziRga.webp 750w, /_astro/31.CdaYX3w0_1TVEj5.webp 828w, /_astro/31.CdaYX3w0_12Xxap.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;採石場（Gravelly Field）&lt;a href=&quot;#採石場gravelly-field&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;南極大陸は氷だけじゃないのでしょうか。石も採れるのでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1075&quot; src=&quot;/_astro/32.BjhsrI-v_X96n2.webp&quot; srcset=&quot;/_astro/32.BjhsrI-v_1iIg2A.webp 640w, /_astro/32.BjhsrI-v_1jaWI1.webp 750w, /_astro/32.BjhsrI-v_1ifB37.webp 828w, /_astro/32.BjhsrI-v_X96n2.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;温泉（Hot Spring）&lt;a href=&quot;#温泉hot-spring&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;南極大陸で温泉を作るのってだいぶ苦労したんでしょうねえ。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1111&quot; src=&quot;/_astro/33.DPvLLyk3_1O7YO0.webp&quot; srcset=&quot;/_astro/33.DPvLLyk3_Z2qlg0b.webp 640w, /_astro/33.DPvLLyk3_70nBQ.webp 750w, /_astro/33.DPvLLyk3_Z2rd9Un.webp 828w, /_astro/33.DPvLLyk3_1O7YO0.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;南極基地（Anarctic Base）&lt;a href=&quot;#南極基地anarctic-base&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;焚き火しています。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1069&quot; src=&quot;/_astro/35.DQDz4pLm_nrgXu.webp&quot; srcset=&quot;/_astro/35.DQDz4pLm_Q25EJ.webp 640w, /_astro/35.DQDz4pLm_Z1Fxez1.webp 750w, /_astro/35.DQDz4pLm_PyqFg.webp 828w, /_astro/35.DQDz4pLm_nrgXu.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カモメの巣（Seagull Nest）&lt;a href=&quot;#カモメの巣seagull-nest&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カモメウォッチング。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;939&quot; src=&quot;/_astro/36.Da6lVvHh_Z1YsRYd.webp&quot; srcset=&quot;/_astro/36.Da6lVvHh_2aiCYz.webp 640w, /_astro/36.Da6lVvHh_Z26LEUf.webp 750w, /_astro/36.Da6lVvHh_Z29BxT.webp 828w, /_astro/36.Da6lVvHh_Z1YsRYd.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;遊園地（Amusement Park）&lt;a href=&quot;#遊園地amusement-park&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ひたすら風船を飛ばしています。
&lt;img loading=&quot;lazy&quot; width=&quot;1070&quot; height=&quot;1025&quot; src=&quot;/_astro/37.GIRRV3eW_Z20Grjw.webp&quot; srcset=&quot;/_astro/37.GIRRV3eW_Z1q4bTP.webp 640w, /_astro/37.GIRRV3eW_Z1nSqwW.webp 750w, /_astro/37.GIRRV3eW_1PwU3W.webp 828w, /_astro/37.GIRRV3eW_Z20Grjw.webp 1070w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;イグルーキャンプ（Igloo Camp）&lt;a href=&quot;#イグルーキャンプigloo-camp&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こっちは氷を採っているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;803&quot; src=&quot;/_astro/38.CQao1NLH_1fWcXI.webp&quot; srcset=&quot;/_astro/38.CQao1NLH_ZbLE44.webp 640w, /_astro/38.CQao1NLH_2fvo4R.webp 750w, /_astro/38.CQao1NLH_1M6pw2.webp 828w, /_astro/38.CQao1NLH_1fWcXI.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;彫刻公園（Sculpture Park）&lt;a href=&quot;#彫刻公園sculpture-park&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;溶けないかどうかが心配ですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1037&quot; src=&quot;/_astro/39.DQvmru3v_Z2nnO3.webp&quot; srcset=&quot;/_astro/39.DQvmru3v_MQNI0.webp 640w, /_astro/39.DQvmru3v_Z1IrlyB.webp 750w, /_astro/39.DQvmru3v_1wiNN2.webp 828w, /_astro/39.DQvmru3v_Z2nnO3.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;イルカ飼育場（Dolphin Farm）&lt;a href=&quot;#イルカ飼育場dolphin-farm&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;元気に跳ねています。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1027&quot; src=&quot;/_astro/41.C39ZCLGj_dUkEU.webp&quot; srcset=&quot;/_astro/41.C39ZCLGj_Z2aqVJp.webp 640w, /_astro/41.C39ZCLGj_Z28gbmw.webp 750w, /_astro/41.C39ZCLGj_Z1qQQFN.webp 828w, /_astro/41.C39ZCLGj_dUkEU.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アルバトロス巣（Albatross Nest）&lt;a href=&quot;#アルバトロス巣albatross-nest&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この高台に止まるってことですかね？
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1175&quot; src=&quot;/_astro/40.DpVa1_Sb_ZVKGVR.webp&quot; srcset=&quot;/_astro/40.DpVa1_Sb_Zhq5u2.webp 640w, /_astro/40.DpVa1_Sb_Zj5GqM.webp 750w, /_astro/40.DpVa1_Sb_Zkxn0Y.webp 828w, /_astro/40.DpVa1_Sb_ZVKGVR.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;灯台（Lighthouse）&lt;a href=&quot;#灯台lighthouse&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;どこからか船が来るんですかねえ。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1109&quot; src=&quot;/_astro/42.BWoE0QIR_awvBA.webp&quot; srcset=&quot;/_astro/42.BWoE0QIR_1P3u3b.webp 640w, /_astro/42.BWoE0QIR_ZGM08I.webp 750w, /_astro/42.BWoE0QIR_1ObA7Y.webp 828w, /_astro/42.BWoE0QIR_awvBA.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;鹿牧場（Deer Ranch）&lt;a href=&quot;#鹿牧場deer-ranch&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一匹の鹿を丹精込めて育てているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;869&quot; src=&quot;/_astro/43.KwY4Jlno_Z1JC8YQ.webp&quot; srcset=&quot;/_astro/43.KwY4Jlno_Z2lXKGp.webp 640w, /_astro/43.KwY4Jlno_ZILjES.webp 750w, /_astro/43.KwY4Jlno_ZUMmUG.webp 828w, /_astro/43.KwY4Jlno_Z1JC8YQ.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;熱気球飛行場（Hot Air Balloon Field）&lt;a href=&quot;#熱気球飛行場hot-air-balloon-field&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;見晴らし良いです。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1069&quot; src=&quot;/_astro/44.DztZMpy1_Z1j334K.webp&quot; srcset=&quot;/_astro/44.DztZMpy1_1huYyS.webp 640w, /_astro/44.DztZMpy1_1hWGfj.webp 750w, /_astro/44.DztZMpy1_1h2kzp.webp 828w, /_astro/44.DztZMpy1_Z1j334K.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;クジラの巣（Whale’s Nest）&lt;a href=&quot;#クジラの巣whales-nest&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ひたすらクジラで遊んでいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1155&quot; src=&quot;/_astro/45.zbUbOrJu_ZXhpGa.webp&quot; srcset=&quot;/_astro/45.zbUbOrJu_Z9TdAc.webp 640w, /_astro/45.zbUbOrJu_1DwKWk.webp 750w, /_astro/45.zbUbOrJu_2iVQYr.webp 828w, /_astro/45.zbUbOrJu_ZXhpGa.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ドキュメンタリーの撮影現場（Documentary Site）&lt;a href=&quot;#ドキュメンタリーの撮影現場documentary-site&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一人いや一匹で撮影してるのか、大変そうですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1227&quot; src=&quot;/_astro/34.CMxxWIvI_EFq53.webp&quot; srcset=&quot;/_astro/34.CMxxWIvI_9Cf0s.webp 640w, /_astro/34.CMxxWIvI_Z2qMrxV.webp 750w, /_astro/34.CMxxWIvI_3bU4a.webp 828w, /_astro/34.CMxxWIvI_EFq53.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;危険な海岸（Danger Shore）&lt;a href=&quot;#危険な海岸danger-shore&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ビーチチェアに座っている人を威嚇します。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;917&quot; src=&quot;/_astro/46.CLbvt-LX_2qf9Gj.webp&quot; srcset=&quot;/_astro/46.CLbvt-LX_ZXbm8X.webp 640w, /_astro/46.CLbvt-LX_Z2d6q51.webp 750w, /_astro/46.CLbvt-LX_10yCsy.webp 828w, /_astro/46.CLbvt-LX_2qf9Gj.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ベーカリー（Bakery）&lt;a href=&quot;#ベーカリーbakery&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;パンを目の前で焼いてくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1005&quot; src=&quot;/_astro/47.CFrF-R13_Ze7TA8.webp&quot; srcset=&quot;/_astro/47.CFrF-R13_Z1DOlrc.webp 640w, /_astro/47.CFrF-R13_Z2l1Uew.webp 750w, /_astro/47.CFrF-R13_TYp5g.webp 828w, /_astro/47.CFrF-R13_Ze7TA8.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;映画館（Theater）&lt;a href=&quot;#映画館theater&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;映画「館」かどうか分かりませんが、「みんなが集まればそこが映画館」的な流れでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1001&quot; src=&quot;/_astro/48.C3Hjx7a8_1bxxrM.webp&quot; srcset=&quot;/_astro/48.C3Hjx7a8_ZrYqOp.webp 640w, /_astro/48.C3Hjx7a8_27tvpN.webp 750w, /_astro/48.C3Hjx7a8_28hdrm.webp 828w, /_astro/48.C3Hjx7a8_1bxxrM.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ロケット発射場（Rocket Launch Field）&lt;a href=&quot;#ロケット発射場rocket-launch-field&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;地下に壮大な施設があるんでしょうか。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1241&quot; src=&quot;/_astro/49.CWOgy-Zm_ZK886h.webp&quot; srcset=&quot;/_astro/49.CWOgy-Zm_Z1EAChr.webp 640w, /_astro/49.CWOgy-Zm_O2IYw.webp 750w, /_astro/49.CWOgy-Zm_KQYHR.webp 828w, /_astro/49.CWOgy-Zm_ZK886h.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;観覧車（Ferris Wheel）&lt;a href=&quot;#観覧車ferris-wheel&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここからアトラクションのエリアに入ります。リフトっぽい感じですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;1525&quot; src=&quot;/_astro/50.CiaIf2-2_1ddh7U.webp&quot; srcset=&quot;/_astro/50.CiaIf2-2_ZqEVtA.webp 640w, /_astro/50.CiaIf2-2_Z26tVQe.webp 750w, /_astro/50.CiaIf2-2_jfNvv.webp 828w, /_astro/50.CiaIf2-2_1ddh7U.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タコライド（Octopus Ride）&lt;a href=&quot;#タコライドoctopus-ride&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;真ん中にタコがいます。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;767&quot; src=&quot;/_astro/51.BbMwR0zS_1RgxyB.webp&quot; srcset=&quot;/_astro/51.BbMwR0zS_rYkxY.webp 640w, /_astro/51.BbMwR0zS_ZrPfkF.webp 750w, /_astro/51.BbMwR0zS_Z1HRVgB.webp 828w, /_astro/51.BbMwR0zS_1RgxyB.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;海のメリーゴーランド（Ocean Carousel）&lt;a href=&quot;#海のメリーゴーランドocean-carousel&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;南極のメリーゴーランドはタツノオトシゴです。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;811&quot; src=&quot;/_astro/52.CIWwMond_1fmt0D.webp&quot; srcset=&quot;/_astro/52.CIWwMond_Z1zMIvI.webp 640w, /_astro/52.CIWwMond_hsO26.webp 750w, /_astro/52.CIWwMond_ZJWE6Q.webp 828w, /_astro/52.CIWwMond_1fmt0D.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;丸太ライド（Log Flume）&lt;a href=&quot;#丸太ライドlog-flume&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ジェットコースターです。スプラッシュマウンテンです。
&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1051&quot; src=&quot;/_astro/53.wJ1wqdfb_nlf86.webp&quot; srcset=&quot;/_astro/53.wJ1wqdfb_ZsuF90.webp 640w, /_astro/53.wJ1wqdfb_ZrTSu0.webp 750w, /_astro/53.wJ1wqdfb_ZrnlpA.webp 828w, /_astro/53.wJ1wqdfb_nlf86.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;リトルベニス（Little Venezia）&lt;a href=&quot;#リトルベニスlittle-venezia&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;クルージングです。
&lt;img loading=&quot;lazy&quot; width=&quot;1079&quot; height=&quot;1077&quot; src=&quot;/_astro/54.B8kqEAPf_Z1eN6EM.webp&quot; srcset=&quot;/_astro/54.B8kqEAPf_Z22HeD8.webp 640w, /_astro/54.B8kqEAPf_Z22fwWH.webp 750w, /_astro/54.B8kqEAPf_Z23aSCB.webp 828w, /_astro/54.B8kqEAPf_Z1eN6EM.webp 1079w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;オリンポスの塔（Olympos Tower）&lt;a href=&quot;#オリンポスの塔olympos-tower&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;タワーフォールです。タワー・オブ・テラーです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1465&quot; src=&quot;/_astro/55.B0EobHg__Z1RUIux.webp&quot; srcset=&quot;/_astro/55.B0EobHg__1h4vzY.webp 640w, /_astro/55.B0EobHg__1t5ap5.webp 750w, /_astro/55.B0EobHg__1m43NM.webp 828w, /_astro/55.B0EobHg__Z1RUIux.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ケーブルカー（Cable Car）&lt;a href=&quot;#ケーブルカーcable-car&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここから、本島に戻れます。まあ、泳いでも行けますが。
&lt;img loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;1187&quot; src=&quot;/_astro/56.DGi5aU7c_cyH6W.webp&quot; srcset=&quot;/_astro/56.DGi5aU7c_2oECXX.webp 640w, /_astro/56.DGi5aU7c_Zaa4Qx.webp 750w, /_astro/56.DGi5aU7c_Zd4Eb3.webp 828w, /_astro/56.DGi5aU7c_cyH6W.webp 1074w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バイキング（Viking）&lt;a href=&quot;#バイキングviking&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このペンギンたちレバーしていないんですよ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1097&quot; src=&quot;/_astro/57.CsWg8WWX_Z1mEzMl.webp&quot; srcset=&quot;/_astro/57.CsWg8WWX_2dIV71.webp 640w, /_astro/57.CsWg8WWX_2e3xNR.webp 750w, /_astro/57.CsWg8WWX_Zk9YIm.webp 828w, /_astro/57.CsWg8WWX_Z1mEzMl.webp 1078w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バンパーカー（Bumper Cars）&lt;a href=&quot;#バンパーカーbumper-cars&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;車でバトります。
&lt;img loading=&quot;lazy&quot; width=&quot;1076&quot; height=&quot;951&quot; src=&quot;/_astro/58.BZW9Vjdh_Z2hI3se.webp&quot; srcset=&quot;/_astro/58.BZW9Vjdh_1kJ9TI.webp 640w, /_astro/58.BZW9Vjdh_1yOudI.webp 750w, /_astro/58.BZW9Vjdh_Z20L5NY.webp 828w, /_astro/58.BZW9Vjdh_Z2hI3se.webp 1076w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生息地にいるペンギンの紹介&lt;a href=&quot;#生息地にいるペンギンの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;釣り屋（Fisherman）&lt;a href=&quot;#釣り屋fisherman&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/01.Dhkty7x7_1U2I27.webp&quot; srcset=&quot;/_astro/01.Dhkty7x7_1U2I27.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ファーマー（Farmer）&lt;a href=&quot;#ファーマーfarmer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/02.BK3b31yt_ZEnBou.webp&quot; srcset=&quot;/_astro/02.BK3b31yt_ZEnBou.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;採掘師（Miner）&lt;a href=&quot;#採掘師miner&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/03.BSqMiu4x_Z1QM7qN.webp&quot; srcset=&quot;/_astro/03.BSqMiu4x_Z1QM7qN.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;掃除屋（Janitar）&lt;a href=&quot;#掃除屋janitar&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/04.BNTJspFU_2skKQx.webp&quot; srcset=&quot;/_astro/04.BNTJspFU_2skKQx.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;南極隊員（Antarctic Explorer）&lt;a href=&quot;#南極隊員antarctic-explorer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/05._X4laLtB_Z1TizuV.webp&quot; srcset=&quot;/_astro/05._X4laLtB_Z1TizuV.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;管理員（Ranger）&lt;a href=&quot;#管理員ranger&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/06._XPeH9Aa_1hDpAC.webp&quot; srcset=&quot;/_astro/06._XPeH9Aa_1hDpAC.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;風船販売員（Balloon Seller）&lt;a href=&quot;#風船販売員balloon-seller&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/07.S9G106Oy_173Tjz.webp&quot; srcset=&quot;/_astro/07.S9G106Oy_173Tjz.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;氷採掘師（Ice Miner）&lt;a href=&quot;#氷採掘師ice-miner&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/08.xpCp4q33_Z1cHIQj.webp&quot; srcset=&quot;/_astro/08.xpCp4q33_Z1cHIQj.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;彫刻師（Sculptor）&lt;a href=&quot;#彫刻師sculptor&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/09.CJ2Hd6F6_nJBLx.webp&quot; srcset=&quot;/_astro/09.CJ2Hd6F6_nJBLx.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;イルカ飼育係（Dolphin Trainer）&lt;a href=&quot;#イルカ飼育係dolphin-trainer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/10.0jW4EAu1_Z1yzePW.webp&quot; srcset=&quot;/_astro/10.0jW4EAu1_Z1yzePW.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;探検家（Explorer）&lt;a href=&quot;#探検家explorer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/11.xnG2X12W_27uPhP.webp&quot; srcset=&quot;/_astro/11.xnG2X12W_27uPhP.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;灯台守（Lighthouse Keeper）&lt;a href=&quot;#灯台守lighthouse-keeper&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/12.CebQ_yjd_Z1iqiHD.webp&quot; srcset=&quot;/_astro/12.CebQ_yjd_Z1iqiHD.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;牧場管理員（Ranch Owner）&lt;a href=&quot;#牧場管理員ranch-owner&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/13.D94fBOyg_ZmgMV2.webp&quot; srcset=&quot;/_astro/13.D94fBOyg_ZmgMV2.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;飛行士（Balloon Pilot）&lt;a href=&quot;#飛行士balloon-pilot&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/14.2YEImnlx_Z148xC8.webp&quot; srcset=&quot;/_astro/14.2YEImnlx_Z148xC8.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;スタントマン（Stuntman）&lt;a href=&quot;#スタントマンstuntman&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/15.D2PvAO1n_Z1AV9ud.webp&quot; srcset=&quot;/_astro/15.D2PvAO1n_Z1AV9ud.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ディレクター（Director Penguin）&lt;a href=&quot;#ディレクターdirector-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/16.BzFejX_O_X2tu3.webp&quot; srcset=&quot;/_astro/16.BzFejX_O_X2tu3.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;シャチ（Orca Penguin）&lt;a href=&quot;#シャチorca-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/17.ByJtYlU2_1HB2Yv.webp&quot; srcset=&quot;/_astro/17.ByJtYlU2_1HB2Yv.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;パティシエ（Patissier）&lt;a href=&quot;#パティシエpatissier&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/18.pyr0MfPT_rlHxs.webp&quot; srcset=&quot;/_astro/18.pyr0MfPT_rlHxs.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;映写技師（Projectionist）&lt;a href=&quot;#映写技師projectionist&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/19._LspSJ9U_Z1s1lol.webp&quot; srcset=&quot;/_astro/19._LspSJ9U_Z1s1lol.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;科学者（Scientist）&lt;a href=&quot;#科学者scientist&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/20.BraT_yve_LAPEr.webp&quot; srcset=&quot;/_astro/20.BraT_yve_LAPEr.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;オペレーター（Wheel Operator）&lt;a href=&quot;#オペレーターwheel-operator&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/21._lQN2H_s_TUdqy.webp&quot; srcset=&quot;/_astro/21._lQN2H_s_TUdqy.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タコペンギン（Octopus Penguin）&lt;a href=&quot;#タコペンギンoctopus-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/22.g3Za0PVj_1c68gH.webp&quot; srcset=&quot;/_astro/22.g3Za0PVj_1c68gH.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タツノオトシゴペンギン（Seahorse Penguin）&lt;a href=&quot;#タツノオトシゴペンギンseahorse-penguin&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/23.IGQbzjlE_27Omxs.webp&quot; srcset=&quot;/_astro/23.IGQbzjlE_27Omxs.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ジャングルガイド（Jungle Guide）&lt;a href=&quot;#ジャングルガイドjungle-guide&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/24.yVrQIhfz_Z1qyo8f.webp&quot; srcset=&quot;/_astro/24.yVrQIhfz_Z1qyo8f.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ボート屋（Boatman）&lt;a href=&quot;#ボート屋boatman&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/25.QnY5PwVs_1qb7bN.webp&quot; srcset=&quot;/_astro/25.QnY5PwVs_1qb7bN.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;アポロ（Apollo）&lt;a href=&quot;#アポロapollo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/26.Bgvms_D6_qrl9C.webp&quot; srcset=&quot;/_astro/26.Bgvms_D6_qrl9C.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;エンジニア（Engineer）&lt;a href=&quot;#エンジニアengineer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/27.CO4v90gW_1oAFHW.webp&quot; srcset=&quot;/_astro/27.CO4v90gW_1oAFHW.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;バイキングの族長（Viking Chieftain）&lt;a href=&quot;#バイキングの族長viking-chieftain&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/28.DgnW-PYh_28WyY9.webp&quot; srcset=&quot;/_astro/28.DgnW-PYh_28WyY9.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;タイムキーパー（Timekeeper）&lt;a href=&quot;#タイムキーパーtimekeeper&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;637&quot; src=&quot;/_astro/29.B5bW5aet_d4e9X.webp&quot; srcset=&quot;/_astro/29.B5bW5aet_d4e9X.webp 504w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はあ～、やっぱりかわいいなぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;照れるなぁ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;えっ？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【AppSheet開発事例】買い物用のメモアプリを作ったよ</title><link>https://endorphinbath.com/posts/appsheet-case-shopping/</link><guid isPermaLink="true">https://endorphinbath.com/posts/appsheet-case-shopping/</guid><description>AppSheetを使って買い物のときに活用できるメモアプリを作りました。買いたい物を備忘で書いたり、現在買い物カゴに入っている品物がレジ袋などで持ち帰られる量なのかどうかを可視化します。</description><pubDate>Thu, 02 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_022.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いってきまーす。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーい、どこ行くんだ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっくら、スーパーに行ってくるのさ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうかあ、じゃあ、ラップも買ってきてくれ。サランラップとかクレラップ的な。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_022.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はーい。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;・・・・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ただいマンガリッツァポーク～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おかえリンガーハット～。ラップ買ってきたあ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;買ってきたよ～。ほれっ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お～、ありがと～。・・・あれ？　なんかラップにしては太いな。どこから出すんだ？・・・って、これパイナップルじゃないか！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ありゃ？ パイナップル買ってきてって言ってなかったっけ？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ラップだよ！ ラップ！ 確かにラップって言った！ んも～、前もって買うものをリストにまとめないからだよ～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_010.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～ん、いちいち紙とかに書き出すのもめんどいから、毎回とりあえず思いついたものを買ってるね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、じゃあ、この前作った買い物リストなるアプリを作ったから、今回はそれを紹介するぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;んま～、とりあえず、パイナップル切るか～。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際に作ってみます。&lt;a href=&quot;#実際に作ってみます&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;使用するテーブルを選んで、一旦UXを設定します。&lt;a href=&quot;#使用するテーブルを選んで一旦uxを設定します&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、AppSheetのホーム画面から、「Start with your own data」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2552&quot; height=&quot;1318&quot; src=&quot;/_astro/01.BxpggicG_Ztzi2T.webp&quot; srcset=&quot;/_astro/01.BxpggicG_Z2utDSz.webp 640w, /_astro/01.BxpggicG_W70XI.webp 750w, /_astro/01.BxpggicG_148xTf.webp 828w, /_astro/01.BxpggicG_1pSeFy.webp 1080w, /_astro/01.BxpggicG_Z1Ewt40.webp 1280w, /_astro/01.BxpggicG_Z1ccLtt.webp 1668w, /_astro/01.BxpggicG_Z1RyOeO.webp 2048w, /_astro/01.BxpggicG_Ztzi2T.webp 2552w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな感じで入力して、Choose your dataをクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;2121&quot; height=&quot;732&quot; src=&quot;/_astro/02.CK7okywk_Z1Ivvs4.webp&quot; srcset=&quot;/_astro/02.CK7okywk_2mik88.webp 640w, /_astro/02.CK7okywk_1oaqpP.webp 750w, /_astro/02.CK7okywk_1wmVb0.webp 828w, /_astro/02.CK7okywk_1ViHLN.webp 1080w, /_astro/02.CK7okywk_xXlhW.webp 1280w, /_astro/02.CK7okywk_Z1wvvV0.webp 1668w, /_astro/02.CK7okywk_2t0UoW.webp 2048w, /_astro/02.CK7okywk_Z1Ivvs4.webp 2121w&quot; /&gt;&lt;/p&gt;&lt;p&gt;データを格納するシートを選んで、こんな画面になるので待ちます。
&lt;img loading=&quot;lazy&quot; width=&quot;2251&quot; height=&quot;853&quot; src=&quot;/_astro/03.2zJYZhfY_Z23qdoa.webp&quot; srcset=&quot;/_astro/03.2zJYZhfY_1cocig.webp 640w, /_astro/03.2zJYZhfY_1HgGP1.webp 750w, /_astro/03.2zJYZhfY_Z2r5dPE.webp 828w, /_astro/03.2zJYZhfY_KeKFB.webp 1080w, /_astro/03.2zJYZhfY_Z2tUfYY.webp 1280w, /_astro/03.2zJYZhfY_ZfXM9x.webp 1668w, /_astro/03.2zJYZhfY_1RjK3W.webp 2048w, /_astro/03.2zJYZhfY_Z23qdoa.webp 2251w&quot; /&gt;&lt;/p&gt;&lt;p&gt;設定画面に遷移します。そして、そこからUXを設定しました。
&lt;img loading=&quot;lazy&quot; width=&quot;2511&quot; height=&quot;996&quot; src=&quot;/_astro/04.DfKPSov6_1V0LDs.webp&quot; srcset=&quot;/_astro/04.DfKPSov6_2fB76l.webp 640w, /_astro/04.DfKPSov6_1BqBrR.webp 750w, /_astro/04.DfKPSov6_1Xfk01.webp 828w, /_astro/04.DfKPSov6_iA08K.webp 1080w, /_astro/04.DfKPSov6_Z16QEXh.webp 1280w, /_astro/04.DfKPSov6_ZJJQjz.webp 1668w, /_astro/04.DfKPSov6_DD1Op.webp 2048w, /_astro/04.DfKPSov6_1V0LDs.webp 2511w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、「買い物リスト」を作りました。既にカートに入っている「In the cart」の品物と、まだ入っていない「yet」の品物でグループ分けしています。
&lt;img loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;900&quot; src=&quot;/_astro/05.BppG8QGA_1OLaK0.webp&quot; srcset=&quot;/_astro/05.BppG8QGA_2al3X4.webp 640w, /_astro/05.BppG8QGA_1OLaK0.webp 663w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Data」の「View Columns」で、Yes/Noに対応する値を、任意で設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2476&quot; height=&quot;1045&quot; src=&quot;/_astro/06.BzIzz43p_1FFSzr.webp&quot; srcset=&quot;/_astro/06.BzIzz43p_18pPyG.webp 640w, /_astro/06.BzIzz43p_1mM6Mm.webp 750w, /_astro/06.BzIzz43p_ZjaD9d.webp 828w, /_astro/06.BzIzz43p_Z15SAYA.webp 1080w, /_astro/06.BzIzz43p_p2S3O.webp 1280w, /_astro/06.BzIzz43p_ZaoNEn.webp 1668w, /_astro/06.BzIzz43p_82Iei.webp 2048w, /_astro/06.BzIzz43p_1FFSzr.webp 2476w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ビュー上の「Enable QuickEdit」をONにします。これをすることで、カートに品物を入れたら、「カゴ」の列にチェックを入れるのが楽になります。（まだ、ベータ版っぽいですが使えるかもです。これから使い勝手が良くなるんですかね！？）
&lt;img loading=&quot;lazy&quot; width=&quot;2001&quot; height=&quot;1032&quot; src=&quot;/_astro/11.cv19TwBs_27Y7dL.webp&quot; srcset=&quot;/_astro/11.cv19TwBs_Z12GD0P.webp 640w, /_astro/11.cv19TwBs_Z8g52i.webp 750w, /_astro/11.cv19TwBs_2vUyLY.webp 828w, /_astro/11.cv19TwBs_LunC1.webp 1080w, /_astro/11.cv19TwBs_Z2iUk7x.webp 1280w, /_astro/11.cv19TwBs_Z1PACx1.webp 1668w, /_astro/11.cv19TwBs_27Y7dL.webp 2001w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「買い物袋」のUXはこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;898&quot; src=&quot;/_astro/07.wZXp4TsL_ZJSrvH.webp&quot; srcset=&quot;/_astro/07.wZXp4TsL_Z1ecvVM.webp 640w, /_astro/07.wZXp4TsL_ZJSrvH.webp 652w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カートの中にある物がレジ袋に入るのかを知りたい。&lt;a href=&quot;#カートの中にある物がレジ袋に入るのかを知りたい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上記で挙げた「買い物袋」のビューは、カートの中にある物がレジ袋に入るのかを知りたいために作りました。あとどれぐらい買い物袋にサイズが大きい品物が入るのかだったり、どれぐらい買い物袋のサイズを超過しているのかを可視化しました。&lt;/p&gt;&lt;p&gt;このUXを表現するのは少し苦労しました。&lt;/p&gt;&lt;p&gt;可視化した方法としては、まず「カゴ確認」のカラムを追加しました。&lt;/p&gt;&lt;p&gt;なぜ追加したのかというと、カゴにあるかどうかは、別の「カゴ」のカラムで入力させているのですが、そのカラムは上記の見出しのようにYes/Noの２通りで入力するので、AppSheet上だと棒グラフを２本しか表示できません。&lt;/p&gt;&lt;p&gt;表示したい棒グラフは４本なので、４通りデータがあるカラムを追加する必要があったのです。そのカラムが「カゴ確認」です。そして、「3円のレジ袋」と「5円のレジ袋」のレコードも追加して、AppSheetの表示方法に沿う形にしました。
&lt;img loading=&quot;lazy&quot; width=&quot;1387&quot; height=&quot;787&quot; src=&quot;/_astro/08.BomufrrW_ZLfMed.webp&quot; srcset=&quot;/_astro/08.BomufrrW_2qHxMg.webp 640w, /_astro/08.BomufrrW_ZL4Wuh.webp 750w, /_astro/08.BomufrrW_153X3E.webp 828w, /_astro/08.BomufrrW_2qsXYY.webp 1080w, /_astro/08.BomufrrW_TEo0p.webp 1280w, /_astro/08.BomufrrW_ZLfMed.webp 1387w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ビューの設定はこのようにしています。（買い物リスト）
&lt;img loading=&quot;lazy&quot; width=&quot;2509&quot; height=&quot;1114&quot; src=&quot;/_astro/09.BIrFD9Ok_Z1yu7s2.webp&quot; srcset=&quot;/_astro/09.BIrFD9Ok_ZHyuc8.webp 640w, /_astro/09.BIrFD9Ok_22mTcp.webp 750w, /_astro/09.BIrFD9Ok_Z2bS2Bu.webp 828w, /_astro/09.BIrFD9Ok_K2NRK.webp 1080w, /_astro/09.BIrFD9Ok_hMIQS.webp 1280w, /_astro/09.BIrFD9Ok_wHBwA.webp 1668w, /_astro/09.BIrFD9Ok_1wMsqG.webp 2048w, /_astro/09.BIrFD9Ok_Z1yu7s2.webp 2509w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ビューの設定はこのようにしています。（買い物袋）
&lt;img loading=&quot;lazy&quot; width=&quot;2508&quot; height=&quot;1086&quot; src=&quot;/_astro/10.D0dWLJ7i_Z1fXohx.webp&quot; srcset=&quot;/_astro/10.D0dWLJ7i_Z2ii0jW.webp 640w, /_astro/10.D0dWLJ7i_Z25nCPA.webp 750w, /_astro/10.D0dWLJ7i_1iHF3c.webp 828w, /_astro/10.D0dWLJ7i_Z1KnO91.webp 1080w, /_astro/10.D0dWLJ7i_ZjxQmo.webp 1280w, /_astro/10.D0dWLJ7i_MJSRx.webp 1668w, /_astro/10.D0dWLJ7i_Z1B9WjI.webp 2048w, /_astro/10.D0dWLJ7i_Z1fXohx.webp 2508w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;えーと・・・、あ！　ラップがマジで無くなっちまった！ ・・・買いに行くか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_022.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、私買ってくるね～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このアプリでメモってから行けよぉ！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Google Spreadsheet】今までカラオケで歌ってきた曲とその回数を記録するシートを作ったよ</title><link>https://endorphinbath.com/posts/gss-karaoke-record/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gss-karaoke-record/</guid><description>今までにカラオケで歌ったレパートリーをメモするシートを作ったので、そこに書いてある内容を紹介します。歌った日をメモったりもしているので、歌った曲数の推移なども可視化出来て楽しいです。</description><pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;だだい゙ま゙～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おかえり～ なんか声がしゃがれているな、まるで天龍だぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ガラ゙オ゙ゲでゔだい゙ま゙ぐっ゙だら゙、ごん゙な゙ごえに゙な゙っ゙でじま゙っ゙だよ゙・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっぽど、シャウトしたんだな・・・。 しかし、そろそろMicrosoft IMEで文字コード「3309」を打って、F5キーを打つのが疲れたから、もう普通に喋ってもらうな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;え゙？　な゙に゙を゙い゙っ゙で・・・あ、もどった。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それでは、今回はカラオケで歌った回数をメモしておくツールを紹介するから夜露死苦！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_015.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ヨ゙ロ゙ジグ！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらがシートになります。&lt;/p&gt;&lt;p&gt;1行目にカラオケに行った日を記入します。そして、その日に歌った曲の行に「1」を入力します。
（ちなみに僕は歌う予定があったら、行く日を前もって入力して歌う予定の曲に「0」と入力してメモっています。）&lt;/p&gt;&lt;p&gt;このシートで利用している関数は、&lt;code&gt;SUM&lt;/code&gt;だけです。
&lt;img loading=&quot;lazy&quot; width=&quot;2470&quot; height=&quot;1091&quot; src=&quot;/_astro/01.Dl72yVm2_Z1dniU2.webp&quot; srcset=&quot;/_astro/01.Dl72yVm2_15sLN8.webp 640w, /_astro/01.Dl72yVm2_1in9hu.webp 750w, /_astro/01.Dl72yVm2_29jlhw.webp 828w, /_astro/01.Dl72yVm2_Z11Q7ej.webp 1080w, /_astro/01.Dl72yVm2_kRjgw.webp 1280w, /_astro/01.Dl72yVm2_1jX0WS.webp 1668w, /_astro/01.Dl72yVm2_ZUaKqf.webp 2048w, /_astro/01.Dl72yVm2_Z1dniU2.webp 2470w&quot; /&gt;&lt;/p&gt;&lt;p&gt;その日に歌った回数は、一番下の行に記録されます。その回数と歌った日付でグラフを作れば今まで歌った回数の履歴が可視化出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;2459&quot; height=&quot;1074&quot; src=&quot;/_astro/02.qk46M7jq_KQag8.webp&quot; srcset=&quot;/_astro/02.qk46M7jq_1TNXEI.webp 640w, /_astro/02.qk46M7jq_ZnXR0m.webp 750w, /_astro/02.qk46M7jq_qCvdV.webp 828w, /_astro/02.qk46M7jq_ZMXhjT.webp 1080w, /_astro/02.qk46M7jq_1iUXcA.webp 1280w, /_astro/02.qk46M7jq_2m8caJ.webp 1668w, /_astro/02.qk46M7jq_1MbQub.webp 2048w, /_astro/02.qk46M7jq_KQag8.webp 2459w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このシートはSUM関数だけで作れるから、説明がもう終わってしまったよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お゙や゙ずみ゙～。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleドライブ内の指定したファイルをそれぞれ好みの名前に一気にリネームするスクリプトです</title><link>https://endorphinbath.com/posts/gas-rename-file-at-once/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-rename-file-at-once/</guid><description>GoogleDriveの指定のファイルを一括でリネームできるツールを作りました。既に沢山作ってしまったファイルの命名規則を変えたいときなどにご活用下さい。</description><pubDate>Tue, 30 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そういや、「藤岡弘、」って、改名する前は「藤岡弘」だったんだよね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだな。「、」は「『我未だ完成せず』との意味を込めて」付けたらしいぞ。そういえば、Googleスプレッドシートを使って、ファイルをリネームしてくれるスクリプトを作ったのを思い出したわ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スクリプト作りも何時まで経っても完成しないなぁ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のツールは、下記のシートの赤線で囲まれた部分になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2427&quot; height=&quot;1083&quot; src=&quot;/_astro/01.HeBQ_lL0_cWMo3.webp&quot; srcset=&quot;/_astro/01.HeBQ_lL0_1guajM.webp 640w, /_astro/01.HeBQ_lL0_Z13Kz5B.webp 750w, /_astro/01.HeBQ_lL0_2kkINb.webp 828w, /_astro/01.HeBQ_lL0_1fvFh0.webp 1080w, /_astro/01.HeBQ_lL0_35Let.webp 1280w, /_astro/01.HeBQ_lL0_Z1wWQBw.webp 1668w, /_astro/01.HeBQ_lL0_1dXXwu.webp 2048w, /_astro/01.HeBQ_lL0_cWMo3.webp 2427w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、F列とG列から、ファイル名をリネームしたいファイル名とIDを引っ張っていきましょう。そして、変えたいファイル名を入力します。&lt;/p&gt;&lt;p&gt;今回、引っ張ってきたファイルは、ツール実行前はこんな状態です。
&lt;img loading=&quot;lazy&quot; width=&quot;1805&quot; height=&quot;689&quot; src=&quot;/_astro/02.dfItfu88_Qzhw3.webp&quot; srcset=&quot;/_astro/02.dfItfu88_ZwPsVe.webp 640w, /_astro/02.dfItfu88_ZAYsYA.webp 750w, /_astro/02.dfItfu88_jPJ8F.webp 828w, /_astro/02.dfItfu88_8lnFz.webp 1080w, /_astro/02.dfItfu88_1YHjzE.webp 1280w, /_astro/02.dfItfu88_1FtFwl.webp 1668w, /_astro/02.dfItfu88_Qzhw3.webp 1805w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1981&quot; height=&quot;1169&quot; src=&quot;/_astro/03.Nf_DPDXW_IWDjA.webp&quot; srcset=&quot;/_astro/03.Nf_DPDXW_T3PXG.webp 640w, /_astro/03.Nf_DPDXW_Z1u2fKl.webp 750w, /_astro/03.Nf_DPDXW_ZFdmnu.webp 828w, /_astro/03.Nf_DPDXW_2fLLvV.webp 1080w, /_astro/03.Nf_DPDXW_Z22ysaM.webp 1280w, /_astro/03.Nf_DPDXW_p22yt.webp 1668w, /_astro/03.Nf_DPDXW_IWDjA.webp 1981w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、シート上の「renameFiles()」ボタンを押すとスクリプトが走り、終了すると対象のファイルがリネームされます。&lt;/p&gt;&lt;p&gt;今回リネーム処理を行ったファイルを見ると、ファイル名が変わっているのが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2020&quot; height=&quot;1184&quot; src=&quot;/_astro/04.D3ulycUY_ZYOpgg.webp&quot; srcset=&quot;/_astro/04.D3ulycUY_ZttJMl.webp 640w, /_astro/04.D3ulycUY_2cBhhy.webp 750w, /_astro/04.D3ulycUY_to8Je.webp 828w, /_astro/04.D3ulycUY_Z2wJy6b.webp 1080w, /_astro/04.D3ulycUY_OfFyo.webp 1280w, /_astro/04.D3ulycUY_Z14a8tC.webp 1668w, /_astro/04.D3ulycUY_ZYOpgg.webp 2020w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ボタンに割り当てられている関数は、「renameFiles」となっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1410&quot; height=&quot;684&quot; src=&quot;/_astro/05.BIc3xWzU_Z1fcytc.webp&quot; srcset=&quot;/_astro/05.BIc3xWzU_Z5C4v5.webp 640w, /_astro/05.BIc3xWzU_1ecWav.webp 750w, /_astro/05.BIc3xWzU_KV3Af.webp 828w, /_astro/05.BIc3xWzU_Z1q2UWW.webp 1080w, /_astro/05.BIc3xWzU_ZmiVtr.webp 1280w, /_astro/05.BIc3xWzU_Z1fcytc.webp 1410w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が今回使用したスクリプトになります。&lt;/p&gt;&lt;p&gt;拡張機能から「Apps Script」を開いて、以下のスクリプトを打ち込んで先程のシートの設定をすると、使用できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;i&lt;/code&gt;で開始行を、&lt;code&gt;column_for_fileList&lt;/code&gt;で開始列を指定して、その行以降に入力されているファイルIDを持つファイル名を変更していきます。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;renameFiles&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;【出力結果】フォルダのURL&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;//フォルダを処理する行位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// L列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、今回はこんなところだ。　ｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞーｯ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;味噌汁を飲む音がすごいな&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、丼ぶりで飲んでるからな。　ｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞーｯ、ｶﾞﾗｶﾞﾗｶﾞﾗｶﾞﾗｶﾞﾗ、ｺﾞｯｸﾝ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今、味噌汁でうがいしたよね？ 絶対うがいしたよね！？ 外で絶対すんなよ！？ くっそー、今回はなんでこんなに私がツッコミ役なんだ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞーｯ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_018.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はペンギンもいるのか。音すげえな。すげえ飲んでるじゃねえか！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_002.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、樽で飲んでるからな。　ｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞｽﾞーｯ、ｻﾞﾌﾟﾝｯ！　ﾊﾞｼｬﾊﾞｼｬﾊﾞｼｬﾊﾞｼｬﾊﾞｼｬﾊﾞｼｬｯ、ﾌﾟﾊｯ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;味噌汁の中で泳いだってわけだね。バタ足をしたね。息継ぎをしたね。もう、どうにでもなってくれ。味噌汁っていいよね。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleドライブ内の指定したフォルダに所定のファイルをコピーするスクリプトです</title><link>https://endorphinbath.com/posts/gas-copy-file-into-folder/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-copy-file-into-folder/</guid><description>GoogleDriveの指定のフォルダにファイルをコピーするツールを作りました。何かWebの記事をGoogleドキュメントにクリップしたり、指定のフォルダにメモ書きやシートを作成したい場合に役立つかと思います。</description><pubDate>Mon, 29 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おい！ あの庭どうなってるんだ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、大根を干している間につい食べてしまうから、あらかじめ大量に敷いておけば食べても大丈夫だと思ったわけよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;敷き過ぎだ！ 福岡県のどっかにある太陽光発電パネル並に敷き詰められているじゃないか！ メガ沢庵じゃないか！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_014.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうやらコピーし過ぎてしまったようだな　ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のツールは、下記のシートの赤線で囲まれた部分になります。&lt;/p&gt;&lt;p&gt;J4セルから、以下の情報が入力されています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;J4セル・・・出力先フォルダのID&lt;/li&gt;
&lt;li&gt;J5セル・・・出力先フォルダのURL&lt;/li&gt;
&lt;li&gt;J6セル・・・コピー先のファイル名（今回は「【Quora】」）&lt;/li&gt;
&lt;li&gt;J7セル・・・コピーで作成するファイル数&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2474&quot; height=&quot;1082&quot; src=&quot;/_astro/01.DRQXWwdz_ZKfblW.webp&quot; srcset=&quot;/_astro/01.DRQXWwdz_19zHqt.webp 640w, /_astro/01.DRQXWwdz_Z19d8eB.webp 750w, /_astro/01.DRQXWwdz_ZjAK0j.webp 828w, /_astro/01.DRQXWwdz_17Lbw9.webp 1080w, /_astro/01.DRQXWwdz_2uuC1Y.webp 1280w, /_astro/01.DRQXWwdz_ZMjsM9.webp 1668w, /_astro/01.DRQXWwdz_Z1qmkJu.webp 2048w, /_astro/01.DRQXWwdz_ZKfblW.webp 2474w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「copyFileToTargetFolder()」ボタンを押すとスクリプトが走り、終了するとJ4セルのIDのフォルダ内に、J6セルのファイル名のファイルが作成されます。&lt;/p&gt;&lt;p&gt;実際に確認します。J5セルをクリックして、フォルダのURLに飛びます。すると、ファイルが作成されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1983&quot; height=&quot;1030&quot; src=&quot;/_astro/02.zJO8dUse_2wQKhG.webp&quot; srcset=&quot;/_astro/02.zJO8dUse_Z1BfUFM.webp 640w, /_astro/02.zJO8dUse_ZIhgry.webp 750w, /_astro/02.zJO8dUse_1UTnmI.webp 828w, /_astro/02.zJO8dUse_ewOvg.webp 1080w, /_astro/02.zJO8dUse_Z2aNAtq.webp 1280w, /_astro/02.zJO8dUse_MxTmF.webp 1668w, /_astro/02.zJO8dUse_2wQKhG.webp 1983w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ボタンに割り当てられている関数は、「copyFileToTargetFolder」となっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1257&quot; height=&quot;628&quot; src=&quot;/_astro/03.XPuOqi29_Z1C1zK4.webp&quot; srcset=&quot;/_astro/03.XPuOqi29_Z2q3lGP.webp 640w, /_astro/03.XPuOqi29_Z1FeOBm.webp 750w, /_astro/03.XPuOqi29_2mDU2c.webp 828w, /_astro/03.XPuOqi29_Z6iFfw.webp 1080w, /_astro/03.XPuOqi29_Z1C1zK4.webp 1257w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が今回使用したスクリプトになります。
拡張機能から「Apps Script」を開いて、以下のスクリプトを打ち込んで先程のシートの設定をすると、使用できます。&lt;/p&gt;&lt;p&gt;出力元となるテンプレートファイルを&lt;code&gt;TemplateFile&lt;/code&gt;で定義します。&lt;/p&gt;&lt;p&gt;そして、&lt;code&gt;TemplateFile.makeCopy(&apos;出力するファイル&apos;,&apos; 出力先フォルダ&apos;)&lt;/code&gt;で、ファイルを作成します。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copyFileToTargetFolder&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 変数宣言&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputFolderId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputFileName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputFileAmount&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;【出力結果】フォルダのURL&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// J列のインデックス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputFolderId&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();         &lt;/span&gt;&lt;span&gt;// 出力先フォルダID（H4セルのフォルダID）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputFileName&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();         &lt;/span&gt;&lt;span&gt;// 出力ファイル名（H6セルのファイル名）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;OutputFileAmount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;()); &lt;/span&gt;&lt;span&gt;// 出力ファイル数（H7セルのファイル数）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// テンプレートファイル（「yyyyMMdd(E)」）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TemplateFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 出力先フォルダ（H4セルのフォルダ）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputFolder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;OutputFolderId&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ファイルをコピーする。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputFileAmount&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;TemplateFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;makeCopy&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;OutputFileName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;OutputFolder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ●実行ステータス入力：完了確認（H8セルへのステータス確認）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Utilities.sleep(1000);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;column_index&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Terminated!&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// ●実行ステータス入力：実行待ち（H8セルへのステータス入力）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Utilities.sleep(1000);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// sheet.getRange(8, column_index).setValue(&apos;Waiting...&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回はこんなもんだなぁ ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ﾎﾞﾘﾎﾞﾘﾎﾞﾘﾎﾞﾘﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleドライブのフォルダに有るファイルを一覧で取得するスクリプトです</title><link>https://endorphinbath.com/posts/gas-get-list-googledrive-in-folder/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-get-list-googledrive-in-folder/</guid><description>GoogleDriveの指定のフォルダにあるファイルを一覧で取得します。Googleドライブを整理したい時に役立つツールになるかと思います。</description><pubDate>Sun, 28 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Google DriveにあるファイルをGoogle Spreadsheet上に取得する方法を紹介だあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほおほお、まあGoogleドライブでフォルダを管理するなら、地味に欲しいよね。白米を食ってるときに欲しくなる沢庵くらいのポジションだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず作るぞ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のツールは、下記のシートの赤線で囲まれた部分になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2474&quot; height=&quot;1082&quot; src=&quot;/_astro/01.D2iLy1lh_Z2dTaif.webp&quot; srcset=&quot;/_astro/01.D2iLy1lh_1qH4FC.webp 640w, /_astro/01.D2iLy1lh_ZR5KYs.webp 750w, /_astro/01.D2iLy1lh_Z2tnKa.webp 828w, /_astro/01.D2iLy1lh_ZkRMp9.webp 1080w, /_astro/01.D2iLy1lh_11PD5G.webp 1280w, /_astro/01.D2iLy1lh_Z2fXrIr.webp 1668w, /_astro/01.D2iLy1lh_2baO89.webp 2048w, /_astro/01.D2iLy1lh_Z2dTaif.webp 2474w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、「getFileListInFolder()」ボタンを押すとスクリプトが走り、終了するとF3～H3セル以降の行に値が入ります。今回は、僕が今までクリップしたQuoraの記事がたくさん貼り付けられました。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;F列・・・ファイルの名前&lt;/li&gt;
&lt;li&gt;G列・・・ファイルのID&lt;/li&gt;
&lt;li&gt;H列・・・ファイルのURL
&lt;img loading=&quot;lazy&quot; width=&quot;1493&quot; height=&quot;767&quot; src=&quot;/_astro/02.BDnxq_xb_Z2mPCM.webp&quot; srcset=&quot;/_astro/02.BDnxq_xb_Z1VmVj.webp 640w, /_astro/02.BDnxq_xb_Z1JgAeu.webp 750w, /_astro/02.BDnxq_xb_1IADNW.webp 828w, /_astro/02.BDnxq_xb_nyukr.webp 1080w, /_astro/02.BDnxq_xb_1qTeSe.webp 1280w, /_astro/02.BDnxq_xb_Z2mPCM.webp 1493w&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;シートの構成として、まずファイルの一覧を読み取る対象のフォルダは、左上のセルにあるIDのフォルダとしています。以下の画像の場合、僕が今までにクリップしたQuoraのフォルダが選択されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2474&quot; height=&quot;1082&quot; src=&quot;/_astro/03.D-UIWzJ0_ZiWUhB.webp&quot; srcset=&quot;/_astro/03.D-UIWzJ0_Frdzy.webp 640w, /_astro/03.D-UIWzJ0_Z1ClC5w.webp 750w, /_astro/03.D-UIWzJ0_ZMJeQe.webp 828w, /_astro/03.D-UIWzJ0_1z3rAu.webp 1080w, /_astro/03.D-UIWzJ0_Z28pfHB.webp 1280w, /_astro/03.D-UIWzJ0_Zl2cHN.webp 1668w, /_astro/03.D-UIWzJ0_ZY54F9.webp 2048w, /_astro/03.D-UIWzJ0_ZiWUhB.webp 2474w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、ボタンに割り当てられている関数は、「getFileListInFolder」となっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1063&quot; height=&quot;613&quot; src=&quot;/_astro/04.ClEGiZNT_2lzNzB.webp&quot; srcset=&quot;/_astro/04.ClEGiZNT_ZbqmCA.webp 640w, /_astro/04.ClEGiZNT_ZLattQ.webp 750w, /_astro/04.ClEGiZNT_Z276rWj.webp 828w, /_astro/04.ClEGiZNT_2lzNzB.webp 1063w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が今回使用したスクリプトになります。&lt;/p&gt;&lt;p&gt;拡張機能から「Apps Script」を開いて、以下のスクリプトを打ち込んで先程のシートの設定をすると、使用できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;i&lt;/code&gt;で開始行を、&lt;code&gt;column_for_fileList&lt;/code&gt;で開始列を指定して、そこを基準に欲しいデータをシートに入力するようにしています。&lt;/p&gt;&lt;p&gt;今回は、&lt;code&gt;DriveApp.getRootFolder()&lt;/code&gt;ではなく、&lt;code&gt;DriveApp.getFolderById(folder_id)&lt;/code&gt;を使用しているのが、ルートフォルダを取得するときとの違いです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFileListInFolder&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;【出力結果】フォルダのURL&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;//フォルダを処理する行位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// F列のインデックス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder_id&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFiles&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// var folders = DriveApp.searchFolders(&quot;&apos;&quot;+key+&quot;&apos; in parents&quot;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回はこんなもんだなぁ ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ﾎﾞﾘﾎﾞﾘﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleドライブのルートフォルダに有るフォルダを一覧で取得するスクリプトです</title><link>https://endorphinbath.com/posts/gas-get-list-googledrive-in-root/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-get-list-googledrive-in-root/</guid><description>GoogleDriveのルートフォルダにあるフォルダを一覧で取得します。Googleドライブを整理したい時に役立つツールになるかと思います。</description><pubDate>Sat, 27 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よっしゃあ、今回はGoogle DriveにあるフォルダをGoogle Spreadsheet上に取得する方法を紹介だあ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほおほお、まあGoogleドライブでフォルダを管理するなら、地味に欲しいよね。白米を食ってるときに欲しくなる沢庵くらいのポジションだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず作るぞ！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のツールは、下記のシートの赤線で囲まれた部分になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2474&quot; height=&quot;1082&quot; src=&quot;/_astro/01.Bgw1J5MB_1lugbC.webp&quot; srcset=&quot;/_astro/01.Bgw1J5MB_1HKdGe.webp 640w, /_astro/01.Bgw1J5MB_ZA2BXQ.webp 750w, /_astro/01.Bgw1J5MB_eyKfr.webp 828w, /_astro/01.Bgw1J5MB_Z1PFuJd.webp 1080w, /_astro/01.Bgw1J5MB_ZsW4en.webp 1280w, /_astro/01.Bgw1J5MB_1jpXKq.webp 1668w, /_astro/01.Bgw1J5MB_Fn6N5.webp 2048w, /_astro/01.Bgw1J5MB_1lugbC.webp 2474w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「getFolderListInFolder」ボタンを押すとスクリプトが走り、終了するとA3～C3セル以降の行に値が入ります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;A列・・・ファイル名&lt;/li&gt;
&lt;li&gt;B列・・・ファイルのID&lt;/li&gt;
&lt;li&gt;C列・・・ファイルのURL&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ちなみに、D列にあるHYPERLINK関数を別のセルに貼り付けると、セルにハイパーリンクが付いたフォルダ名が入力されます。
&lt;img loading=&quot;lazy&quot; width=&quot;1726&quot; height=&quot;1051&quot; src=&quot;/_astro/02.C8n4Uztj_2t0lqV.webp&quot; srcset=&quot;/_astro/02.C8n4Uztj_2bh1B6.webp 640w, /_astro/02.C8n4Uztj_2lwKxY.webp 750w, /_astro/02.C8n4Uztj_Z6jR6H.webp 828w, /_astro/02.C8n4Uztj_Z1vGq9l.webp 1080w, /_astro/02.C8n4Uztj_1H5JWE.webp 1280w, /_astro/02.C8n4Uztj_Z23BKp4.webp 1668w, /_astro/02.C8n4Uztj_2t0lqV.webp 1726w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ソートすれば、スクリプトを走らせる前のような順序になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1530&quot; height=&quot;1148&quot; src=&quot;/_astro/03.C9wCzLRq_29K0T5.webp&quot; srcset=&quot;/_astro/03.C9wCzLRq_1vaDpK.webp 640w, /_astro/03.C9wCzLRq_1BA130.webp 750w, /_astro/03.C9wCzLRq_ZRnUeR.webp 828w, /_astro/03.C9wCzLRq_ZuXh42.webp 1080w, /_astro/03.C9wCzLRq_Zn6qBe.webp 1280w, /_astro/03.C9wCzLRq_29K0T5.webp 1530w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;図形描画で作成した四角形を右クリックすると右上に三点リーダー（︙）が表示されるので、そこをクリックして「スクリプトを割り当て」をクリックすると・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;504&quot; src=&quot;/_astro/04.CkDxRTl7_Z1hA4G8.webp&quot; srcset=&quot;/_astro/04.CkDxRTl7_Z1hA4G8.webp 621w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スクリプトを割り当てられるので、「getFolderListInFolder」を入力してOKします。
&lt;img loading=&quot;lazy&quot; width=&quot;1555&quot; height=&quot;708&quot; src=&quot;/_astro/05.Cptagoxh_7fcl3.webp&quot; srcset=&quot;/_astro/05.Cptagoxh_cLVe9.webp 640w, /_astro/05.Cptagoxh_1ge2BH.webp 750w, /_astro/05.Cptagoxh_1jpaQL.webp 828w, /_astro/05.Cptagoxh_Z2cts0W.webp 1080w, /_astro/05.Cptagoxh_1q8H3L.webp 1280w, /_astro/05.Cptagoxh_7fcl3.webp 1555w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が今回使用したスクリプトになります。&lt;/p&gt;&lt;p&gt;拡張機能から「Apps Script」を開いて、以下のスクリプトを打ち込んで先程のシートの設定をすると、使用できます。&lt;/p&gt;&lt;p&gt;&lt;code&gt;i&lt;/code&gt;で開始行を、&lt;code&gt;column_for_fileList&lt;/code&gt;で開始列を指定して、そこを基準に欲しいデータをシートに入力するようにしています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getFolderListInFolder&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRootFolder&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;【出力結果】フォルダのURL&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRootFolder&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;//フォルダを処理する行位置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// A列のインデックス&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActive&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheetName&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;searchFolders&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&quot;&apos; in parents&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;hasNext&lt;/span&gt;&lt;span&gt;()) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folders&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;next&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getName&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getId&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;column_for_fileList&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;setValue&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getUrl&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回はこんなもんだなぁ ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleドキュメントで日記を付けるために毎日Docファイルを作ってくれるスクリプトです</title><link>https://endorphinbath.com/posts/gas-copy-googledoc/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-copy-googledoc/</guid><description>GoogleDriveにあるファイルを毎日決まった時間にコピーしてくれるスクリプトを書きました。日記をつける場合に毎回ファイルをコピーしてレイアウトを変えて・・・といった作業を効率化してしまいましょう！</description><pubDate>Fri, 26 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほぉ～、毎日大根が良い感じに干涸らびていっていますな～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうなんだよね～、この干涸らび具合を日記とかにして残しておきたいよね～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;では、今回のツールで毎日の大根の成長をGoogleドキュメントに記してはどうかね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほぉ～、使ってみっか～。　ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの概要&lt;a href=&quot;#ツールの概要&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;毎日定期的にこのツールを作動させると、このフォルダのように「yyyyMMdd(曜日)」といった感じのファイル名のファイルを作成します。&lt;/p&gt;&lt;p&gt;「yyyyMMdd(E)」のファイルを元に作成しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2020&quot; height=&quot;1110&quot; src=&quot;/_astro/01.BgwLG-A7_ZL5aHD.webp&quot; srcset=&quot;/_astro/01.BgwLG-A7_19GekH.webp 640w, /_astro/01.BgwLG-A7_Z1cFNGR.webp 750w, /_astro/01.BgwLG-A7_29qgxj.webp 828w, /_astro/01.BgwLG-A7_152NdB.webp 1080w, /_astro/01.BgwLG-A7_1goJ1P.webp 1280w, /_astro/01.BgwLG-A7_Z1YeSBn.webp 1668w, /_astro/01.BgwLG-A7_ZL5aHD.webp 2020w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールのソース&lt;a href=&quot;#ツールのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下が実際に使用しているソースになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setTrigger&lt;/span&gt;&lt;span&gt;(){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// var funcName = &apos;setTrigger&apos;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// deleteTrigger(funcName);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// createTrigger(funcName);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;duplicateDocument&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;duplicateDocument&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// テンプレートファイル（「yyyyMMdd(E)」）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;templateFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFileById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 出力フォルダ（「010_Diary」）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputFolder&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DriveApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getFolderById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 出力ファイル名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OutputFileName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&apos;JST&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;yyyyMMdd(E)&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;templateFile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;makeCopy&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;OutputFileName&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;OutputFolder&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;苦労した点&lt;a href=&quot;#苦労した点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;というか、出来なかった点です・・・。&lt;/p&gt;&lt;p&gt;ファイルをコピーするためのトリガーを以下のコードで書いたのですが、上手く定期的に動かず・・・。一度は動くんですが、２回目以降はなぜか動かない・・・。結局わからなかった・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createTrigger&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setHours&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;16&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// 日本の時間より14時間早く設定する。6時に作る。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setMinutes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newTrigger&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;timeBased&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deleteTrigger&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getProjectTriggers&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trigger&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;trigger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getHandlerFunction&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;funcName&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ScriptApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteTrigger&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;trigger&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;コードで出来なかったので、渋々この画面から設定しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2568&quot; height=&quot;719&quot; src=&quot;/_astro/02.CySRxt5I_1dkOHp.webp&quot; srcset=&quot;/_astro/02.CySRxt5I_1h5OLt.webp 640w, /_astro/02.CySRxt5I_Z7sIf3.webp 750w, /_astro/02.CySRxt5I_ZjdBxH.webp 828w, /_astro/02.CySRxt5I_Z1Oguwj.webp 1080w, /_astro/02.CySRxt5I_Z2qP4gC.webp 1280w, /_astro/02.CySRxt5I_Z1TM8mS.webp 1668w, /_astro/02.CySRxt5I_Z2cSxeS.webp 2048w, /_astro/02.CySRxt5I_1cVm9t.webp 2560w, /_astro/02.CySRxt5I_1dkOHp.webp 2568w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くそ～、トリガーがコードで上手く設定できなかったのが悔しかったな～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあでもこれで大根を記録出来るぞ ﾎﾞﾘﾎﾞﾘ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【GAS、Google Spreadsheet】Googleカレンダーにスケジュールを登録するためのスクリプトです</title><link>https://endorphinbath.com/posts/gas-scheduling-googlecalendar/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gas-scheduling-googlecalendar/</guid><description>GoogleCalendarにスケジュールを登録する時にSpreadsheetから入力できるスクリプトを造りました。カレンダーからも連続した予定を入力できますが、それを何度も繰り返すのも大変なので、このツールで時短してみて下さい。</description><pubDate>Thu, 25 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし！ 1日ずつ予定を打ち込めるスクリプトを作るぜ、俺は！ うおおおおお！！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;決起したねぇ　ﾓｸﾞﾓｸﾞ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;月曜から金曜まで一気通貫の予定として入力するとスケジューリングしにくい・・・。日にちごとに予定をいじりたい・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/00.BDJmTPyf_Z23duuL.webp&quot; srcset=&quot;/_astro/00.BDJmTPyf_ZPq58E.webp 640w, /_astro/00.BDJmTPyf_AdRqb.webp 750w, /_astro/00.BDJmTPyf_28jAgx.webp 828w, /_astro/00.BDJmTPyf_Z23duuL.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ということで、今回作ったツールはこんな感じになっています。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;startDateに連続した予定期間の開始日を入力して、endDateに終了日を入れます。&lt;/li&gt;
&lt;li&gt;それと予定の「title」と「startTime（開始時刻）」と「endTime（終了時刻）」も入力します。&lt;/li&gt;
&lt;li&gt;「color」は、下の「専用コード（color）」の方から予定の色にしたい色を決めて、「色番号」の数字の中から入力します。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;「description」「location」「guests」「sendInvites」は任意項目です。
&lt;img loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;1020&quot; src=&quot;/_astro/01.BjLJ8FuX_Z12i2oW.webp&quot; srcset=&quot;/_astro/01.BjLJ8FuX_Z5XQ3I.webp 640w, /_astro/01.BjLJ8FuX_Z1U3uys.webp 750w, /_astro/01.BjLJ8FuX_ouzlB.webp 828w, /_astro/01.BjLJ8FuX_Z12i2oW.webp 973w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際にツールを実行すると、こうなる。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/02.CQHbFCVf_i4tVQ.webp&quot; srcset=&quot;/_astro/02.CQHbFCVf_3dPlV.webp 640w, /_astro/02.CQHbFCVf_1tRMUL.webp 750w, /_astro/02.CQHbFCVf_Z23dC2N.webp 828w, /_astro/02.CQHbFCVf_i4tVQ.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;シートの造り&lt;a href=&quot;#シートの造り&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;シートの作りとしては、基本的にシートの上の方から、値をスクリプト内の変数に設定していっています。スクリプトの流れがそんな感じになっています。「毎日入力（始まり）」から「毎日入力（終わり）」の間の値を利用しています。
&lt;img loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;1020&quot; src=&quot;/_astro/03.B_KzAj8D_ZAjVPW.webp&quot; srcset=&quot;/_astro/03.B_KzAj8D_kYeuh.webp 640w, /_astro/03.B_KzAj8D_Z1t5p0s.webp 750w, /_astro/03.B_KzAj8D_PsETB.webp 828w, /_astro/03.B_KzAj8D_ZAjVPW.webp 973w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このツールに使用しているGoogle Apps Scriptのソースになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// カレンダーに予定を追加する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createEvents&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// カレンダーのインスタンスを設定する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDefaultCalendar&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// スプレッドシートのインスタンスを設定する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpreadsheetApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getActiveSpreadsheet&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ss&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getSheetByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;カレンダー入力&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;C3&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 諸々の変数を設定する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// キーの列：数値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;             &lt;/span&gt;&lt;span&gt;// 走査の開始行：数値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;;                 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// キー：数値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []; &lt;/span&gt;&lt;span&gt;// 入力用：配列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 開始日：文字列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 終了日：文字列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 色番号：数値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a_day&lt;/span&gt;&lt;span&gt;;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// とある日にち：文字列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt;;         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 日数：数値&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;;           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 開始時間：文字列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// 終了時間：文字列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {};        &lt;/span&gt;&lt;span&gt;// 入力のオプション枠：辞書&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;;               &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// イベント：Event&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;day_of_EOM&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&apos;01&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;02&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;28&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;03&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&apos;04&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;05&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;06&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&apos;07&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;08&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;09&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;&apos;10&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;11&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;12&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;// 月末の日付：辞書&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// カレンダー入力データの起点を決定。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;毎日入力（始まり）&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 「options」行まで、入力値を読み込む。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;options&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;startDate&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy/MM/dd&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;endDate&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Utilities&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;formatDate&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;&quot;Asia/Tokyo&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;yyyy/MM/dd&quot;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;title&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;startTime&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;endTime&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;color&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 日数を設定する。（開始月と終了月が異なるかどうかで場合分け。閏年には非対応。）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;day_of_EOM&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;)]) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 繰り返し方を設定する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;newRecurrence&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;addDailyRule&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;times&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 「option」の行をスキップ。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 「options」内に入力する値を読み込む。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;毎日入力（終わり）&apos;&lt;/span&gt;&lt;span&gt;){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getRange&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;column_of_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;row&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  毎日入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Browser.msgBox(&apos;テスト&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;繰り返す日数を計算します。11/30や12/31などで日数にブレが生じるので&lt;code&gt;day_of_EOM&lt;/code&gt;を処理に噛ませます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 日数を設定する。（開始月と終了月が異なるかどうかで場合分け。閏年には非対応。）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;day_of_EOM&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;)]) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;ここで繰り返し入力の方法を設定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// 繰り返し方を設定する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;newRecurrence&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;addDailyRule&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span&gt;times&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num_of_date&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;この部分で、実際にカレンダーに入力します。&lt;code&gt;calendar.createEventSeries()&lt;/code&gt;で連続入力します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;//  毎日入力&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;startDate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endTime&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Browser.msgBox(&apos;テスト&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calendar&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;createEventSeries&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;array_to_input&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;recurrence&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setColor&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;color&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、これで入力した予定を1日ずついじれるようになったぜい・・・　ﾓｸﾞﾓｸﾞ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ボンカレーおいしいねえ・・・　ﾓｸﾞﾓｸﾞ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】sqlite3からCSV文字列を出力する</title><link>https://endorphinbath.com/posts/sqlite3-to-csv/</link><guid isPermaLink="true">https://endorphinbath.com/posts/sqlite3-to-csv/</guid><description>sqlite3からCSVを出力する記事がググってもほとんど出てこなかったので自分で書きました（笑）なんだか、作ってる最中の心情も記事に書いたので、プログラマあるある的な記事になっています。見てみて下さい。</description><pubDate>Wed, 24 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は、Pythonでsqlite3からCSVの文字列を出力するというテーマです。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんで、こんな記事を書こうと思ったかというと、「sqlite csv」とググってもcsvをsqlite3のDBのテーブルに入れる記事ばっかりヒットしたからです(TへT) その悲しさから、この記事を思いのまま勢いに任せて書いています！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあスタート！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;sqlite3の中のデータ確認！&lt;a href=&quot;#sqlite3の中のデータ確認&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今入っているテーブルとデータがまあこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1858&quot; height=&quot;399&quot; src=&quot;/_astro/01.CRiwzN8-_Z1HFx6G.webp&quot; srcset=&quot;/_astro/01.CRiwzN8-_ZBeikh.webp 640w, /_astro/01.CRiwzN8-_1mLFq6.webp 750w, /_astro/01.CRiwzN8-_Q4o3C.webp 828w, /_astro/01.CRiwzN8-_1o2nbo.webp 1080w, /_astro/01.CRiwzN8-_NIc2P.webp 1280w, /_astro/01.CRiwzN8-_Z16qj0m.webp 1668w, /_astro/01.CRiwzN8-_Z1HFx6G.webp 1858w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;実際にPythonでデータを取り出したいと思います！&lt;a href=&quot;#実際にpythonでデータを取り出したいと思います&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こんな作業はさっさとjupyter notebookで取り出してしまいたいと思います。&lt;/p&gt;&lt;p&gt;あ～、久しぶりにPython触るなあ。自分が作ったプログラムからデータを取るから分かりやすいというのもあると思うんだが、やはりPythonは読みやすいと身にしみる。文法もちょっと予想で書けちゃったりするし。
&lt;img loading=&quot;lazy&quot; width=&quot;2032&quot; height=&quot;1061&quot; src=&quot;/_astro/02.Cv-77seo_ZGODT4.webp&quot; srcset=&quot;/_astro/02.Cv-77seo_6oian.webp 640w, /_astro/02.Cv-77seo_YmWoB.webp 750w, /_astro/02.Cv-77seo_Z1qCwA3.webp 828w, /_astro/02.Cv-77seo_Z9THm.webp 1080w, /_astro/02.Cv-77seo_Z2pvkH3.webp 1280w, /_astro/02.Cv-77seo_2jI9nX.webp 1668w, /_astro/02.Cv-77seo_ZGODT4.webp 2032w&quot; /&gt;&lt;/p&gt;&lt;p&gt;と、思ってコード書いてたら、よく分からんエラーが出てきて、エラーコードも大して読まずに適当に直す。しかし、治らない・・・・。どういうこと！？&lt;/p&gt;&lt;p&gt;しょうがねえなあ、ちゃんと読むか・・・。&lt;/p&gt;&lt;p&gt;どれどれ、読んでみると、ん？　もしかして、listをjoinした文字列にするのに、そのlistにintが入ってるとダメ？　マジデ！？　そっかー、最近SIer的なことしかやってないから、DBから取ってくるデータが文字列か数値型かなんていう思考が頭から抜けてしまっている～。
&lt;img loading=&quot;lazy&quot; width=&quot;2008&quot; height=&quot;1019&quot; src=&quot;/_astro/03.C11F0gKr_7J5eC.webp&quot; srcset=&quot;/_astro/03.C11F0gKr_Z4wJor.webp 640w, /_astro/03.C11F0gKr_NyYNm.webp 750w, /_astro/03.C11F0gKr_UIBHs.webp 828w, /_astro/03.C11F0gKr_sxkgb.webp 1080w, /_astro/03.C11F0gKr_Z2I2V1.webp 1280w, /_astro/03.C11F0gKr_Z1h9NjC.webp 1668w, /_astro/03.C11F0gKr_7J5eC.webp 2008w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よし、型変換はしたぞ・・・でも、なんかNoneTypeもいる・・・。まあ、嫌な予感はするが、放っておくか・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2068&quot; height=&quot;1125&quot; src=&quot;/_astro/04.BFBr6Hbe_cIsbd.webp&quot; srcset=&quot;/_astro/04.BFBr6Hbe_ZCGoUQ.webp 640w, /_astro/04.BFBr6Hbe_257FPv.webp 750w, /_astro/04.BFBr6Hbe_kHNv1.webp 828w, /_astro/04.BFBr6Hbe_Z14OmrX.webp 1080w, /_astro/04.BFBr6Hbe_Z1Mpktw.webp 1280w, /_astro/04.BFBr6Hbe_Z1qJFc1.webp 1668w, /_astro/04.BFBr6Hbe_1diEH7.webp 2048w, /_astro/04.BFBr6Hbe_cIsbd.webp 2068w&quot; /&gt;&lt;/p&gt;&lt;p&gt;は？　もう直したぞ。なのに、出力できないとはなにごと。
&lt;img loading=&quot;lazy&quot; width=&quot;2061&quot; height=&quot;1110&quot; src=&quot;/_astro/05.BLf5-GuP_bLzih.webp&quot; srcset=&quot;/_astro/05.BLf5-GuP_1RcmuU.webp 640w, /_astro/05.BLf5-GuP_22Yqm6.webp 750w, /_astro/05.BLf5-GuP_Z2d7E7P.webp 828w, /_astro/05.BLf5-GuP_Z25TH7S.webp 1080w, /_astro/05.BLf5-GuP_Z24jQ7M.webp 1280w, /_astro/05.BLf5-GuP_2sA38R.webp 1668w, /_astro/05.BLf5-GuP_14BcBq.webp 2048w, /_astro/05.BLf5-GuP_bLzih.webp 2061w&quot; /&gt;&lt;/p&gt;&lt;p&gt;確かに、listの値は全て文字列（str）型になっている・・・。なぜだ・・・。&lt;/p&gt;&lt;p&gt;あ！　list_jじゃなくて、jで出力してしまっている！　intが入っているtupleのまんまだ！
&lt;img loading=&quot;lazy&quot; width=&quot;2054&quot; height=&quot;1091&quot; src=&quot;/_astro/06.CZAgeN9n_wwgCW.webp&quot; srcset=&quot;/_astro/06.CZAgeN9n_ZqWG1g.webp 640w, /_astro/06.CZAgeN9n_Z24GeVt.webp 750w, /_astro/06.CZAgeN9n_Z1Y7AKg.webp 828w, /_astro/06.CZAgeN9n_Z1OW7HW.webp 1080w, /_astro/06.CZAgeN9n_Z2tqysI.webp 1280w, /_astro/06.CZAgeN9n_Z2dqrHy.webp 1668w, /_astro/06.CZAgeN9n_1j0KKN.webp 2048w, /_astro/06.CZAgeN9n_wwgCW.webp 2054w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よしよし・・・いい子だ・・・、list_jにしたらCSV出力できてるぜ。
&lt;img loading=&quot;lazy&quot; width=&quot;2064&quot; height=&quot;1147&quot; src=&quot;/_astro/07.BwTwDiaT_ZUAnry.webp&quot; srcset=&quot;/_astro/07.BwTwDiaT_Z1cCeIS.webp 640w, /_astro/07.BwTwDiaT_Z11XfQh.webp 750w, /_astro/07.BwTwDiaT_Zel6gA.webp 828w, /_astro/07.BwTwDiaT_ZThQPt.webp 1080w, /_astro/07.BwTwDiaT_O3r7K.webp 1280w, /_astro/07.BwTwDiaT_Z2uGHMf.webp 1668w, /_astro/07.BwTwDiaT_18yyj.webp 2048w, /_astro/07.BwTwDiaT_ZUAnry.webp 2064w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よしよし、完全勝利かな～。これは。ガッハッハ～
&lt;img loading=&quot;lazy&quot; width=&quot;2072&quot; height=&quot;1079&quot; src=&quot;/_astro/08.D240WpAJ_yF3w9.webp&quot; srcset=&quot;/_astro/08.D240WpAJ_PiIr0.webp 640w, /_astro/08.D240WpAJ_1IhnFe.webp 750w, /_astro/08.D240WpAJ_ZGI6jq.webp 828w, /_astro/08.D240WpAJ_Z1OVNm.webp 1080w, /_astro/08.D240WpAJ_3Qqsw.webp 1280w, /_astro/08.D240WpAJ_s4ALg.webp 1668w, /_astro/08.D240WpAJ_ZWsg0J.webp 2048w, /_astro/08.D240WpAJ_yF3w9.webp 2072w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ガッ！！！！！　ハ～ッハッ！！！！！！！&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;あ～、やっぱりNoneTypeを無視してはならなかったか～。
&lt;img loading=&quot;lazy&quot; width=&quot;2073&quot; height=&quot;1189&quot; src=&quot;/_astro/09.D_5WnmbD_ZjvNTa.webp&quot; srcset=&quot;/_astro/09.D_5WnmbD_ZUfYVz.webp 640w, /_astro/09.D_5WnmbD_1KX76T.webp 750w, /_astro/09.D_5WnmbD_2JXyz.webp 828w, /_astro/09.D_5WnmbD_Z2vNK1P.webp 1080w, /_astro/09.D_5WnmbD_Ti0Tw.webp 1280w, /_astro/09.D_5WnmbD_1IezWr.webp 1668w, /_astro/09.D_5WnmbD_Z1LBFlW.webp 2048w, /_astro/09.D_5WnmbD_ZjvNTa.webp 2073w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ぬ～、これでは消えないのか～。
&lt;img loading=&quot;lazy&quot; width=&quot;2099&quot; height=&quot;1185&quot; src=&quot;/_astro/10.Mig-Wi3j_JPfYk.webp&quot; srcset=&quot;/_astro/10.Mig-Wi3j_Zy9r2U.webp 640w, /_astro/10.Mig-Wi3j_29wyJR.webp 750w, /_astro/10.Mig-Wi3j_Z26HAHD.webp 828w, /_astro/10.Mig-Wi3j_1bn2UL.webp 1080w, /_astro/10.Mig-Wi3j_Z2ezjbI.webp 1280w, /_astro/10.Mig-Wi3j_Z1hpFAe.webp 1668w, /_astro/10.Mig-Wi3j_Z1oPg3O.webp 2048w, /_astro/10.Mig-Wi3j_JPfYk.webp 2099w&quot; /&gt;&lt;/p&gt;&lt;p&gt;お！　type判定じゃなくて、Noneかどうかを判定したほうが良いのか！　strになった！&lt;/p&gt;&lt;p&gt;一応、最後のデータまで確認するかあ。またなんかあるとめんどいし。
&lt;img loading=&quot;lazy&quot; width=&quot;2045&quot; height=&quot;1188&quot; src=&quot;/_astro/11.DcC5dwpN_ZkHVMh.webp&quot; srcset=&quot;/_astro/11.DcC5dwpN_LaArS.webp 640w, /_astro/11.DcC5dwpN_Z1AsBwP.webp 750w, /_astro/11.DcC5dwpN_ZMXwUI.webp 828w, /_astro/11.DcC5dwpN_1CDzcP.webp 1080w, /_astro/11.DcC5dwpN_Z5xjVw.webp 1280w, /_astro/11.DcC5dwpN_EhHOB.webp 1668w, /_astro/11.DcC5dwpN_ZkHVMh.webp 2045w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うわああああ、やっぱりいやがった。floatかあ～。
&lt;img loading=&quot;lazy&quot; width=&quot;2036&quot; height=&quot;1147&quot; src=&quot;/_astro/12.BA7aR-KF_Z2rBUFs.webp&quot; srcset=&quot;/_astro/12.BA7aR-KF_ZM8ede.webp 640w, /_astro/12.BA7aR-KF_1UxLzy.webp 750w, /_astro/12.BA7aR-KF_csI0N.webp 828w, /_astro/12.BA7aR-KF_2tvR54.webp 1080w, /_astro/12.BA7aR-KF_Sx1th.webp 1280w, /_astro/12.BA7aR-KF_1PGE4L.webp 1668w, /_astro/12.BA7aR-KF_Z2rBUFs.webp 2036w&quot; /&gt;&lt;/p&gt;&lt;p&gt;うるせええ！！！&lt;/p&gt;&lt;p&gt;（デバッガ「バグを教えただけなのに・・・。。。」）
&lt;img loading=&quot;lazy&quot; width=&quot;2065&quot; height=&quot;1152&quot; src=&quot;/_astro/13.B6Gg1sKT_bBsUI.webp&quot; srcset=&quot;/_astro/13.B6Gg1sKT_ZeIXAK.webp 640w, /_astro/13.B6Gg1sKT_Z44YI9.webp 750w, /_astro/13.B6Gg1sKT_Z1NBW2d.webp 828w, /_astro/13.B6Gg1sKT_118gDy.webp 1080w, /_astro/13.B6Gg1sKT_akf4q.webp 1280w, /_astro/13.B6Gg1sKT_1bAoVH.webp 1668w, /_astro/13.B6Gg1sKT_18hlJT.webp 2048w, /_astro/13.B6Gg1sKT_bBsUI.webp 2065w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よーし、次こそは全部strになってる！
&lt;img loading=&quot;lazy&quot; width=&quot;2037&quot; height=&quot;1160&quot; src=&quot;/_astro/14.Az6k_J6N_1qi5o5.webp&quot; srcset=&quot;/_astro/14.Az6k_J6N_Z1A5omO.webp 640w, /_astro/14.Az6k_J6N_Z1pyusM.webp 750w, /_astro/14.Az6k_J6N_ZC4pQF.webp 828w, /_astro/14.Az6k_J6N_Zltfxm.webp 1080w, /_astro/14.Az6k_J6N_Z1gnNoh.webp 1280w, /_astro/14.Az6k_J6N_1rCNr8.webp 1668w, /_astro/14.Az6k_J6N_1qi5o5.webp 2037w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よーし、CSVで全部吐き出されたぞ～。
&lt;img loading=&quot;lazy&quot; width=&quot;2062&quot; height=&quot;1120&quot; src=&quot;/_astro/15.Ci89jApE_ZQs4ey.webp&quot; srcset=&quot;/_astro/15.Ci89jApE_1cWoGq.webp 640w, /_astro/15.Ci89jApE_1nJsxB.webp 750w, /_astro/15.Ci89jApE_2bmC8i.webp 828w, /_astro/15.Ci89jApE_Z2gOxhb.webp 1080w, /_astro/15.Ci89jApE_25LCvc.webp 1280w, /_astro/15.Ci89jApE_2rrhMH.webp 1668w, /_astro/15.Ci89jApE_Z2tJjnF.webp 2048w, /_astro/15.Ci89jApE_ZQs4ey.webp 2062w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、これがGoogleスプレッドシートに問題なく貼り付けられるのかどうかをチェック。（テーブルの区切りをつけて貼りやすくする。）
&lt;img loading=&quot;lazy&quot; width=&quot;2423&quot; height=&quot;1245&quot; src=&quot;/_astro/16.BteXyxsu_Z2mgKY.webp&quot; srcset=&quot;/_astro/16.BteXyxsu_IDirJ.webp 640w, /_astro/16.BteXyxsu_1BK2Ex.webp 750w, /_astro/16.BteXyxsu_ZNfrk7.webp 828w, /_astro/16.BteXyxsu_ZL7hBl.webp 1080w, /_astro/16.BteXyxsu_ZBjn3F.webp 1280w, /_astro/16.BteXyxsu_2q9E4d.webp 1668w, /_astro/16.BteXyxsu_Z1qjtHz.webp 2048w, /_astro/16.BteXyxsu_Z2mgKY.webp 2423w&quot; /&gt;&lt;/p&gt;&lt;p&gt;よしよし、ちゃんと貼り付けられる。（エラーメッセージが出ている理由は、データ形式をシート上で変えてるからですね。今後使う型はbooleanなので。）
&lt;img loading=&quot;lazy&quot; width=&quot;2173&quot; height=&quot;1115&quot; src=&quot;/_astro/17.CvHGDbwZ_mrFLR.webp&quot; srcset=&quot;/_astro/17.CvHGDbwZ_6zcW7.webp 640w, /_astro/17.CvHGDbwZ_Z1xt9IP.webp 750w, /_astro/17.CvHGDbwZ_16Hu5r.webp 828w, /_astro/17.CvHGDbwZ_dAu65.webp 1080w, /_astro/17.CvHGDbwZ_nooDK.webp 1280w, /_astro/17.CvHGDbwZ_Z1EjH2i.webp 1668w, /_astro/17.CvHGDbwZ_ZqAH09.webp 2048w, /_astro/17.CvHGDbwZ_mrFLR.webp 2173w&quot; /&gt;&lt;/p&gt;&lt;p&gt;一番欲しかったデータも手に入った！　（データ変えなきゃな。服のidじゃなくて、暖かさが欲しい。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回作ったコード&lt;a href=&quot;#今回作ったコード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回、sqlite3からCSVを作るために使ったコードはこれです。ファイル書き込み機能はありませんが、僕みたいにExcelとかGoogleスプレッドシート用に使う場合は、これを元にすれば事足りるはずです。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; sqlite3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;dbpath &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;wwwardrobe.sqlite&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# DB&apos;s path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;connection &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sqlite3.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(dbpath)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cursor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; connection.&lt;/span&gt;&lt;span&gt;cursor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;tables &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;users&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobes&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;history_own&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;history_wear&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;weather_today&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; tables:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM &lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(i))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;&lt;span&gt;(i &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos; ------------------------------------------------------&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; j &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; rows:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j_list &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;(j)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(j_list)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(j_list[k]) &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j_list[k] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(j_list[k])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; j_list[k] &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j_list[k] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;(j_list[k]) &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;float&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;j_list[k] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(j_list[k])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;,&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt;(j_list)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふ～、なんか勢いで書いてしまったな。まあ、JPEGminiの1日の無料分をここで良い感じに使い切れたし、良かった良かった。 (´▽｀) ( ´ ▽ ` )&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・元気なことは良いことです&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】同じような画像が色々な組み合わせで存在する場合に重複分を削除するスクリプトを作った話</title><link>https://endorphinbath.com/posts/remove-duplicate-images/</link><guid isPermaLink="true">https://endorphinbath.com/posts/remove-duplicate-images/</guid><description>同じような画像が色々な組み合わせ・グループで出来てしまった場合に、重複している分を削除するツールをPythonで作りました。OpenCVを利用しています。</description><pubDate>Tue, 23 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー、そういえば、重複した同じような画像が色々な組み合わせで出てきた際に、一気に削除してくれるスクリプトを作ったのを思い出したわ。今回はそれを紹介するぜ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;急だな&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;起動する関数は、RemoveDuplication()です。
&lt;img loading=&quot;lazy&quot; width=&quot;1883&quot; height=&quot;1034&quot; src=&quot;/_astro/01.e7qBA5xi_1Ek6j2.webp&quot; srcset=&quot;/_astro/01.e7qBA5xi_Z1fFtMV.webp 640w, /_astro/01.e7qBA5xi_Z151uUk.webp 750w, /_astro/01.e7qBA5xi_2h5zjQ.webp 828w, /_astro/01.e7qBA5xi_Z6EMqy.webp 1080w, /_astro/01.e7qBA5xi_4G8mF.webp 1280w, /_astro/01.e7qBA5xi_ZAN9Ib.webp 1668w, /_astro/01.e7qBA5xi_1Ek6j2.webp 1883w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回重複を削除するファイルはこれらの画像になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1305&quot; height=&quot;884&quot; src=&quot;/_astro/02.CNTEzN8y_1v0fbi.webp&quot; srcset=&quot;/_astro/02.CNTEzN8y_Z1kdcxj.webp 640w, /_astro/02.CNTEzN8y_2vbWj9.webp 750w, /_astro/02.CNTEzN8y_2ocgyr.webp 828w, /_astro/02.CNTEzN8y_Za1xJF.webp 1080w, /_astro/02.CNTEzN8y_Z1K4JYB.webp 1280w, /_astro/02.CNTEzN8y_1v0fbi.webp 1305w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スクリプトを起動して、それらの画像があるフォルダを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1417&quot; height=&quot;886&quot; src=&quot;/_astro/03.DhkSpeXu_vgC9C.webp&quot; srcset=&quot;/_astro/03.DhkSpeXu_NY1lA.webp 640w, /_astro/03.DhkSpeXu_1NIyYM.webp 750w, /_astro/03.DhkSpeXu_Z1KIV4l.webp 828w, /_astro/03.DhkSpeXu_Z1kFn0T.webp 1080w, /_astro/03.DhkSpeXu_Z155DQg.webp 1280w, /_astro/03.DhkSpeXu_vgC9C.webp 1417w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、削除する前に「Assessment」モードを選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1823&quot; height=&quot;345&quot; src=&quot;/_astro/04.BwuuV_tO_UrKI1.webp&quot; srcset=&quot;/_astro/04.BwuuV_tO_Z116qUw.webp 640w, /_astro/04.BwuuV_tO_Zv5Qpc.webp 750w, /_astro/04.BwuuV_tO_7eQoy.webp 828w, /_astro/04.BwuuV_tO_Z10YudR.webp 1080w, /_astro/04.BwuuV_tO_W7Att.webp 1280w, /_astro/04.BwuuV_tO_ZV2FU7.webp 1668w, /_astro/04.BwuuV_tO_UrKI1.webp 1823w&quot; /&gt;&lt;/p&gt;&lt;p&gt;評価方法を選びます。「PixelMatch」を使います。
&lt;img loading=&quot;lazy&quot; width=&quot;1762&quot; height=&quot;147&quot; src=&quot;/_astro/05.B-EOjHMl_Z1lW8aM.webp&quot; srcset=&quot;/_astro/05.B-EOjHMl_1DMqa6.webp 640w, /_astro/05.B-EOjHMl_bMtlm.webp 750w, /_astro/05.B-EOjHMl_Z2hUklb.webp 828w, /_astro/05.B-EOjHMl_Z1hE2uU.webp 1080w, /_astro/05.B-EOjHMl_Z1k1Y1k.webp 1280w, /_astro/05.B-EOjHMl_amuos.webp 1668w, /_astro/05.B-EOjHMl_Z1lW8aM.webp 1762w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、画像の重複がどれぐらいあるのかをテキストファイルに吐き出します。&lt;/p&gt;&lt;p&gt;今回、Assessmentで調査した結果のテキストファイルから、前の画像と0.87の割合でピクセルが合致していたら、その画像を削除することにします。
&lt;img loading=&quot;lazy&quot; width=&quot;2199&quot; height=&quot;868&quot; src=&quot;/_astro/06.CQMxXHz0_ZcEQLD.webp&quot; srcset=&quot;/_astro/06.CQMxXHz0_Z1JhH5O.webp 640w, /_astro/06.CQMxXHz0_Z2nscJi.webp 750w, /_astro/06.CQMxXHz0_Z21Duc9.webp 828w, /_astro/06.CQMxXHz0_VF4uQ.webp 1080w, /_astro/06.CQMxXHz0_24nvhz.webp 1280w, /_astro/06.CQMxXHz0_2rWdFA.webp 1668w, /_astro/06.CQMxXHz0_Z1dQ1Ym.webp 2048w, /_astro/06.CQMxXHz0_ZcEQLD.webp 2199w&quot; /&gt;&lt;/p&gt;&lt;p&gt;再度、スクリプトを起動して、「Remove」モードにして「PixelMatch」モードを選択して、「87」（＝0.87）を入力します。
&lt;img loading=&quot;lazy&quot; width=&quot;1865&quot; height=&quot;334&quot; src=&quot;/_astro/07.DO6V6TCZ_Z2tb3JM.webp&quot; srcset=&quot;/_astro/07.DO6V6TCZ_JYigY.webp 640w, /_astro/07.DO6V6TCZ_2p2RXx.webp 750w, /_astro/07.DO6V6TCZ_Z1sM2qw.webp 828w, /_astro/07.DO6V6TCZ_Z1iNlxc.webp 1080w, /_astro/07.DO6V6TCZ_Z1hRu1.webp 1280w, /_astro/07.DO6V6TCZ_1l1ClL.webp 1668w, /_astro/07.DO6V6TCZ_Z2tb3JM.webp 1865w&quot; /&gt;&lt;/p&gt;&lt;p&gt;削除処理が完了しました！（ちょっとデバッグしながらお届けしてます・・・。）
&lt;img loading=&quot;lazy&quot; width=&quot;1738&quot; height=&quot;255&quot; src=&quot;/_astro/08.BbBkV1vP_1e2N7O.webp&quot; srcset=&quot;/_astro/08.BbBkV1vP_1PUGrm.webp 640w, /_astro/08.BbBkV1vP_1xMber.webp 750w, /_astro/08.BbBkV1vP_ZAXeoh.webp 828w, /_astro/08.BbBkV1vP_9NRU6.webp 1080w, /_astro/08.BbBkV1vP_ZneTBH.webp 1280w, /_astro/08.BbBkV1vP_Z2dSDso.webp 1668w, /_astro/08.BbBkV1vP_1e2N7O.webp 1738w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左が削除する前にバックアップしておいたもので、右が実際に削除したものです。&lt;/p&gt;&lt;p&gt;87%以上合致している画像は削除されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1440&quot; src=&quot;/_astro/09.ypqDlu29_ZVUBP7.webp&quot; srcset=&quot;/_astro/09.ypqDlu29_1WQSK0.webp 640w, /_astro/09.ypqDlu29_ZoDeg9.webp 750w, /_astro/09.ypqDlu29_piJ5h.webp 828w, /_astro/09.ypqDlu29_Z19VRh4.webp 1080w, /_astro/09.ypqDlu29_ZaLnku.webp 1280w, /_astro/09.ypqDlu29_1vy4hE.webp 1668w, /_astro/09.ypqDlu29_Z1Q58ta.webp 2048w, /_astro/09.ypqDlu29_ZVUBP7.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらがスクリプトになります。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;RemoveDuplication&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;folderList&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderList    : List String absolutely path, of file filtered with extension in the selected folder.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir : String absolutely path of directory has selected file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match_rate    : Float rate&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;border_line   : border line&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(folderList) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;ImageEditor exits because of no target files.&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;(folderList[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;CheckWhetherSjisExists&lt;/span&gt;&lt;span&gt;([folderList[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], extracted_dir], &lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Decide to remove or don&apos;t&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;executeMode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;RepeatInputWithMultiChoices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;You wanna Remove or Assessment overlapped images? (R/A)&apos;&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;&apos;R&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;A&apos;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;assessMode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;N&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;border_line &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listForText &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# compare both image to remove img1 or not&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(folderList) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName1 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;splitext&lt;/span&gt;&lt;span&gt;(os.path.&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt;(folderList[i]))[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName2 &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;splitext&lt;/span&gt;&lt;span&gt;(os.path.&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt;(folderList[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]))[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Decide method of assessment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;F&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;P&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;assessMode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;RepeatInputWithMultiChoices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;Which method to assess?&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;[ F: FeaturePoint, P: PixelMatch ] : &apos;&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;&apos;F&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;P&apos;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; executeMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;R&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;F&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;border_line &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;RepeatInputWithMultiChoices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;How many matches are required not to remove? : &apos;&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;P&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;border_line &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;RepeatInputWithMultiChoices&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;How many matches are required to remove? : &apos;&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; executeMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;S&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# do assessment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;F&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match_rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JudgeMatchRateByFeaturePoint&lt;/span&gt;&lt;span&gt;(folderList[i], folderList[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match_rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(match_rate &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;degree of similarity between &quot;&lt;/span&gt;&lt;span&gt;{imgName1}&lt;/span&gt;&lt;span&gt;&quot; and &quot;&lt;/span&gt;&lt;span&gt;{imgName2}&lt;/span&gt;&lt;span&gt;&quot; is &lt;/span&gt;&lt;span&gt;{rate}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName1&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName1,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName2&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName2,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rate&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;match_rate))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;P&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match_rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JudgeMatchRateByPixelMatch&lt;/span&gt;&lt;span&gt;(folderList[i], folderList[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;match_rate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(match_rate &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;match rate between &quot;&lt;/span&gt;&lt;span&gt;{imgName1}&lt;/span&gt;&lt;span&gt;&quot; and &quot;&lt;/span&gt;&lt;span&gt;{imgName2}&lt;/span&gt;&lt;span&gt;&quot; is &lt;/span&gt;&lt;span&gt;{rate}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName1&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName1,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName2&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName2,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rate&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;match_rate))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;listForText.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&quot;&lt;/span&gt;&lt;span&gt;{imgName1}&lt;/span&gt;&lt;span&gt;&quot; and &quot;&lt;/span&gt;&lt;span&gt;{imgName2}&lt;/span&gt;&lt;span&gt;&quot; is &lt;/span&gt;&lt;span&gt;{rate}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName1&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName1,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;imgName2&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;imgName2,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;rate&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;match_rate))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# Remove files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; executeMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;R&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;F&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; match_rate &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; border_line:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;(folderList[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt;&lt;span&gt; assessMode &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;P&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; match_rate &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; border_line:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;os.&lt;/span&gt;&lt;span&gt;remove&lt;/span&gt;&lt;span&gt;(folderList[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# write to .txt file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;TextEditor.&lt;/span&gt;&lt;span&gt;WriteText&lt;/span&gt;&lt;span&gt;(DirEditor.&lt;/span&gt;&lt;span&gt;GenerateFileName&lt;/span&gt;&lt;span&gt;(extracted_dir, sep, &lt;/span&gt;&lt;span&gt;&apos;match_rate.txt&apos;&lt;/span&gt;&lt;span&gt;), listForText)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;RemoveDuplication is terminated.&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;Check directory &quot;&lt;/span&gt;&lt;span&gt;{dirname}&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;extracted_dir))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ざっと書くと、以下の2軸での処理をこの関数で記載しています。まあ、ぶっちゃけ「FeaturePoint」の評価方法はあまり使っていませんね・・・。名残で残しているだけです。&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;モード&lt;/th&gt;&lt;th&gt;評価方法「FeaturePoint」&lt;/th&gt;&lt;th&gt;評価方法「PixelMatch」&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Removeモード&lt;/td&gt;&lt;td&gt;R、F&lt;/td&gt;&lt;td&gt;R、P（今回はこれを使った）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Assessmentモード&lt;/td&gt;&lt;td&gt;A、F&lt;/td&gt;&lt;td&gt;A、P&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以上、重複を削除するツールでした。以前に問題集が載っている動画を画像にしたことがあったけど、それと組み合わせると沢山ある同じ画像を減らせるってわけよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;スッキリしたな&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;このツールで重複を削除した後は・・・&lt;a href=&quot;#このツールで重複を削除した後は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この重複を除いた複数の画像を一気にトリミングしたい場合は、以下のツールで切り出してみてはいかがでしょうか？
こちらもPythonで動きます！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/trim-multiple-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】複数の画像を一気にトリミングするスクリプトを作った話&lt;/div&gt;&lt;div&gt;複数の画像を一気にトリミングするツールをPythonで作りました。使い方としては、最初に切り出したい範囲を選んで確定したら、そのエリアで後続の画像も切り出します。利用したモジュールは、OpenCVやTkinter、matplotlibになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211101_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;ちなみにこのツールを使う前段としての記事が以下に載っています。よければ見てみて下さい。
こちらもPythonで動きます。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/extract-movie-to-image/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】動画をフレームごとの画像にして出力するスクリプトを作った話&lt;/div&gt;&lt;div&gt;動画を画像として切り出すツールをPythonで作りました。OpenCVを利用しています。動画として視聴する必要がないコンテンツはこのツールで画像にしてしまいましょう！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211030_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【暮らし】味噌汁を腐らせないように経験論をメモ書いておく</title><link>https://endorphinbath.com/posts/dont-rot-miso-soup/</link><guid isPermaLink="true">https://endorphinbath.com/posts/dont-rot-miso-soup/</guid><description>あなたは作り置きした味噌汁を腐らせた経験はないですか？　辛いですよね。作り置きした翌日に腐った暁には、大量に作った味噌汁を捨てざるを得なくなって辛いですよね。そんなあなたと私のために、味噌汁を腐らせない指針を記しておきます。</description><pubDate>Mon, 22 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うがあああああ！！ 味噌汁のヤツ、腐ってやがる～！！ 饐えてやがる～！！ ちくしょ～～、こんなに作ったのに～・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もうー、あれほど冷蔵庫に入れとけって言ったでしょー？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なんで腐るのかな～&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;味噌汁を腐らせたことはありませんか？&lt;a href=&quot;#味噌汁を腐らせたことはありませんか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あなたは作り置きした味噌汁を腐らせた経験はないですか？&lt;/p&gt;&lt;p&gt;辛いですよね。作り置きした翌日に腐った暁には、大量に作った味噌汁を捨てざるを得なくなって辛いですよね。そんなあなたと私のために、味噌汁を腐らせない指針を記しておきます。&lt;/p&gt;&lt;p&gt;※ これから記述することは、全て僕の経験談です。これが全ての方に該当するとは考えていませんので、自分に合った作り置きの保存方法を各自でお試し下さい。あくまで、この記事は判断基準の一つであり、この方法に沿った保存方法で体調を崩されても、当方では責任は取りかねます。自己責任で保存方法を探求して下さい。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 冷蔵庫には必ず入れて保存する。&lt;a href=&quot;#1-冷蔵庫には必ず入れて保存する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1120&quot; height=&quot;1000&quot; src=&quot;/_astro/01.D4_3Fae8_Lt06C.webp&quot; srcset=&quot;/_astro/01.D4_3Fae8_3JoqI.webp 640w, /_astro/01.D4_3Fae8_6joJk.webp 750w, /_astro/01.D4_3Fae8_8H5tL.webp 828w, /_astro/01.D4_3Fae8_1zEC0T.webp 1080w, /_astro/01.D4_3Fae8_Lt06C.webp 1120w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これはまあ、絶対守らなければならない条件ですよね。夏場なんて特にすぐ食材が腐ってしまうので、寝る前には必ず鍋が冷蔵庫に入っていることを確認すること。
子供を寝かしつけるのとかも大事だと思いますが、その前に鍋は冷蔵庫に入れておきましょう。
しかしながら、余熱があるときに冷蔵庫に入れてしまうと食材が劣化してしまいそうな気もしますよね・・・。まあ、チェックの流れしては、以下の流れですかね。&lt;/p&gt;&lt;p&gt;鍋に余熱があるか？&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;→　Yes：冷蔵庫に入れる。&lt;/li&gt;
&lt;li&gt;→　No：もう寝るか？
&lt;ul&gt;
&lt;li&gt;→　Yes：冷蔵庫に入れる。&lt;/li&gt;
&lt;li&gt;→　No：まあ待ってみよう。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 鍋の蓋はちゃんと閉める。&lt;a href=&quot;#2-鍋の蓋はちゃんと閉める&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/02.DIiXkTlV_12iHy4.webp&quot; srcset=&quot;/_astro/02.DIiXkTlV_Z1jJ2tU.webp 640w, /_astro/02.DIiXkTlV_1czna7.webp 750w, /_astro/02.DIiXkTlV_Z1wsH0R.webp 828w, /_astro/02.DIiXkTlV_Z2rXiYv.webp 1080w, /_astro/02.DIiXkTlV_12iHy4.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これも結構確度が高い条件です。
みなさま、味噌汁が腐った時の状態は分かりますか？
あー、実はあの状態はそもそも「腐った」と言うよりも、的確な表現があるのです。&lt;/p&gt;&lt;p&gt;あの状態は、「饐えた」状態と日本語では表現するそうです。
以下のデジタル大辞泉にも載っています。
「饐える・・・飲食物が腐って酸っぱくなる。」&lt;/p&gt;&lt;p&gt;「酸っぱくなる」、つまり饐えた状態は、味噌汁が「酸化」している状態なのです。&lt;/p&gt;&lt;p&gt;酸化するということは、酸素に触れている状態ということなので、酸素に触れさせない方が「饐えた」状態にはなりにくいと僕は考えています。&lt;/p&gt;&lt;p&gt;そのために、鍋の蓋で蓋を密閉することで酸素に当たる量を減らせます。&lt;/p&gt;&lt;p&gt;そして、冷蔵庫に入れて30分くらい経って、温度が下がった鍋の蓋を開けられないかどうかも確認してみて下さい。簡単に開けられなくなっていれば、鍋の中の気圧が下がって、空気（酸素とか）が鍋の中に侵入できない証拠なので、ちゃんと密閉できています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.　常温で保存する期間を考える。&lt;a href=&quot;#3常温で保存する期間を考える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;456&quot; src=&quot;/_astro/03.D_Y85iyE_Z2wqivz.webp&quot; srcset=&quot;/_astro/03.D_Y85iyE_Z2wqivz.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;果たして、常温で保存して良い合計時間はどのぐらいなのでしょう？&lt;/p&gt;&lt;p&gt;僕の経験則としては、1日あたりおよそ4～5時間くらいで4日間、常温で保存していました。つまり、16～20時間くらい常温で保存していたということになります。
常温で保存している期間がある理由は、夕飯を食べた後に余熱を取るためです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.　肉が入っている期間を考える。&lt;a href=&quot;#4肉が入っている期間を考える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;426&quot; src=&quot;/_astro/04.DZKw409j_Z1x4Uuw.webp&quot; srcset=&quot;/_astro/04.DZKw409j_Z1x4Uuw.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕は味噌汁を作る時に、一緒に鶏肉や豚肉も入れるのですが、この肉を味噌汁の中でどれくらいの期間保存するのかも考えましょう。&lt;/p&gt;&lt;p&gt;僕の経験則としては、常温で肉を保存できるのは合計10時間ってところじゃないでしょうか。もちろん、上記で述べた条件は全て満たした上での話です。そのため、作り置きの味噌汁に肉を入れるのは、食べ切る見通しが付いた場合に実行したほうが良さそうです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、味噌汁できたぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ズズズッ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ｽﾞｽﾞｽﾞｯ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【iPhone、Android、ゲーム】僕が今までそれなりにやってきたスマホゲームの思い出を書きます（後編）</title><link>https://endorphinbath.com/posts/memorable-game-smartphone-2/</link><guid isPermaLink="true">https://endorphinbath.com/posts/memorable-game-smartphone-2/</guid><description>僕が過去に遊んで思い出深かったスマホゲーム（iPhone・Android）を紹介します。のコーナーの後編です。Age of Z、乃木フェス、蒼き彼方のフォーリズム、ペンギンの島。</description><pubDate>Mon, 15 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕が過去に遊んだスマホゲームの思い出を語ります。まずは、後半戦です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うおお、行っちゃってええ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲームの紹介&lt;a href=&quot;#ゲームの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、ゲームの紹介になります。5本になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Age of Z&lt;a href=&quot;#age-of-z&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2019年くらい&lt;/p&gt;&lt;p&gt;1〜2ヶ月くらい楽しんでいたゲームです。&lt;/p&gt;&lt;p&gt;ジャンルは戦略・ストラテジー系で、自分で街を育てていくゲームになります。放置して強くなっていく感じの街づくりゲームとも言えます。&lt;/p&gt;&lt;p&gt;ゾンビが街を襲ってくると言うよりも、自分と一緒のワールドを共有している他のプレイヤーが襲ってくるので、そのプレイヤーと競いながら、ワールドランキングの上位の街になるように目指していくゲームとなっています。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/01.hdqN4vSl_D9pfY.webp&quot; srcset=&quot;/_astro/01.hdqN4vSl_3TjIc.webp 640w, /_astro/01.hdqN4vSl_1uyhi2.webp 750w, /_astro/01.hdqN4vSl_Z22x8Fx.webp 828w, /_astro/01.hdqN4vSl_D9pfY.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ギルド的な概念もあり、そこに参加して自分のギルドの領土を拡大していくことで、自分の街のレベルも上げやすくなっていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/02.pZ6hmReg_Z1Mfifx.webp&quot; srcset=&quot;/_astro/02.pZ6hmReg_1MbBbH.webp 640w, /_astro/02.pZ6hmReg_Z1Qlz3o.webp 750w, /_astro/02.pZ6hmReg_ZjfQd2.webp 828w, /_astro/02.pZ6hmReg_Z1Mfifx.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;思い出としては、「英雄譚」と「猛者共のギルド譚」があります。&lt;/p&gt;&lt;p&gt;「英雄譚」の始まりは、僕は最初、普通のギルドに所属していました。&lt;/p&gt;&lt;p&gt;しかし、おそらく他のプレイヤーと比べて効率的に街づくりをしていたおかげか、僕がそのギルドの中で妙に強くなりました。その状態で、同じワールドでうちのギルド内のプレイヤーを襲う害悪プレイヤーが出てきた時に、そのプレイヤーを懲らしめました。そうすると、ギルドの中で讃えられ、僕は英雄扱いとなります。&lt;/p&gt;&lt;p&gt;しかし、その頃、僕は別のギルドのリーダーからそのギルドへの勧誘を受けます。なんとそのギルドは、ワールドランキングで１位のギルドでした。&lt;/p&gt;&lt;p&gt;僕はそのギルドを抜けて（すごい喝采と激励でした笑）、興味本位で１位のギルドに入りました。&lt;/p&gt;&lt;p&gt;ここから「猛者共のギルド譚」です。&lt;/p&gt;&lt;p&gt;そのギルドの凄いところは、チャットの量です。&lt;/p&gt;&lt;p&gt;一体、いつ寛いでいるんだ、プライベートの時間を全てこのゲームに注ぎ込んでいるのではないかというレベルで、メインメンバーはチャットをしていました。ここで少し温度感を感じました。ガチ勢ってスゴイですね・・・&lt;/p&gt;&lt;p&gt;それだけ温度感が高いので、他のギルドとの交流も色々と策略が渦巻いていました。&lt;/p&gt;&lt;p&gt;「あのギルドは別のギルドと繋がっている。」「その情報に乗っかったらハメられるぞ。」など、ギルドの外と内で色々と人間模様が描かれていました。この前まで、仲良くチャットしていた人が脱退して、別の上位ギルドに加入していたり、戦略MMOゲームの上位層の世界を知りました。&lt;/p&gt;&lt;p&gt;その上位ギルドの作戦に参加したときは、やはりガチさが違うので、緊張感が合って面白かったですね。まあ、でも、あの緊張感は仕事だけで勘弁ですね。仕事にはしたくないですね。&lt;/p&gt;&lt;p&gt;そんな感じで、「Age of Z」からは自然消滅という形で離れましたが、ゾンビゲームと言うだけあって、街よりデカイサイズの強ゾンビとかも出てきたりします。一応ゾンビゲームです笑
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/03.ozpwdF1x_Z12zmDo.webp&quot; srcset=&quot;/_astro/03.ozpwdF1x_ZNqMaT.webp 640w, /_astro/03.ozpwdF1x_CdanV.webp 750w, /_astro/03.ozpwdF1x_2aiSei.webp 828w, /_astro/03.ozpwdF1x_Z12zmDo.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;コロナ禍のときは、劇中のキャラクターがマスクを付けたりもして、タイムリーなこともします。現在は、期間限定クエスト的なものはどうなってるんでしょうかね？&lt;/p&gt;&lt;p&gt;興味ある方は遊んでみて下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/04.DEb9C8nL_ZK9J4k.webp&quot; srcset=&quot;/_astro/04.DEb9C8nL_vaBYb.webp 640w, /_astro/04.DEb9C8nL_1VOzy1.webp 750w, /_astro/04.DEb9C8nL_Z1AgPpy.webp 828w, /_astro/04.DEb9C8nL_ZK9J4k.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;乃木坂46リズムフェスティバル&lt;a href=&quot;#乃木坂46リズムフェスティバル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2019年くらい&lt;/p&gt;&lt;p&gt;乃木坂46に勤しんでいた時期が僕にもあり、その頃に一時期取り組んでいました。&lt;/p&gt;&lt;p&gt;「乃木フェス」の略称で、ジャンルはリズムゲームです。演奏していくと、メンバーが強くなっていくので、難易度が高い楽曲もクリアしやすくなっていく感じのゲームです。&lt;/p&gt;&lt;p&gt;リズムゲームとして楽しんでいたというよりは、ライブ映像を視聴することが目的でゲーム画面を開いていました。&lt;/p&gt;&lt;p&gt;そのため、途中からは自動プレイを垂れ流すのみとなった顛末となりました。&lt;/p&gt;&lt;p&gt;現在は乃木坂46のメンバーさえも誰が残っているかも殆ど知らないため、ゲームの方はどんな感じになっているのでしょうか？
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/05.j2mExiBs_15RDM6.webp&quot; srcset=&quot;/_astro/05.j2mExiBs_EK8uX.webp 640w, /_astro/05.j2mExiBs_ZWzatw.webp 750w, /_astro/05.j2mExiBs_2oV9Gn.webp 828w, /_astro/05.j2mExiBs_1LBkxW.webp 1080w, /_astro/05.j2mExiBs_Z28aWzv.webp 1280w, /_astro/05.j2mExiBs_19aanX.webp 1668w, /_astro/05.j2mExiBs_klIQO.webp 2048w, /_astro/05.j2mExiBs_15RDM6.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2854&quot; height=&quot;1348&quot; src=&quot;/_astro/06.CxEeCYBA_wzJVg.webp&quot; srcset=&quot;/_astro/06.CxEeCYBA_EeSD.webp 640w, /_astro/06.CxEeCYBA_Z1BF45Q.webp 750w, /_astro/06.CxEeCYBA_1JPg53.webp 828w, /_astro/06.CxEeCYBA_ZKCDp3.webp 1080w, /_astro/06.CxEeCYBA_Z2an8gV.webp 1280w, /_astro/06.CxEeCYBA_1Q8NIc.webp 1668w, /_astro/06.CxEeCYBA_Z1sHq4w.webp 2048w, /_astro/06.CxEeCYBA_Z1GhISd.webp 2560w, /_astro/06.CxEeCYBA_wzJVg.webp 2854w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;蒼き彼方のフォーリズム&lt;a href=&quot;#蒼き彼方のフォーリズム&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2020年くらい&lt;/p&gt;&lt;p&gt;鼻中隔を骨を削って、鼻の空気の通りを良くする手術を行ったときに、ホテルで安静する他にやることがなかったので、このゲームを集中的に取り組みました。楽しませていただきました。&lt;/p&gt;&lt;p&gt;ゲームとしてだけでなく、ゲーム中のイラストが自分の好みにマッチしていて、自分でイラストを描く際にも参考にさせていただいています。そんな意味で、自分の血となったゲームとなりました。
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/07.FLnz1wUi_Z10qdY8.webp&quot; srcset=&quot;/_astro/07.FLnz1wUi_Z1GsOkE.webp 640w, /_astro/07.FLnz1wUi_1Ko0tM.webp 750w, /_astro/07.FLnz1wUi_2HbPK.webp 828w, /_astro/07.FLnz1wUi_ZjGxdh.webp 1080w, /_astro/07.FLnz1wUi_PHisc.webp 1280w, /_astro/07.FLnz1wUi_ZW8Hng.webp 1668w, /_astro/07.FLnz1wUi_Z1KW8Tp.webp 2048w, /_astro/07.FLnz1wUi_Z10qdY8.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/08.DZdWFuUQ_WJCES.webp&quot; srcset=&quot;/_astro/08.DZdWFuUQ_ZjxcTF.webp 640w, /_astro/08.DZdWFuUQ_Z1VRvTa.webp 750w, /_astro/08.DZdWFuUQ_1pCNgJ.webp 828w, /_astro/08.DZdWFuUQ_1DtjqJ.webp 1080w, /_astro/08.DZdWFuUQ_Z2giXGI.webp 1280w, /_astro/08.DZdWFuUQ_1129gK.webp 1668w, /_astro/08.DZdWFuUQ_cdHJB.webp 2048w, /_astro/08.DZdWFuUQ_WJCES.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;デュエル・マスターズ プレイス&lt;a href=&quot;#デュエルマスターズ-プレイス&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2019年〜&lt;/p&gt;&lt;p&gt;一時期取り組みました。&lt;/p&gt;&lt;p&gt;ジャンルはカードゲームです。あの「デュエル・マスターズ」をスマホの中で遊ぶことが出来ます。&lt;/p&gt;&lt;p&gt;現在は、超次元ホールなるものが登場したりして、僕の少年期に遊んでいた内容以上に複雑になっています。&lt;/p&gt;&lt;p&gt;こういうのって結局速攻デッキを作って、デュエルの数をこなすのが最も速くお金が溜まって強くなれるんですよね。今作品で「クリスタル・ツヴァイランサー」がグラヴィティ・ゼロの能力を獲得したので、水速攻デッキが楽しかったです。昔持っていたカードでもあったので、少年の頃も懐かしいです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/09.B3oeLmIb_1qslrW.webp&quot; srcset=&quot;/_astro/09.B3oeLmIb_Tul1t.webp 640w, /_astro/09.B3oeLmIb_2l9iAj.webp 750w, /_astro/09.B3oeLmIb_Z1bW7ng.webp 828w, /_astro/09.B3oeLmIb_1qslrW.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;現在は、良いデザインのカードが出ないかどうかをチェックするくらいとなりました。そのため、毎日ログインボーナスを受け取るくらいの状態です。&lt;/p&gt;&lt;p&gt;イラスト鑑賞だけが目的としても楽しめますので、良ければ遊んでみて下さい。&lt;/p&gt;&lt;p&gt;「にじさんじ」コラボや「五等分の花嫁」コラボとかを過去にやっています。
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/10.DhdEOJPr_ZE7Yh6.webp&quot; srcset=&quot;/_astro/10.DhdEOJPr_ZGJynn.webp 640w, /_astro/10.DhdEOJPr_Z2k4RmR.webp 750w, /_astro/10.DhdEOJPr_12qrN2.webp 828w, /_astro/10.DhdEOJPr_1AGtK.webp 1080w, /_astro/10.DhdEOJPr_1c0xae.webp 1280w, /_astro/10.DhdEOJPr_ZAPsFe.webp 1668w, /_astro/10.DhdEOJPr_Z1pDTcn.webp 2048w, /_astro/10.DhdEOJPr_ZE7Yh6.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ペンギンの島&lt;a href=&quot;#ペンギンの島&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2019年〜&lt;/p&gt;&lt;p&gt;現在、唯一ちゃんと遊んでいるスマホゲームが「ペンギンの島」です。&lt;/p&gt;&lt;p&gt;ジャンルは街づくり系で、放置していればお金や素材などが溜まっていくので、施設を育てていきながら、デイリーミッションや期間限定ミッションをこなして新しい建物を建設していく流れのゲームになります。&lt;/p&gt;&lt;p&gt;街づくりは基本放置して進めていく形式なので、たまにその島をチェックして、生息しているペンギンの挙動を見て楽しんでいます。&lt;/p&gt;&lt;p&gt;「アデリーペンギン」や「エンペラーペンギン」などの普通のペンギンに加えて、色々と趣向を凝らしたペンギンが追加されていくので、未だに飽きていません。&lt;/p&gt;&lt;p&gt;あまりプレイ時間を拘束しないのが自分のプレイスタイルに合っています。&lt;/p&gt;&lt;p&gt;以下の記事で、「ペンギンの島」に関しては紹介していますので、興味が湧いたらぜひ遊んでみて下さい。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/game-penguinisle-baby-penguins/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[Game] Cute baby penguins in Penguin Isle：（「ペンギンの島」の赤ちゃんペンギンたちを見せるよ）&lt;/div&gt;&lt;div&gt;There are many cute penguins in Penguin Isle. So, I &apos;ll show baby penguins I have. They make me calm down every day.&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211205_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/game-penguinisle-penguinkind/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[Game] Penguinkind in Penguin Isle：（「ペンギンの島」のペンギンを種類で見せるよ）&lt;/div&gt;&lt;div&gt;There are various penguins in the world. Now, I will show part of them that be observable in PenguinIsle.&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211213_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/game-penguinisle-creatures-except-penguin/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[Game] Creatures except penguin in Penguin Isle：（「ペンギンの島」のペンギン以外の生物を見せるよ）&lt;/div&gt;&lt;div&gt;There are many creatures except penguin in PenguinIsle. They make me smiled and been calm down, too.&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211207_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/game-penguinisle-penguins-having-done-with-penguin/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;[Game] Penguins having done with penguinkind in Penguin Isle：（「ペンギンの島」のペンギンを辞めたペンギンたちを見せるよ）&lt;/div&gt;&lt;div&gt;In PenguinIsle, there are some penguins doubtful whether penguin or not. Let me show them.&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211206_Eyecatch.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;前編と後編で合わせて計13本のゲームを紹介しました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;興味があったものはぜひ遊んでみて下さい。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;</content:encoded></item><item><title>【iPhone、Android、ゲーム】僕が今までそれなりにやってきたスマホゲームの思い出を書きます（前編）</title><link>https://endorphinbath.com/posts/memorable-game-smartphone-1/</link><guid isPermaLink="true">https://endorphinbath.com/posts/memorable-game-smartphone-1/</guid><description>僕が過去に遊んで思い出深かったスマホゲーム（iPhone・Android）を紹介します。のコーナーの前編です。パズドラ、Monument Valley、Cytus、ラブライブ、花札MIYABI、Lapse、GROW、7年後で待ってる。</description><pubDate>Sun, 14 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕が過去に遊んだスマホゲームの思い出を語ります。まずは、前半戦です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;前半戦&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ゲームの紹介&lt;a href=&quot;#ゲームの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、ゲームの紹介になります。8本になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;パズル&amp;amp;ドラゴンズ&lt;a href=&quot;#パズルドラゴンズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2013〜2018年くらい&lt;/p&gt;&lt;p&gt;あの言わずとしれたパズドラです。モンストと双璧をなしていたパズドラです。&lt;/p&gt;&lt;p&gt;モンストはやっていませんでしたが、パズドラはやっていました。頭の体操になります。しかし、少し運の要素も絡んでくるのが、個人的に微妙でした。&lt;/p&gt;&lt;p&gt;今のパズドラは果たしてどうなっているのでしょうか？&lt;/p&gt;&lt;p&gt;こんな風にエンシェントドラゴンナイトを使用しているユーザーはもういないのでしょうか？
&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;1136&quot; src=&quot;/_astro/01.CDkZUm5V_2bSQNL.webp&quot; srcset=&quot;/_astro/01.CDkZUm5V_2bSQNL.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな風に列消し赤ソニアを使っている人はもういないのでしょうか？
&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;1136&quot; src=&quot;/_astro/02.MWxGClTo_Z28nnDb.webp&quot; srcset=&quot;/_astro/02.MWxGClTo_Z28nnDb.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;イラストが好みで、遊ぶ頻度が減っても新しいイラストを待つためにログインボーナスは貰っていました。ヤマトタケルのイラストは本当に良かったなあ・・・&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1920&quot; src=&quot;/_astro/03.Bsl0mB8z_18IA45.webp&quot; srcset=&quot;/_astro/03.Bsl0mB8z_Z17pXAw.webp 640w, /_astro/03.Bsl0mB8z_pQ3N0.webp 750w, /_astro/03.Bsl0mB8z_ct2ka.webp 828w, /_astro/03.Bsl0mB8z_18IA45.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;僕がアプリを入れていた頃までは、イラストが動くところまで開発されていましたね。今とか更に新しい要素が追加されていたりするのかな？
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1920&quot; src=&quot;/_astro/04.CNMeSrXN_K0V0G.webp&quot; srcset=&quot;/_astro/04.CNMeSrXN_1NUoTk.webp 640w, /_astro/04.CNMeSrXN_Z1HYGv5.webp 750w, /_astro/04.CNMeSrXN_Z1VmHXU.webp 828w, /_astro/04.CNMeSrXN_K0V0G.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Monument Valley&lt;a href=&quot;#monument-valley&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2013年くらい&lt;/p&gt;&lt;p&gt;ジャンルはパズルです。「無限回廊」的に視点を変えたり、色々なんやかんやして解いていきます。&lt;/p&gt;&lt;p&gt;こちらは僕がプレイしていた頃は、iPhoneのみで遊べるゲームだったんですよね。現在はAndroidでも遊べるみたいですね。2もあるんですね。やってみようかな。&lt;/p&gt;&lt;p&gt;落ち着いた絵とBGMで癒やされながらパズルゲームが出来ます。遊んでみて下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;1024&quot; src=&quot;/_astro/05.CS4clwEd_Z1Srivm.webp&quot; srcset=&quot;/_astro/05.CS4clwEd_Z1Srivm.webp 600w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Cytus&lt;a href=&quot;#cytus&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2013年〜&lt;/p&gt;&lt;p&gt;たまにやっているゲームです。ジャンルはリズムゲームです。&lt;/p&gt;&lt;p&gt;リズムゲームとしても面白いし、何よりゲームの中の映像というか絵のデザインが素晴らしい！&lt;/p&gt;&lt;p&gt;このクオリティのものがiPhone5の頃からあったのかと思うと、凄まじいものがあります。&lt;/p&gt;&lt;p&gt;Cytus IIもありますが、個人的には初代Cytusの世界観のほうが好きです。&lt;/p&gt;&lt;p&gt;Cytusは、終末世界・ディストピア的な美しさという感じがありますが、Cytus IIは、もう少しカジュアルなサブカルチャー的な世界観となっていて、サイバーパンクっぽい感じです。Cytusは、Detroit: Become humanっぽいです。
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/06.PiAd6-jY_294X05.webp&quot; srcset=&quot;/_astro/06.PiAd6-jY_2aRYRK.webp 640w, /_astro/06.PiAd6-jY_xxFSg.webp 750w, /_astro/06.PiAd6-jY_Z1a87JL.webp 828w, /_astro/06.PiAd6-jY_Z2fnu30.webp 1080w, /_astro/06.PiAd6-jY_Z14XDmw.webp 1280w, /_astro/06.PiAd6-jY_2cmtAW.webp 1668w, /_astro/06.PiAd6-jY_1ny34N.webp 2048w, /_astro/06.PiAd6-jY_294X05.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ラブライブ&lt;a href=&quot;#ラブライブ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2014〜2015年くらい&lt;/p&gt;&lt;p&gt;マーメイド真姫ちゃん、永遠に・・・&lt;/p&gt;&lt;p&gt;ラブライブはリズムゲームです。アニメも4作品くらい出ていますね。&lt;/p&gt;&lt;p&gt;アニメ見たく9人でチーム編成を組んで、ライブします
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/07.CJV9_b-N_1XgSqa.webp&quot; srcset=&quot;/_astro/07.CJV9_b-N_Z1xIyVd.webp 640w, /_astro/07.CJV9_b-N_19WqQz.webp 750w, /_astro/07.CJV9_b-N_1XTpd0.webp 828w, /_astro/07.CJV9_b-N_1DSIgS.webp 1080w, /_astro/07.CJV9_b-N_Z2r7UAt.webp 1280w, /_astro/07.CJV9_b-N_ZJMsXk.webp 1668w, /_astro/07.CJV9_b-N_1XgSqa.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;確か、僕が最初に取り組んだリズムゲームだと思います。学生の頃、講義中に勤しんでいました。&lt;/p&gt;&lt;p&gt;難易度はCytusほど高いわけではないですが、Beat in AngelのExpertが個人的には印象的です。あれをやると眠気が飛びます。&lt;/p&gt;&lt;p&gt;しかし、１番の思い出は、ガチャで100万分の1の確率を引き当てたことです。（いや、もっと低いかもしれない。）&lt;/p&gt;&lt;p&gt;このときに引いたガチャの出来事です。
&lt;img loading=&quot;lazy&quot; width=&quot;449&quot; height=&quot;464&quot; src=&quot;/_astro/08.BgrY88Yu_1bdUs6.webp&quot; srcset=&quot;/_astro/08.BgrY88Yu_1bdUs6.webp 449w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ガチャでは、0.1%の確率でURなるものが入手できます。&lt;/p&gt;&lt;p&gt;そして、あろうことか僕は1度の11連ガチャでURを2枚引いてしまったのです・・・&lt;/p&gt;&lt;p&gt;さ〜ら〜に！&lt;/p&gt;&lt;p&gt;そのURのカードは両方とも同じカードだったのです！！！&lt;/p&gt;&lt;p&gt;そのURのカードを合成して、育てた状態がこちらのカードです。
&lt;img loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;/_astro/09.BO0Ci4t__Z1x6e7b.webp&quot; srcset=&quot;/_astro/09.BO0Ci4t__Z1EDpkT.webp 640w, /_astro/09.BO0Ci4t__132ArS.webp 750w, /_astro/09.BO0Ci4t__1QYyNj.webp 828w, /_astro/09.BO0Ci4t__Z1Qtogs.webp 1080w, /_astro/09.BO0Ci4t__ZRiTjS.webp 1280w, /_astro/09.BO0Ci4t__O1xig.webp 1668w, /_astro/09.BO0Ci4t__Z1x6e7b.webp 1920w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ああ、懐かしい・・・&lt;/p&gt;&lt;p&gt;こんな偶然もあるかもしれないので、良ければ遊んでみて下さい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;花札MIYABI&lt;a href=&quot;#花札miyabi&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2014年くらい&lt;/p&gt;&lt;p&gt;花札で主にこいこい形式でCPUとバトルするゲームになります。ゲームのデザインが個人的にイケていると思っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/10.ByPaB5rn_Z1lsHqk.webp&quot; srcset=&quot;/_astro/10.ByPaB5rn_1t2vRo.webp 640w, /_astro/10.ByPaB5rn_Z2auEmH.webp 750w, /_astro/10.ByPaB5rn_ZCoVwl.webp 828w, /_astro/10.ByPaB5rn_Z1lsHqk.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;大きい役で勝つほど、レアなアイテムをゲットできます。僕が手に入れたSRアイテムの1つはこんな感じです。良ければ遊んでみて下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/11.C-neG1Qc_5gL5x.webp&quot; srcset=&quot;/_astro/11.C-neG1Qc_1vRbb8.webp 640w, /_astro/11.C-neG1Qc_Z27F03X.webp 750w, /_astro/11.C-neG1Qc_ZzzhdB.webp 828w, /_astro/11.C-neG1Qc_5gL5x.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Lapse: A Forgotten Future (忘れられた未来)&lt;a href=&quot;#lapse-a-forgotten-future-忘れられた未来&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：20年くらい&lt;/p&gt;&lt;p&gt;ジャンルは、ノベル型のアドベンチャー系になります。&lt;/p&gt;&lt;p&gt;4つの要素のバランスを取りながら、物語を進めていく内容になっています。物語の手がかりが徐々に判明していきます。&lt;/p&gt;&lt;p&gt;1周だけしましたが、どうなんですかね？&lt;/p&gt;&lt;p&gt;おそらく、シナリオの過程は1つだけではないと思います。なので、奥が深いアドベンチャーゲームになっていると思います。1周だけでも十分面白かったです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1713&quot; src=&quot;/_astro/12.CpuNPr8a_Z1OEy2.webp&quot; srcset=&quot;/_astro/12.CpuNPr8a_Z1QnOx.webp 640w, /_astro/12.CpuNPr8a_ZfrkEV.webp 750w, /_astro/12.CpuNPr8a_1pYvGz.webp 828w, /_astro/12.CpuNPr8a_Z1OEy2.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;GROWシリーズ&lt;a href=&quot;#growシリーズ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：20年くらい&lt;/p&gt;&lt;p&gt;EYEZMAZEさんのサイトで昔からあったゲーム「GROW」シリーズがスマホ向けに移植されたものです。少年期によく遊んでたなあ。「GROW Planet」が無いのがスマホ向けにはないのが少し残念。&lt;/p&gt;&lt;a href=&quot;https://www.eyezmaze.com/sp/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.eyezmaze.com/img/icon/eye.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;www.eyezmaze.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;EYEZMAZE&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;www.eyezmaze.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.eyezmaze.com/img/menu/game_icon/logo_80-80.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;「GROW」シリーズは、ジャンルとしてはパズルゲームです。&lt;/p&gt;&lt;p&gt;何個かパネルが表示されて、そのパネルを押す順番でゲームの進捗が変わります。&lt;/p&gt;&lt;p&gt;そして、どの順番で押せば全てのパネルがLv.Maxになるかどうかを考えながら、パネルの押す順番を解いていく流れです。&lt;/p&gt;&lt;p&gt;順番が合っていたときの怒涛のレベルアップは爽快で中毒性があるので、まだやったことがない方は試しに遊んでみて下さい。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2280&quot; src=&quot;/_astro/13.CQrKZyo8_Z1QDAgq.webp&quot; srcset=&quot;/_astro/13.CQrKZyo8_Z1a45SH.webp 640w, /_astro/13.CQrKZyo8_gzQF8.webp 750w, /_astro/13.CQrKZyo8_1NFzvu.webp 828w, /_astro/13.CQrKZyo8_Z1QDAgq.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7年後で待ってる&lt;a href=&quot;#7年後で待ってる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ハマっていた時期：2019年くらい&lt;/p&gt;&lt;p&gt;ふと取り組んでみたゲームです。&lt;/p&gt;&lt;p&gt;ジャンルはアドベンチャーゲームと言ったところでしょうか。ロックマンエグゼ的な感じでキャラクターを移動させながら、物語を進めていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/14.Lnx3gljc_12CGE.webp&quot; srcset=&quot;/_astro/14.Lnx3gljc_Z1ErSx5.webp 640w, /_astro/14.Lnx3gljc_1MoVhm.webp 750w, /_astro/14.Lnx3gljc_4I7Dk.webp 828w, /_astro/14.Lnx3gljc_GLjsv.webp 1080w, /_astro/14.Lnx3gljc_1Rba8Y.webp 1280w, /_astro/14.Lnx3gljc_4k9iw.webp 1668w, /_astro/14.Lnx3gljc_ZJthdC.webp 2048w, /_astro/14.Lnx3gljc_12CGE.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;サブストーリーなど物語をすべて見るためには課金が必要ですが、束の間の非日常を楽しめる作品になっていると思います。泣く方もいらっしゃるのではないでしょうか？
&lt;img loading=&quot;lazy&quot; width=&quot;2280&quot; height=&quot;1080&quot; src=&quot;/_astro/15.CJnVmGP__Z1WrJph.webp&quot; srcset=&quot;/_astro/15.CJnVmGP__Z5h5dg.webp 640w, /_astro/15.CJnVmGP__Z1HBocK.webp 750w, /_astro/15.CJnVmGP__1DSUX9.webp 828w, /_astro/15.CJnVmGP__Z1gI3Dq.webp 1080w, /_astro/15.CJnVmGP__Z6jcWW.webp 1280w, /_astro/15.CJnVmGP__Z1TadNp.webp 1668w, /_astro/15.CJnVmGP__2mdttn.webp 2048w, /_astro/15.CJnVmGP__Z1WrJph.webp 2280w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;つづく&lt;a href=&quot;#つづく&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それじゃあ、後半戦もお楽しみにい！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;So long!&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ゲーム】「ペンギンの島」っていうゲームを始めてかれこれ2年以上経ってるから語るわ</title><link>https://endorphinbath.com/posts/penguinisle-telling-charm/</link><guid isPermaLink="true">https://endorphinbath.com/posts/penguinisle-telling-charm/</guid><description>ペンギンの島っていうスマホのゲームに関して紹介します。いわゆる放置ゲーなので、あまり時間を取らずにゲーム内の島の成長と様々なペンギンの挙動を観察することが出来るゲームです。癒やされたい方にオススメのゲームです。</description><pubDate>Sat, 13 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;君はペンギンの島というゲームを知っているかな？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;えっ？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ペンギンの島とは&lt;a href=&quot;#ペンギンの島とは&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このゲームは、ペンギン（とその他諸々の寒冷地に生息している生物たち）が住んでいる島を発展させていきます。&lt;/p&gt;&lt;p&gt;そして、島の中の様々なスポットで、バリエーション豊かな生物が織り成す世界に癒やされる、育成シミュレーションゲームです。
&lt;img loading=&quot;lazy&quot; width=&quot;2068&quot; height=&quot;980&quot; src=&quot;/_astro/01.okjf2Vq5_1ukWlG.webp&quot; srcset=&quot;/_astro/01.okjf2Vq5_2cURMs.webp 640w, /_astro/01.okjf2Vq5_Zone9E.webp 750w, /_astro/01.okjf2Vq5_2gQivG.webp 828w, /_astro/01.okjf2Vq5_1lPVPD.webp 1080w, /_astro/01.okjf2Vq5_Z5YbPI.webp 1280w, /_astro/01.okjf2Vq5_a1QRA.webp 1668w, /_astro/01.okjf2Vq5_1sbU7B.webp 2048w, /_astro/01.okjf2Vq5_1ukWlG.webp 2068w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;どうやって育てていくの？&lt;a href=&quot;#どうやって育てていくの&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;コインとハートを集めて、それらを元に施設をレベルアップおよび数を増やしたり、コインの生産効率を高めたり、島を大きくしていきます。&lt;/p&gt;&lt;p&gt;ハートはペンギンから入手できるのですが、途中からハートが自動生産できる施設を建設できたりします。&lt;/p&gt;&lt;p&gt;そのコインやハートは、基本的には施設とペンギンたちから入手するのですが、広告を見ると宝箱やギフトボックスからも入手できます。&lt;/p&gt;&lt;p&gt;「え、広告見なきゃいけないのー？」と思うかもしれませんが、30秒〜1分間だけ広告を流している間はスマホを放置して別のことをすれば、特に広告は気にならないかと思います。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;長時間放置すると・・・&lt;a href=&quot;#長時間放置すると&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;そして、長時間ペンギンの島を放置して、再びペンギンの島を起動すると、宝箱やギフトボックスと同じ感じで砂時計が出現して、それをタップすると放置した時間分だけコインとハートが手に入るのですが、ここで広告を閲覧するとそのコインとハートが２倍手に入るのです！ こうして効率的にペンギンの島を成長させていきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2068&quot; height=&quot;980&quot; src=&quot;/_astro/02.DmTkl-5S_1TSpMf.webp&quot; srcset=&quot;/_astro/02.DmTkl-5S_14Hpau.webp 640w, /_astro/02.DmTkl-5S_Z1wAGLC.webp 750w, /_astro/02.DmTkl-5S_18COSI.webp 828w, /_astro/02.DmTkl-5S_1Lophc.webp 1080w, /_astro/02.DmTkl-5S_jygzP.webp 1280w, /_astro/02.DmTkl-5S_zzkj9.webp 1668w, /_astro/02.DmTkl-5S_1RJnya.webp 2048w, /_astro/02.DmTkl-5S_1TSpMf.webp 2068w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみに僕は現時点で、1170分放置してもコインとハートが貯まるので、1日弱放置してもオイシイことになる感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1139&quot; src=&quot;/_astro/03.CSZd8SLF_2ttjlJ.webp&quot; srcset=&quot;/_astro/03.CSZd8SLF_1SjG1X.webp 640w, /_astro/03.CSZd8SLF_ZF6LRO.webp 750w, /_astro/03.CSZd8SLF_1PIIpj.webp 828w, /_astro/03.CSZd8SLF_2ttjlJ.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ペンギンがかわいい&lt;a href=&quot;#ペンギンがかわいい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なんと言っても、この愛くるしいペンギンを見るために、このゲームをやっています。&lt;/p&gt;&lt;p&gt;ペンギンというやつは、両手を広げないと走れない生き物なのです・・・（笑）
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1076&quot; src=&quot;/_astro/04.CnXrjIbT_Z1xOV2C.webp&quot; srcset=&quot;/_astro/04.CnXrjIbT_Z1Smb5e.webp 640w, /_astro/04.CnXrjIbT_EfCtW.webp 750w, /_astro/04.CnXrjIbT_Z1SOP4H.webp 828w, /_astro/04.CnXrjIbT_Z1xOV2C.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なんなら、この親子は釣りをしています。
&lt;img loading=&quot;lazy&quot; width=&quot;980&quot; height=&quot;1424&quot; src=&quot;/_astro/05.DMDVvlqQ_Z10Eihb.webp&quot; srcset=&quot;/_astro/05.DMDVvlqQ_g7OkU.webp 640w, /_astro/05.DMDVvlqQ_1JS5vV.webp 750w, /_astro/05.DMDVvlqQ_Z1BmrFV.webp 828w, /_astro/05.DMDVvlqQ_Z10Eihb.webp 980w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;気を付けたいところ&lt;a href=&quot;#気を付けたいところ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このゲームで気を付けたいところは２点あります。&lt;/p&gt;&lt;p&gt;まず、１つ目は起動中の充電の減りが速くなることです。&lt;/p&gt;&lt;p&gt;ペンギンの島では、イベント期間中にデイリーミッションが発生するのですが、そのミッションの中にペンギンのハートボーナスを300回発生させるという内容のものがあります。&lt;/p&gt;&lt;p&gt;そのようなミッションを達成するためにペンギンの島をずっと起動していると、いつもより沢山電池を消費してしまいます。その後、何か予定がある場合とかは、ペンギンの島で充電を無くさないようにお気をつけ下さい・・・。（ゲーム中は充電が表示されないのでね・・・）
&lt;img loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;541&quot; src=&quot;/_astro/06.kuJx22Tb_ZW4hQm.webp&quot; srcset=&quot;/_astro/06.kuJx22Tb_Z1vBXyg.webp 640w, /_astro/06.kuJx22Tb_ZW4hQm.webp 719w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、もう一つですが・・・、それは、&lt;/p&gt;&lt;p&gt;ペンギンが可愛すぎるので、ペンギンの島に何十分も何時間も時間を奪われないようにお気をつけ下さい！
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1179&quot; src=&quot;/_astro/07.8b1B4FAX_1kraYY.webp&quot; srcset=&quot;/_astro/07.8b1B4FAX_2eU1FP.webp 640w, /_astro/07.8b1B4FAX_1vbTkB.webp 750w, /_astro/07.8b1B4FAX_Z14JGT5.webp 828w, /_astro/07.8b1B4FAX_1kraYY.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そんなバカな〜。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;その他・・・&lt;a href=&quot;#その他&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なんかスクショが英語だから、もしかして日本語に対応していない？&lt;/p&gt;&lt;p&gt;と、思ったあなた、それは違います。&lt;/p&gt;&lt;p&gt;単純に僕が英語の勉強のために、言語設定を英語にしているだけです。&lt;/p&gt;&lt;p&gt;こちらの通り、言語は14ヶ国語に対応していますので、日本に住んでいれば特に問題ないかと思います。
&lt;img loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1542&quot; src=&quot;/_astro/08.Dg1HgBJm_Z1TWVdP.webp&quot; srcset=&quot;/_astro/08.Dg1HgBJm_Z1IS5X9.webp 640w, /_astro/08.Dg1HgBJm_ZQF4pB.webp 750w, /_astro/08.Dg1HgBJm_1y4FW8.webp 828w, /_astro/08.Dg1HgBJm_Z1TWVdP.webp 1080w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;こんな人におすすめです&lt;a href=&quot;#こんな人におすすめです&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;あんまりガチでやらなくていいけど、仕事とか勉強の片手間に癒やされたいという人にオススメです。&lt;/p&gt;&lt;p&gt;あんまりガチでやらなくても気づいたら、島がものすごく育っていたりします。&lt;/p&gt;&lt;p&gt;課金要素もありますが、課金しなくても十分に楽しめます。自分のペースで島を育てて癒やされましょう！&lt;/p&gt;&lt;div&gt;&lt;img src=&quot;https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/cd/29/9e/cd299e8c-8889-26c7-fa48-0aaffd4e35d8/AppIcon-1x_U007emarketing-0-8-0-85-220-0.png/512x512bb.jpg&quot; alt=&quot;ペンギンの島&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;&lt;p&gt;ペンギンの島&lt;/p&gt;&lt;p&gt;&lt;span&gt;HABBY&lt;/span&gt;&lt;span&gt;無料&lt;/span&gt;&lt;span&gt;posted with&lt;a href=&quot;https://mama-hack.com/app-reach/&quot; target=&quot;_blank&quot;&gt;アプリーチ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://apps.apple.com/jp/app/%25E3%2583%259A%25E3%2583%25B3%25E3%2582%25AE%25E3%2583%25B3%25E3%2581%25AE%25E5%25B3%25B6/id1474314811?uo=4&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-itune-ja.webp&quot; alt=&quot;ペンギンの島 on iTunes&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.fantome.penguinisle&quot;&gt;&lt;img src=&quot;/assets/images/store-icon/store-icon-gplay-ja.webp&quot; alt=&quot;ペンギンの島 on Google Play&quot; loading=&quot;lazy&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とまあ、今回紹介したのがペンギンの島の魅力になります。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いいな・・・、おれもやりたくなってきちまったぜ・・・！&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ワイン】主な5種類の性質について解説。これでワイン道のスタートラインに立てるかも？</title><link>https://endorphinbath.com/posts/wine-5tastes/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wine-5tastes/</guid><description>ワインの味わいには、主に５種類あり、ボリューム、タンニン、甘味、酸味、果実味となります。どういったワインにどの味わいの傾向があるかを知っていると、ワインを飲むのがますます楽しくなるかも？</description><pubDate>Fri, 12 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回はワインを味わうために、基本的な5種類の味を解説するぞ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;趣向を変えてきた&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ワインにどんな香りや味わいがあるかをざっと知ろう。&lt;a href=&quot;#ワインにどんな香りや味わいがあるかをざっと知ろう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、ワインにどんな香りや味わいがあるかを見ていきましょう。&lt;/p&gt;&lt;p&gt;ワインは、大きく大別すると、赤ワインと白ワインがあります。それらの主原料は、赤ブドウ、黒ブドウ、白ブドウとなりますが、他の果実の味や香りもします。&lt;/p&gt;&lt;p&gt;その他には、オレンジワイン、ロゼワイン、パープルワインなど・・・の亜種も存在しますが、一旦、赤ワインと白ワインで比較します。&lt;/p&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;ワイン&lt;/th&gt;&lt;th&gt;感じる果実&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;赤ワイン&lt;/td&gt;&lt;td&gt;赤ブドウ、黒ブドウ、プルーン、カシス、いちご、ブラックチェリー、ブルーベリー、ブラックベリー、クランベリー、レーズン、チョコレート、樽&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;白ワイン&lt;/td&gt;&lt;td&gt;白ブドウ、オレンジ、青りんご、赤りんご、マスカット、ライチ、グレープフルーツ&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;ざっと書いてみましたが、こう見ると白ワインのほうが酸っぱいフルーツやさっぱりしたフルーツが多い感じですね。これから紹介する味の違いで、白ワインと赤ワインの傾向が違ってくる要因の一つがこういう部分だったりします。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;舌がどこで味わってんのかを知ろう。&lt;a href=&quot;#舌がどこで味わってんのかを知ろう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、味をどこで感知してるのかを知る。
ちなみに、おそらく辛さは味覚ではない。辛い＝痛いだから。火傷してる。英語で「辛い」はHotで「熱い」もHotだ。辛いと熱いは同じ。&lt;/p&gt;&lt;p&gt;そして、味っていうのは、諸説あるが大体ここらへんで感覚が別れているっぽい。
&lt;img loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;378&quot; src=&quot;/_astro/01.B3J5qOaL_Z1CS5N2.webp&quot; srcset=&quot;/_astro/01.B3J5qOaL_Z1CS5N2.webp 450w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これから紹介するワインの味は、上記の舌の味覚の分布に当たるように飲むと、より感じやすくなるような気がする。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;甘味&lt;/li&gt;
&lt;li&gt;塩味&lt;/li&gt;
&lt;li&gt;酸味&lt;/li&gt;
&lt;li&gt;苦味&lt;/li&gt;
&lt;li&gt;旨味&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;5種類のワインの性質&lt;a href=&quot;#5種類のワインの性質&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;主なワインの性質というのが以下の５つになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ボリューム&lt;/li&gt;
&lt;li&gt;タンニン&lt;/li&gt;
&lt;li&gt;甘味&lt;/li&gt;
&lt;li&gt;酸味&lt;/li&gt;
&lt;li&gt;果実味&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;1つずつ解説したいと思います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1.　ボリューム&lt;a href=&quot;#1ボリューム&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/02.D1Jfxjf9_Z1gAxPK.webp&quot; srcset=&quot;/_astro/02.D1Jfxjf9_2wR5Li.webp 640w, /_astro/02.D1Jfxjf9_Z10CnB.webp 750w, /_astro/02.D1Jfxjf9_2k8qfl.webp 828w, /_astro/02.D1Jfxjf9_jjypB.webp 1080w, /_astro/02.D1Jfxjf9_Z1gAxPK.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ボリュームは重いか軽いかで評価されます。そして、このボリュームはアルコール度数とも関わってきて、重いワインのほうがアルコール度数が高いワインであることが多いです。&lt;/p&gt;&lt;p&gt;そして、次に記述している「タンニン」が強い場合も、ボリュームが重くなってきたりもします。また、タンニンが強い場合は、赤色が濃い場合が多いため、赤が濃いワインは、ボリュームが重いということにもなります。&lt;/p&gt;&lt;p&gt;まあ、色々述べましたが、ざっくりまとめると以下のような感じになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;重いワイン・・・赤が濃い、渋い、アルコールが強い、味わいが芳醇。&lt;/li&gt;
&lt;li&gt;軽いワイン・・・赤が薄い、渋くない、アルコールが弱い、味わいがまろやか。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.　タンニン&lt;a href=&quot;#2タンニン&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/03.Op2CEnIM_1eEReb.webp&quot; srcset=&quot;/_astro/03.Op2CEnIM_Z19kjAO.webp 640w, /_astro/03.Op2CEnIM_1mY63d.webp 750w, /_astro/03.Op2CEnIM_Z1m3Y7L.webp 828w, /_astro/03.Op2CEnIM_Z2fB9jo.webp 1080w, /_astro/03.Op2CEnIM_1eEReb.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この「タンニン」というやつは、一言で表現するには難しい・・・。&lt;/p&gt;&lt;p&gt;タンニンは、植物由来のポリフェノールの一種を指します。このポリフェノールは赤色をしているため、白ワインよりも赤ワインのほうが一般的にタンニンが強いです。
ワインの渋みは、このタンニンの強さによって引き起こされます。「渋み」というのは、物質にきゅ～っと収縮するような状態にさせる作用があります。そして、「渋み」というのは味ではありません。「辛み」と同じように口の中の細胞に何か物理的な現象が起きて感じる感覚になります。&lt;/p&gt;&lt;p&gt;また、ソムリエとかワインエキスパートの試験だと、タンニンの強さを表現する時に「収斂性のある」という表現を使うそうです。渋みの「きゅ～」は「収斂性のある」現象ということです。&lt;/p&gt;&lt;p&gt;タンニンが強いと、渋みが増す他に、ボリュームが強くもなります。なので、赤ワインのフルボディとなると、大体タンニンが強めで渋めです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.　甘味&lt;a href=&quot;#3甘味&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;960&quot; src=&quot;/_astro/04.BNWJhiq2_Z1CBQAG.webp&quot; srcset=&quot;/_astro/04.BNWJhiq2_zNDdK.webp 640w, /_astro/04.BNWJhiq2_2s5bLz.webp 750w, /_astro/04.BNWJhiq2_1YFddJ.webp 828w, /_astro/04.BNWJhiq2_Z2vSoUR.webp 1080w, /_astro/04.BNWJhiq2_Z1CBQAG.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、甘味は、甘い（Sweet）か辛い（Dry）かどうかで評価されます。だいたいのワインは辛いものになり、その辛いワインというのはDryなものになります。（ビールも辛口なものはDryなので、ビールとかの考え方と同じ感じだと思います。）&lt;/p&gt;&lt;p&gt;甘味は、果汁によって強くなります。そして、ワインに含まれる酵母によって、その果汁の糖分がアルコールと二酸化炭素に変化すると辛くなるので、その酵母が少ないワインは、甘くなりがちといった感じです。&lt;/p&gt;&lt;p&gt;スパークリングワインとかは甘め、白ワインになるとそれよりも辛口というのが大観で、甘さが際立った赤ワインは飲んだことがないですね・・・。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.　酸味&lt;a href=&quot;#4酸味&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;853&quot; src=&quot;/_astro/05.CgXByiuB_2pqP0r.webp&quot; srcset=&quot;/_astro/05.CgXByiuB_1P5Wfl.webp 640w, /_astro/05.CgXByiuB_ZHLKTy.webp 750w, /_astro/05.CgXByiuB_1CmhIo.webp 828w, /_astro/05.CgXByiuB_Z14Pbx8.webp 1080w, /_astro/05.CgXByiuB_2pqP0r.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;酸味は、まろやかかシャープかどうかで評価されます。シャープなもののほうが、スッキリした味わいになりがちです。先程の甘味を出しつつスッキリした味わいとする場合には、甘味も酸味も出せる醸造方法になってくるでしょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.　果実味&lt;a href=&quot;#5果実味&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;480&quot; src=&quot;/_astro/06.CEQeDaYz_ZyMgxK.webp&quot; srcset=&quot;/_astro/06.CEQeDaYz_ZyMgxK.webp 640w&quot; /&gt;&lt;/p&gt;&lt;p&gt;果実味は、強いとフルーティ、弱いとスパイシーなんて表現がされがちです。&lt;/p&gt;&lt;p&gt;スパイシーなんて聞くと、「甘味とは違うのか？」と思われたりもすると思います。
はい、そこは少し違っていて、例えば、甘味はdryだけど果実味としてはフルーティな場合になります。具体的な果物で言うと・・・、ブラックチェリーとか食べるとあまり甘くないと思いませんか？　ブラックチェリーはワインの原料として使われがちなので、ブラックチェリーが強いパターンなどがあるかと思います。&lt;/p&gt;&lt;p&gt;白ワインの方が、酸味のあるフルーツが用いられがちなので、フルーティだけど甘くはないというワインが多いかもしれませんね。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ワインが「開いた」ときの性質の変化&lt;a href=&quot;#ワインが開いたときの性質の変化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ワインっていうのはボトルを空けたりして、どれくらい酸素に触れたかどうかで、かなり味が変化します。その状態を「開いた」と言ったりします。&lt;/p&gt;&lt;p&gt;そのワインが「開いた」時には一般的に言うと「イイ感じ」の味になることが多いです。しかし、開かない味の方が良いと思う場合もあるだろうし、それは個人で分かれると思います。しかしまあ、だいたいワインを注ぐ時は、「エアレーション」つってなるべく空気に触れるようにグラスに注ぎがちなのだ。「エアレーター」っていうエアレーションするための道具があるぐらいだし。&lt;/p&gt;&lt;p&gt;しかし、空気に触れさせすぎると、ワインは「開きすぎた状態」になって、かなり風味がキツイものになってしまいます・・・。
そこで、ボトルを開けてからの味の変化を以下のグラフにしてみました。僕が今までワインを飲んできた経験から、だいたいこんな風に味が変化しますっていうのを描きました。
&lt;img loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;231&quot; src=&quot;/_astro/07.dMN1LZoE_whaXU.webp&quot; srcset=&quot;/_astro/07.dMN1LZoE_whaXU.webp 457w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ざっくりグラフを説明すると、ボトルから開けた直後の「閉じた状態」と比較して、10～15分くらい経った「開いた状態」では、酸味と果実味が強くなる。
しかし、約30分以上経過してしまった「開きすぎた状態」では、果実味は弱くなっちゃったのに、酸味は相変わらず強くなってなんだか渋みも相対的に強くなっている状態なので、一般的には飲めたもんじゃないワインになってしまいます。&lt;/p&gt;&lt;p&gt;そのため、開けたらその日の内に飲みきらないと、きつい味になってしまいます・・・。
なので、僕はワインを保存するために、まだアンチ・オックスくらいしか使っていませんが、それでも次の日のワインはキツかったです・・・。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ワインの味に関しては、こんなもんですかね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず、店員が持ってきたワインは、テーブルに置かれた瞬間に一気飲みすればいいってことが分かったよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いや、違います。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Cocoon、Wordpress】Cocoonでダークテーマとライトテーマで配色を使い分ける方法をメモ書いておく</title><link>https://endorphinbath.com/posts/cocoon-darklighttheme/</link><guid isPermaLink="true">https://endorphinbath.com/posts/cocoon-darklighttheme/</guid><description>WordpressのCocoonテーマ上でダークテーマとライトテーマの設定する方法をまとめました。設定方法は簡単ですが、配色を選ぶ作業で時間が掛かるかもしれません。早い内にサイト上で設定することでその後のデザイン変更が容易になると思います。</description><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・このブログをダークテーマにも対応するようにしたいと思う。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よろしくね&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;設定方法&lt;a href=&quot;#設定方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. headタグにmetaタグを追加する。&lt;a href=&quot;#1-headタグにmetaタグを追加する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、以下のmetaタグをheadタグの中に追加する必要があります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;color-scheme&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;light dark&quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;Cocoonでは、style.cssみたいにhtmlのエディターがあるわけではありませんが、metaタグを入れる際には、Cocoon設定の「アクセス解析・認証」タブ内で追加できます。「ヘッド用コード」に書きたいmetaタグを書けばそれが追加されます。「ヘッダー用コード」じゃないから注意！
&lt;img loading=&quot;lazy&quot; width=&quot;2109&quot; height=&quot;856&quot; src=&quot;/_astro/01.Bdlc7Ahs_Z1iNsIy.webp&quot; srcset=&quot;/_astro/01.Bdlc7Ahs_75lk2.webp 640w, /_astro/01.Bdlc7Ahs_1pAyeS.webp 750w, /_astro/01.Bdlc7Ahs_Z1jjqWw.webp 828w, /_astro/01.Bdlc7Ahs_4KVM6.webp 1080w, /_astro/01.Bdlc7Ahs_1aSoPV.webp 1280w, /_astro/01.Bdlc7Ahs_1ybWhN.webp 1668w, /_astro/01.Bdlc7Ahs_nOJO9.webp 2048w, /_astro/01.Bdlc7Ahs_Z1iNsIy.webp 2109w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それで、追加した後はページのソースコードにこんな記述があればOK。
&lt;img loading=&quot;lazy&quot; width=&quot;966&quot; height=&quot;432&quot; src=&quot;/_astro/02.B6HFsH4X_Z9fviv.webp&quot; srcset=&quot;/_astro/02.B6HFsH4X_ZzmFEQ.webp 640w, /_astro/02.B6HFsH4X_FRoEl.webp 750w, /_astro/02.B6HFsH4X_Z1naKUa.webp 828w, /_astro/02.B6HFsH4X_Z9fviv.webp 966w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. CSSを書く。&lt;a href=&quot;#2-cssを書く&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;それで、次にCSSを書けば反映されます。テーマエディターで書くコードは以下の感じ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt;(prefers-color-scheme: dark){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* ダークテーマのときのスタイル */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@media&lt;/span&gt;&lt;span&gt;(prefers-color-scheme: light){&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;/* ライトテーマのときのスタイル */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;それを保存すれば終わりです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;設定方法は想像以上にかなり簡単だね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕のアバターもダーク基調に反転した方が良いだろうか？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだねぇ、悪くないかもねえ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;変えても悪くないぞ、殺風景モブメガネ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うるせえ。お前の色反転させんぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_004.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なぁあああああああああああああ！！！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;</content:encoded></item><item><title>【Chrome】僕が唯一利用している拡張機能「Video Speed Controller」</title><link>https://endorphinbath.com/posts/chrome-ext-vsc/</link><guid isPermaLink="true">https://endorphinbath.com/posts/chrome-ext-vsc/</guid><description>僕がGoogle Chromeで唯一使っている拡張機能の「Video Speed Controller」の設定画面の詳細と画面での使い方を説明します。YouTubeとかでマウスを使って倍速設定するのがめんどくさかったら是非使ってみて下さい！</description><pubDate>Wed, 10 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回は僕がGoogle Chromeで唯一バリバリ使っている拡張機能の「Video Speed Controller」というものを紹介するよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おう&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;入手から設定までの流れ&lt;a href=&quot;#入手から設定までの流れ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、Chromeウェブストアで「Video Speed Controller」を検索します。すると、この拡張機能のページに飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;2143&quot; height=&quot;1236&quot; src=&quot;/_astro/01.BK3SyWG__Z2uwwn6.webp&quot; srcset=&quot;/_astro/01.BK3SyWG__1SHTPV.webp 640w, /_astro/01.BK3SyWG__22LU0E.webp 750w, /_astro/01.BK3SyWG__jyLsk.webp 828w, /_astro/01.BK3SyWG__c77VW.webp 1080w, /_astro/01.BK3SyWG__1MfnmB.webp 1280w, /_astro/01.BK3SyWG__1R18nR.webp 1668w, /_astro/01.BK3SyWG__RcFl3.webp 2048w, /_astro/01.BK3SyWG__Z2uwwn6.webp 2143w&quot; /&gt;&lt;/p&gt;&lt;p&gt;それで、Chromeにインストールできると、以下の設定画面に飛べます。
&lt;img loading=&quot;lazy&quot; width=&quot;1763&quot; height=&quot;1207&quot; src=&quot;/_astro/02.uCNFxTUb_1wVGO0.webp&quot; srcset=&quot;/_astro/02.uCNFxTUb_Z12oV3X.webp 640w, /_astro/02.uCNFxTUb_ZUsewq.webp 750w, /_astro/02.uCNFxTUb_2owx5z.webp 828w, /_astro/02.uCNFxTUb_Z1acekK.webp 1080w, /_astro/02.uCNFxTUb_6tAMq.webp 1280w, /_astro/02.uCNFxTUb_Z1EW6py.webp 1668w, /_astro/02.uCNFxTUb_1wVGO0.webp 1763w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、ショートカットキーを設定できる設定項目の説明です。（画像に写ってない機能も書きます。）&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Show/hide controller：左上に映るコントローラの表示/非表示を切り替える。&lt;/li&gt;
&lt;li&gt;Decrease speed：◯倍速遅くします。&lt;/li&gt;
&lt;li&gt;Increase speed：◯倍速くします。&lt;/li&gt;
&lt;li&gt;Rewind：◯秒戻します。&lt;/li&gt;
&lt;li&gt;Advance：◯秒送ります。&lt;/li&gt;
&lt;li&gt;Reset speed：等倍にします。&lt;/li&gt;
&lt;li&gt;Preffered speed：設定したスピードにします。&lt;/li&gt;
&lt;li&gt;Mute：ミュートにします。&lt;/li&gt;
&lt;li&gt;Pause：一時停止します。&lt;/li&gt;
&lt;li&gt;Set marker：マーカーを置きます。&lt;/li&gt;
&lt;li&gt;Jump to marker：マーカーを置いたところに飛びます。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;次に、その他の機能の説明です。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Enable：Video Speed Controllerを使うかどうか。&lt;/li&gt;
&lt;li&gt;Hide controller by default：動画を開いた時にデフォルトで非表示にします。これがONでもショートカットキーで表示できます。&lt;/li&gt;
&lt;li&gt;Remember playback speed：次に動画を開いた時に最近の倍速で再生されます。例えば、2.00倍で動画を見ている時に別の動画を開くと2.00倍で再生され始めます。&lt;/li&gt;
&lt;li&gt;Force last saved speed：再生速度を「Video Speed Controller」でしか設定できなくします。（でも、Pauseは動かなかった・・・。まあ、スペースキーで十分ですが。）&lt;/li&gt;
&lt;li&gt;Work on audio：音楽でも速度調節できるようにします。&lt;/li&gt;
&lt;li&gt;Controller opacity：左上のコントローラの透明度を設定します。&lt;/li&gt;
&lt;li&gt;Sites on which extension is disabled：設定したサイトでは機能しなくします。正規表現でも記述できるっぽいですね。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;では、使ってみよう！&lt;a href=&quot;#では使ってみよう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;それでは、設定もしたことなので、Video Speed Controllerを使ってみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1544&quot; height=&quot;908&quot; src=&quot;/_astro/03.gE15M1yA_10w2SP.webp&quot; srcset=&quot;/_astro/03.gE15M1yA_KMNmu.webp 640w, /_astro/03.gE15M1yA_ZnWN4S.webp 750w, /_astro/03.gE15M1yA_2cfm5m.webp 828w, /_astro/03.gE15M1yA_1s97qP.webp 1080w, /_astro/03.gE15M1yA_Z5nwfc.webp 1280w, /_astro/03.gE15M1yA_10w2SP.webp 1544w&quot; /&gt;&lt;/p&gt;&lt;p&gt;動画を開くと、左上にいますね！&lt;/p&gt;&lt;p&gt;一応マウスでも再生速度を操作できて、&lt;/p&gt;&lt;p&gt;左から、◯秒戻し、◯倍速遅く、◯倍速く、◯秒送り、非表示にする。といった感じです。&lt;/p&gt;&lt;p&gt;僕は、0.25倍ずつ速くする設定なので、4回押せば2倍速になります。例えば、YouTubeの場合、いちいちマウスで右下で倍速設定するのがめんどくさいなと思ったら、ぜひ使ってみて下さい！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうじゃ。ぜひ使ってみてくれ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そだね。キーボード押すだけで動画を速くできるのは便利かも。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;少し昔話をすると、Amazonプライムビデオにまだ倍速機能がなかったとき、僕は海外ドラマの24を全10シーズン見ていたんだけど、その時は3倍速で見ていました。この拡張機能がなかったら、3倍時間が掛かっていたって考えるとゾッとするね。1シーズン24時間あるから240時間、つまり160時間の時短になりました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_026.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;人生は効率が全てじゃないよ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;</content:encoded></item><item><title>【Excel、Google Spreadsheet】色々な貼り付け方の紹介13個</title><link>https://endorphinbath.com/posts/excel-paste-method/</link><guid isPermaLink="true">https://endorphinbath.com/posts/excel-paste-method/</guid><description>ExcelもしくはGoogle Spreadsheetで利用できる貼り付け機能を紹介します。値で貼り付けやテキストファイルウィザードを使う貼り付けなどを少し深掘った後は、ExcelとGoogleスプレッドシートの貼り付け機能の比較もします。</description><pubDate>Mon, 08 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回も僕が使っていたExcelでの貼り付け方の機能の紹介をするぜい。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よろしく～。現役SIerさ～ん。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;くっ・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;貼り付け方の紹介&lt;a href=&quot;#貼り付け方の紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 普通に貼り付け&lt;a href=&quot;#1-普通に貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは、一般的に、コピペ（Ctrl + C、Ctrl + V）で貼り付けるオーソドックスな貼り付けです。値も書式もそのままコピー元のセルに貼り付けます。&lt;/p&gt;&lt;p&gt;Google Spreadsheetでも、普通にコピペ（Ctrl + C、Ctrl + V）で貼り付けるのと同じことになります。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 値で貼り付け&lt;a href=&quot;#2-値で貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;書式は貼り付けたくないっていう時は、値だけを貼り付けることが出来ます。&lt;/p&gt;&lt;p&gt;貼り付け先のセルを右クリックして、下記の画像のアイコンをクリックすると、値貼り付けが出来ます。&lt;/p&gt;&lt;p&gt;ブラウザでコピーした内容を貼り付けるときに重宝しています。Google Spreadsheetでは、（Ctrl + C、&lt;strong&gt;Shift&lt;/strong&gt; + Ctrl + V）で値貼り付けが出来ます。右クリックからも出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1082&quot; height=&quot;312&quot; src=&quot;/_astro/01.CMlmcnbI_XYh3q.webp&quot; srcset=&quot;/_astro/01.CMlmcnbI_Z1ftbdp.webp 640w, /_astro/01.CMlmcnbI_ZKUuro.webp 750w, /_astro/01.CMlmcnbI_Z1wGSla.webp 828w, /_astro/01.CMlmcnbI_Z1yaSf8.webp 1080w, /_astro/01.CMlmcnbI_XYh3q.webp 1082w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 書式で貼り付け&lt;a href=&quot;#3-書式で貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;逆に、値じゃなくて書式だけを貼り付けたいというときに使用する機能です。&lt;/p&gt;&lt;p&gt;下記の画像の通りにクリックします。Google Spreadsheetでは、（Ctrl + C、&lt;strong&gt;Alt&lt;/strong&gt; + Ctrl + V）で書式貼り付けが出来ます。右クリックからも出来ます。
&lt;img loading=&quot;lazy&quot; width=&quot;1083&quot; height=&quot;249&quot; src=&quot;/_astro/02.BpRxmrR6_Z2hgEk9.webp&quot; srcset=&quot;/_astro/02.BpRxmrR6_Z27vuvm.webp 640w, /_astro/02.BpRxmrR6_ZHw1l6.webp 750w, /_astro/02.BpRxmrR6_1nO5HH.webp 828w, /_astro/02.BpRxmrR6_fGeYx.webp 1080w, /_astro/02.BpRxmrR6_Z2hgEk9.webp 1083w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. 行と列を入れ替えて貼り付け&lt;a href=&quot;#4-行と列を入れ替えて貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;行で横並びに並んでいるセルを、列で縦並びに貼り付けたいなあという時に活用する機能です。&lt;/p&gt;&lt;p&gt;例えば、横に並んでいるセルの中に、値が長いセルがある場合は、縦並びになるように貼り付けたほうが表として見やすくなる場合があるので、この機能で試してみて下さい。&lt;/p&gt;&lt;p&gt;Google Spreadsheetでは、右クリックして、「特殊貼り付け」→「転置して貼り付け」で同様の操作が行なえます。
&lt;img loading=&quot;lazy&quot; width=&quot;1139&quot; height=&quot;327&quot; src=&quot;/_astro/03.vMdIATvq_1sDjMB.webp&quot; srcset=&quot;/_astro/03.vMdIATvq_7QBNw.webp 640w, /_astro/03.vMdIATvq_Bpizx.webp 750w, /_astro/03.vMdIATvq_Z9m5je.webp 828w, /_astro/03.vMdIATvq_BMRbm.webp 1080w, /_astro/03.vMdIATvq_1sDjMB.webp 1139w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 1つ上のセルを貼り付ける&lt;a href=&quot;#5-1つ上のセルを貼り付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これはまた、特殊な貼り付け方で、現在選択しているセルの1つ上のセルを普通に貼り付けます。ショートカットキーは、（Ctrl + D）になります。&lt;/p&gt;&lt;p&gt;さらに、貼り付けたい内容が1番上になるようにセルを複数選択すると、選ばれたセルが全て一番上の内容でペーストされます。
Googleスプレッドシートでも、同様のショートカットキーで同様のことが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. 1つ左のセルを貼り付ける&lt;a href=&quot;#6-1つ左のセルを貼り付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これは先程の横バージョンで、現在選択しているセルの1つ左のセルを普通に貼り付けます。ショートカットキーは、（Ctrl + R）になります。&lt;/p&gt;&lt;p&gt;さらに、貼り付けたい内容が1番左になるようにセルを複数選択すると、選ばれたセルが全て一番左の内容でペーストされます。
Googleスプレッドシートでも、同様のショートカットキーで同様のことが出来ます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7. 区切り文字を含んだ貼り付け（テキストファイルウィザードを使う。）&lt;a href=&quot;#7-区切り文字を含んだ貼り付けテキストファイルウィザードを使う&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このテキストファイルウィザード機能は、CSVなどのファイルを出力して、それをExcelで閲覧とか編集したい時に利用していました。
これとは別に、一緒に仕事をする方々で、Excelの「データ」タブ内の「テキストまたはCSVから」という機能を使っている方が結構多かったのですが、ぶっちゃけこの機能で事足りて簡単だと思います。&lt;/p&gt;&lt;p&gt;なので、こちらは割愛して、テキストファイルウィザードで貼り付ける方法を紹介します。&lt;/p&gt;&lt;p&gt;そして、Google Spreadsheetでは、別の方法で同様の貼り付け方が出来ますので、そちらも紹介します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Excel（テキストファイルウィザード）&lt;a href=&quot;#excelテキストファイルウィザード&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、区切り文字が入っている文字列をコピーします。
&lt;img loading=&quot;lazy&quot; width=&quot;806&quot; height=&quot;313&quot; src=&quot;/_astro/04.CbAvLy5b_Z1QsYE8.webp&quot; srcset=&quot;/_astro/04.CbAvLy5b_Z28rvjY.webp 640w, /_astro/04.CbAvLy5b_ZdtSI.webp 750w, /_astro/04.CbAvLy5b_Z1QsYE8.webp 806w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、Excelの「ホーム」から「貼り付け」「テキスト ファイルウィザードを使用」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;286&quot; src=&quot;/_astro/05.Bja16vjc_oeV2q.webp&quot; srcset=&quot;/_astro/05.Bja16vjc_1M7n4Q.webp 640w, /_astro/05.Bja16vjc_oeV2q.webp 740w&quot; /&gt;&lt;/p&gt;&lt;p&gt;テキストファイルウィザードのウィンドウが表示されます。文字コードはプルダウンで選択できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1318&quot; height=&quot;671&quot; src=&quot;/_astro/06.Ce0Bi_3S_fltOi.webp&quot; srcset=&quot;/_astro/06.Ce0Bi_3S_22iNuQ.webp 640w, /_astro/06.Ce0Bi_3S_jXAcF.webp 750w, /_astro/06.Ce0Bi_3S_Z1hlixO.webp 828w, /_astro/06.Ce0Bi_3S_Z1yatw3.webp 1080w, /_astro/06.Ce0Bi_3S_22kmUu.webp 1280w, /_astro/06.Ce0Bi_3S_fltOi.webp 1318w&quot; /&gt;&lt;/p&gt;&lt;p&gt;区切り文字と引用符を指定します。今回は、区切り文字が「,」で引用符が「”」です。
&lt;img loading=&quot;lazy&quot; width=&quot;1310&quot; height=&quot;655&quot; src=&quot;/_astro/07.C3crh643_Z2rRGbf.webp&quot; srcset=&quot;/_astro/07.C3crh643_ZPdHnO.webp 640w, /_astro/07.C3crh643_Z5pbil.webp 750w, /_astro/07.C3crh643_Z17HzsI.webp 828w, /_astro/07.C3crh643_Z1Jy8Lm.webp 1080w, /_astro/07.C3crh643_1Q4MDK.webp 1280w, /_astro/07.C3crh643_Z2rRGbf.webp 1310w&quot; /&gt;&lt;/p&gt;&lt;p&gt;貼り付ける値のデータ型を指定します。デフォルトは「G/標準」になっていますが、「文字列」にするのが僕の推奨です。CSVとかは基本的に文字列のデータですしね。
（例えば、「01234」というデータをデフォルト状態で貼り付けたために、「1234」となるからです。この操作が原因のシステム障害を僕はたくさん見てきました・・・（笑））
&lt;img loading=&quot;lazy&quot; width=&quot;1292&quot; height=&quot;663&quot; src=&quot;/_astro/08.4SoRMFcK_Z4Xnuw.webp&quot; srcset=&quot;/_astro/08.4SoRMFcK_ZNXHub.webp 640w, /_astro/08.4SoRMFcK_1XQHqs.webp 750w, /_astro/08.4SoRMFcK_mwNEX.webp 828w, /_astro/08.4SoRMFcK_1omLdb.webp 1080w, /_astro/08.4SoRMFcK_2rHvKX.webp 1280w, /_astro/08.4SoRMFcK_Z4Xnuw.webp 1292w&quot; /&gt;&lt;/p&gt;&lt;p&gt;下の列みたいなものを全て選択します。
&lt;img loading=&quot;lazy&quot; width=&quot;1298&quot; height=&quot;647&quot; src=&quot;/_astro/09.UaDGKybk_Z213msO.webp&quot; srcset=&quot;/_astro/09.UaDGKybk_Z1mRFsH.webp 640w, /_astro/09.UaDGKybk_Z2vboaL.webp 750w, /_astro/09.UaDGKybk_1wHlsM.webp 828w, /_astro/09.UaDGKybk_Zx6BTf.webp 1080w, /_astro/09.UaDGKybk_Z21EOi4.webp 1280w, /_astro/09.UaDGKybk_Z213msO.webp 1298w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;639&quot; src=&quot;/_astro/10.D6GdJS3p_2ihCU.webp&quot; srcset=&quot;/_astro/10.D6GdJS3p_Z1dNk0b.webp 640w, /_astro/10.D6GdJS3p_ZsYMTH.webp 750w, /_astro/10.D6GdJS3p_Z1vic55.webp 828w, /_astro/10.D6GdJS3p_1vVaGg.webp 1080w, /_astro/10.D6GdJS3p_2ihCU.webp 1278w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こんな風に貼り付けられます！
&lt;img loading=&quot;lazy&quot; width=&quot;1106&quot; height=&quot;355&quot; src=&quot;/_astro/11.DNAQ70cN_Si9Dn.webp&quot; srcset=&quot;/_astro/11.DNAQ70cN_OCdxd.webp 640w, /_astro/11.DNAQ70cN_ZRyTLo.webp 750w, /_astro/11.DNAQ70cN_2hMOWx.webp 828w, /_astro/11.DNAQ70cN_Z2oP8mO.webp 1080w, /_astro/11.DNAQ70cN_Si9Dn.webp 1106w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Google Spreadsheet（テキストを列に分割）&lt;a href=&quot;#google-spreadsheetテキストを列に分割&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらでは、以下の区切り文字を含んだデータをコピーします。
&lt;img loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;177&quot; src=&quot;/_astro/12.C7JlXvrl_Z1pvKpi.webp&quot; srcset=&quot;/_astro/12.C7JlXvrl_Z1pvKpi.webp 493w&quot; /&gt;&lt;/p&gt;&lt;p&gt;まず、普通に貼り付けます。すると、右下にバインダーみたいなマークが出ます。&lt;/p&gt;&lt;p&gt;そこを押すと、またメニューが出てくるので、「テキストを列に分割」をクリックします。
&lt;img loading=&quot;lazy&quot; width=&quot;523&quot; height=&quot;254&quot; src=&quot;/_astro/13.PG9mdS9q_ZNjG3O.webp&quot; srcset=&quot;/_astro/13.PG9mdS9q_ZNjG3O.webp 523w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、Google Spreadsheetの方で区切り文字を勝手に判断して、分割して貼り付けてくれます。&lt;/p&gt;&lt;p&gt;区切り文字が自分と想定していたものと違う場合は、区切り文字のプルダウンから自分で設定すると、貼り付けを修正してくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;792&quot; height=&quot;233&quot; src=&quot;/_astro/14.56ViFczo_EQF6V.webp&quot; srcset=&quot;/_astro/14.56ViFczo_Z9hb6s.webp 640w, /_astro/14.56ViFczo_NIyV1.webp 750w, /_astro/14.56ViFczo_EQF6V.webp 792w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ここからはあまり仕事で使わなかった貼り付け機能を紹介します。&lt;a href=&quot;#ここからはあまり仕事で使わなかった貼り付け機能を紹介します&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上記の7つの貼付け機能は、よく使っていたのですが、下記の機能はほとんど使いませんでした。&lt;/p&gt;&lt;p&gt;しかしながら、紹介はしておきたいと思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8. 関数で貼り付け&lt;a href=&quot;#8-関数で貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「書式を貼りたくないけど、値で貼るんじゃなくてコピー元の関数で貼りたいなあ・・・」という場合に、こちらの機能になります。&lt;/p&gt;&lt;p&gt;しかしながら、そういうケースがあまり起こらないので、ほとんど使いませんでした。
大体、関数使うときって、行とか列全体に使って、書式も行ごと列ごとで全体的に合わせると思います。なので、一番上のセルに関数を書いて、Ctrl + Dで貼り付け～。を普段使っていました。&lt;/p&gt;&lt;p&gt;Google Spreadsheetでは、右クリックして、「特殊貼り付け」→「数式のみ貼り付け」で同様の操作が行なえます。&lt;/p&gt;&lt;p&gt;この例だと、B11に入っている「=B8&amp;amp;B9」の関数を、C11に貼り付けると「=C8&amp;amp;C9」になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1045&quot; height=&quot;366&quot; src=&quot;/_astro/15.BKaVpcQk_Z2b1XR6.webp&quot; srcset=&quot;/_astro/15.BKaVpcQk_Z2qMOvQ.webp 640w, /_astro/15.BKaVpcQk_ZLRjMR.webp 750w, /_astro/15.BKaVpcQk_ZDEO2H.webp 828w, /_astro/15.BKaVpcQk_Z2b1XR6.webp 1045w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1034&quot; height=&quot;395&quot; src=&quot;/_astro/16.qw6XVjEn_Z2kGVNd.webp&quot; srcset=&quot;/_astro/16.qw6XVjEn_Z8Sg7D.webp 640w, /_astro/16.qw6XVjEn_ZM3KL7.webp 750w, /_astro/16.qw6XVjEn_HMVWg.webp 828w, /_astro/16.qw6XVjEn_Z2kGVNd.webp 1034w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9. リンクで貼り付け&lt;a href=&quot;#9-リンクで貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらはコピー元のセルへのリンク（絶対参照）を貼り付け先に貼ります。なので、この貼付けをした後にコピー元を編集すると貼り付け先のセルの値も変わります。（書式は変わりません。）&lt;/p&gt;&lt;p&gt;Google Spreadsheetでは、この機能はないです。&lt;/p&gt;&lt;p&gt;例えば、下の画像では、C11に既に「リンクで貼り付け」た状態です。
&lt;img loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;375&quot; src=&quot;/_astro/17.G4Ys8LFC_18Oswc.webp&quot; srcset=&quot;/_astro/17.G4Ys8LFC_2kTqJi.webp 640w, /_astro/17.G4Ys8LFC_Z15mclE.webp 750w, /_astro/17.G4Ys8LFC_ZW9GAu.webp 828w, /_astro/17.G4Ys8LFC_18Oswc.webp 1059w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そこで、B11に入っている「=B8&amp;amp;B9」の関数を「=C8&amp;amp;B9」にすると、C11もB11と同様の値に変化します。
&lt;img loading=&quot;lazy&quot; width=&quot;1053&quot; height=&quot;373&quot; src=&quot;/_astro/18.kKjVGqrn_dGSYf.webp&quot; srcset=&quot;/_astro/18.kKjVGqrn_1O5ltT.webp 640w, /_astro/18.kKjVGqrn_Z1BbhB3.webp 750w, /_astro/18.kKjVGqrn_Z1sXLPS.webp 828w, /_astro/18.kKjVGqrn_dGSYf.webp 1053w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;【番外編】ここからはGoogleスプレッドシートのみにある貼り付け機能を紹介します。&lt;a href=&quot;#番外編ここからはgoogleスプレッドシートのみにある貼り付け機能を紹介します&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;なんだかこの記事内のGoogle Spreadsheetの存在感が強くなってきたので、ここからはExcelにはなくGoogle Spreadsheetにある機能も紹介します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10. 枠線を除くすべてを貼り付け&lt;a href=&quot;#10-枠線を除くすべてを貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「普通に貼り付け – 枠線」　的なニュアンスで貼り付けます。それが必要なケースってあるのかな？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11. 列幅のみ貼り付け&lt;a href=&quot;#11-列幅のみ貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これで貼り付けると、コピー元の列幅にペースト先の列幅が縮んだり伸びたりします。&lt;/p&gt;&lt;p&gt;行幅はないんですね・・・。まあ、確かに列幅の方が使いそうではありますね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12. データの入力規則のみ貼り付け&lt;a href=&quot;#12-データの入力規則のみ貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;データの入力規則、つまり文字列のセルでコピペしたら、文字列のセルになるわけです。
使える場面でいうと、既に5通りくらいの入力をした列に対して、データの入力規則をプルダウンリストで設定した後で効きそうですね。&lt;/p&gt;&lt;p&gt;この機能を使わずに、普通に貼り付けてしまうと既に入力したものが消えてしまうので、別の列に値貼り付けで対比させる必要が出てきます。大量データを扱う場合に便利そうですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;13. 条件付き書式のみ貼り付け&lt;a href=&quot;#13-条件付き書式のみ貼り付け&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらは条件付き書式だけをコピペします。&lt;/p&gt;&lt;p&gt;なるほど、データの入力規則同様、既に入力した列に対してハイライトさせたい場合に便利そうです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介した、ExcelとGoogle Spreadsheetの機能を表でまとめました。&lt;/p&gt;










































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;貼り付け方&lt;/th&gt;&lt;th&gt;Excel&lt;/th&gt;&lt;th&gt;Google Spreadsheet&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;普通に貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;値で貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◎（ショートカットキーあり）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;書式で貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◎（ショートカットキーあり）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;行と列を入れ替えて貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1つ上のセルを貼り付ける&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1つ左のセルを貼り付ける&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;区切り文字を含んだ貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;関数で貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;リンクで貼り付け&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;枠線を除くすべてを貼り付け&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;列幅のみ貼り付け&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;データの入力規則のみ貼り付け&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;条件付き書式のみ貼り付け&lt;/td&gt;&lt;td&gt;×&lt;/td&gt;&lt;td&gt;◯&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Google Spreadsheetの方がなんだか便利そうだねえ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;かもしれん。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【筋トレ、健康】半年間だけ懸垂したら、回数が増えてきて嬉しい話</title><link>https://endorphinbath.com/posts/pull-up-6month/</link><guid isPermaLink="true">https://endorphinbath.com/posts/pull-up-6month/</guid><description>半年間、懸垂を行った回数をメモする習慣を続けてきました。そして、出来る回数が徐々に増えてきて、何だか嬉しかったのでそれを記事にしました。半年間行ってどれぐらい回数が増えるものなのかが参考になるかと思います。見てみてください。</description><pubDate>Sun, 07 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕が主に懸垂している場所は勤めている会社のオフィスなんだけど、そこで夕方から夜のどこかの時間でやっているんだわ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、仕事をサボって懸垂しているわけだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う〜ん・・・息抜きというんだなそれは。まあ、1セットやるのに大体30秒で終わるから、サボり時間は1分半くらいになるな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_010.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;へえ〜、1分半くらいで終わるんなら、結構アリかもねえ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、どれぐらい効果が出るかを述べようか。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;懸垂の回数の推移&lt;a href=&quot;#懸垂の回数の推移&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まず、状況として、僕の体重が60kg付近だから、重りとしては55kgくらいになりますね。それで、体重はかれこれ2年位このレベル（プラマイ2kgくらい）で推移しているから、重りはずっと同じ重量です。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;それで、順手（プルアップ）でやってます。そして、測っている回数は、行った日の1回目にやったときのものになります。それではご覧ください。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;742&quot; src=&quot;/_astro/01.g3wiV0g7_xllM5.webp&quot; srcset=&quot;/_astro/01.g3wiV0g7_1roSC6.webp 640w, /_astro/01.g3wiV0g7_Z1qqdAC.webp 750w, /_astro/01.g3wiV0g7_DjTJi.webp 828w, /_astro/01.g3wiV0g7_2dVOu9.webp 1080w, /_astro/01.g3wiV0g7_xllM5.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;期間の始めの方は、あまり懸垂を実施できていないですが、段々出社する拠点が変わっていって懸垂をする頻度が増えています。やはり、懸垂を実施する頻度が増えた期間は、記録が伸びています。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;週2くらいで続けていれば、4回→8回くらいに伸びるくらい広背筋が強くなります。2022年2月らへんにサボっていた理由は、右手の人差指を手術して懸垂できなかったためです。（詳細は、この記事にあります。）&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/life-recurrence-of-enchondroma-for-the-past-5-years/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;5年ぶりに内軟骨種とかいう病気が再発して、右手の人差し指を手術した時の話&lt;/div&gt;&lt;div&gt;内軟骨腫という腫瘍が、指にできた際の出来事を執筆しています。病気の簡単な紹介と、意外とこのレベルでも生活できるよという紹介になります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2022/05/20220226_Eyecatch-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;懸垂に取り組んでいる期間に気をつけたこと&lt;a href=&quot;#懸垂に取り組んでいる期間に気をつけたこと&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;懸垂に使う広背筋は超回復に3日位かかるらしいので、中3、4日くらいで行っていました。なので、週2っていう頻度で懸垂に取り組んでいました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まず最低限の栄養は摂るようにしていました。と言っても、懸垂をする日は間違いなく出社しているので、帰りが遅くなって自炊して作った栄養価の高い食事にはありつけないのですが・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;その分だけ、EAAは朝と夜に摂るようにしていました。夜遅い時間に食べて睡眠効率を落とすよりはそっちの方が良いかなと思っています。どうしても空腹が我慢できない時は、退社した直後におにぎりを食べたりはしていましたが（笑）&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;毎日タンパク質は70～90gくらいは摂っていたような気がします。EAA、卵3個、プロテインで大体賄っていました。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これは気をつけたことではないですが・・・運動習慣としては、この期間はあまり懸垂以外の運動はしていませんでした。たまにスクワットしたりするだけ。そのせいで2ヶ月ぶりくらいに走ったときは、100mを全力で2本走れませんでした（笑）&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うーん、歌に使う筋肉を鍛えてはいましたが・・・。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;懸垂の回数が増えてきたことによる変化&lt;a href=&quot;#懸垂の回数が増えてきたことによる変化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;懸垂を続けて、なんか変化はあったの？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あーそれがねー。実は **ほとんど変化がなくて** （笑）やった直後とかは、背筋が伸びる感じはあるんだけど、それ以外実生活で何か変わったことはないかなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はあ、そういうもんかねえ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、背筋がついたおかげで腰は傷めにくくなってるかもしれんな。あと、他の筋トレはほとんどやっていなくてデスクワークだから、そこで筋肉が減って体重が減るはずだけど、広背筋が付いた分だけ体重はプラマイ０になってるね。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふう、懸垂はいいですぞ。よければ、みなさんもやってみて下さい！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;（1人でずっと喋ってた・・・怖っ・・・）&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Excel】文書をExcelで作る際に覚えていたほうが良いショートカットキー12選</title><link>https://endorphinbath.com/posts/excel-shortcut-for-doc/</link><guid isPermaLink="true">https://endorphinbath.com/posts/excel-shortcut-for-doc/</guid><description>僕がSIerのときにExcelで書かれた設計書を修正するときによく使っていたショートカットキーを紹介します。行や列の削除（Ctrl + -）や直前に行った操作を繰り返す（F4）など、覚えると効率が上がって、疲労も溜まりにくくなると思います！</description><pubDate>Sat, 06 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;僕がSIerでExcelで書かれた設計書を修正するときによく使っていたショートカットキーを紹介するよ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;いや、アンタまだSIerとしてバリバリ働いているでしょ・・・なんで既に辞めた体で話を進めているのさ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;う～、確かに執筆時点ではSIer現役です～。いつかそんなこと言ってみてえなあと思い、辞めた体で喋ってしまったよ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ショートカットキーの紹介&lt;a href=&quot;#ショートカットキーの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下に、ショートカットキーを紹介します。
コピペ（Ctrl + C、Ctrl + V）と切り取り（Ctrl + X）と戻る（Ctrl + Z）は、知っている前提で記述します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1　行や列の挿入（Shift + Ctrl + ;）&lt;a href=&quot;#1行や列の挿入shift--ctrl--&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;覚え方としては、行とか列をプラスするから、Shift + ;（= 「+」）と補助キーのCtrlを使うっていう感じです。
よく使う組み合わせとしては、設計書の記載を別の行に移動したい場合に、行を切り取り（Ctrl + X）して、行の挿入（Shift + Ctrl + ;）を別の行で実行する操作です。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2　行や列の削除（Ctrl + -）&lt;a href=&quot;#2行や列の削除ctrl---&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;覚え方としては、「行や列の挿入（Shift + Ctrl + ;）」のときと同様に、行とか列をマイナスするから、-と補助キーのCtrlを使うっていう感じです。
よく使うパターンとしては、普通に「この記載要らねえ」ってときに使います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3　直前に行った操作を繰り返す（F4）&lt;a href=&quot;#3直前に行った操作を繰り返すf4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;セルの結合を色んな場所で繰り返す、赤い文字を全部黒文字にする、といった繰り返し作業が発生することってありませんか？&lt;/p&gt;&lt;p&gt;そんなときは、F4を押すことで最後に行った操作を繰り返すことができます。
「B2～F2をセル結合したけど、それがB3からB50まで同じことをしなければ・・・」という場合は、F4と↓キーを交互に連打すると、作業効率がモリモリ向上します↑↑
&lt;img loading=&quot;lazy&quot; width=&quot;1352&quot; height=&quot;770&quot; src=&quot;/_astro/01.D4upTLiH_Z1rf21.webp&quot; srcset=&quot;/_astro/01.D4upTLiH_Z22QhVa.webp 640w, /_astro/01.D4upTLiH_ZarEoL.webp 750w, /_astro/01.D4upTLiH_16EKy3.webp 828w, /_astro/01.D4upTLiH_Z1P1vmK.webp 1080w, /_astro/01.D4upTLiH_ZNN4r9.webp 1280w, /_astro/01.D4upTLiH_Z1rf21.webp 1352w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この画面をいちいち開くの面倒くさいですよね・・・！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4　戻した操作をやり直す（Ctrl + Y）&lt;a href=&quot;#4戻した操作をやり直すctrl--y&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Ctrl + Zで戻してしまった操作をもう一回やりたい！っていうときありませんか？　その場合は、Ctrl + Yですぐにやり直せます。
例えば、セルの書式設定で直した部分を戻してしまった場合に、またセルの書式設定を開いて設定して・・・なんてことをせずに済みます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5　行で全選択する（Shift + Space）&lt;a href=&quot;#5行で全選択するshift--space&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在フォーカスが当たっているセルの行だけを全選択するときは「Shift + Space」です。列だけを全選択する時は「Ctrl + Space」が便利です。&lt;/p&gt;&lt;p&gt;これは、「1.　行や列の挿入（Shift + Ctrl + ;）」や「2.　行や列の削除（Ctrl + -）」を使う前によく使う操作になると思うので覚えておいたほうが良いでしょう。
特に、行や列の高さが狭い場合に、マウスによる選択は細かい作業になってしまうので、こちらの方が確実で身体への負担が少ないです。マウスでの操作って肩とか色々な部位が凝りませんか・・・？&lt;/p&gt;&lt;p&gt;覚え方としては、行（Shift + Space）は、横に長く選択するので、横に長いShiftを補助キーに使う。といった感じで僕は覚えています。&lt;/p&gt;&lt;p&gt;しかし、注意点として、行の全選択（Shift + Space）は、全角入力になっているときだと使えないので、使う前に半角入力になっているかどうかを確認しましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;659&quot; height=&quot;214&quot; src=&quot;/_astro/02.BXHWCT0B_Z1Ax7ae.webp&quot; srcset=&quot;/_astro/02.BXHWCT0B_ZtFsY6.webp 640w, /_astro/02.BXHWCT0B_Z1Ax7ae.webp 659w&quot; /&gt;&lt;/p&gt;&lt;p&gt;全角入力になっていると、スペースが入力されてしまう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6　列で全選択する（Ctrl + Space）&lt;a href=&quot;#6列で全選択するctrl--space&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「5.　行で全選択する（Shift + Space）」の列バージョンです。
こちらは、全角入力になっていても使えます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7　セルをジャンプする（Ctrl + 矢印キー）&lt;a href=&quot;#7セルをジャンプするctrl--矢印キー&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「あの見出しにすぐ飛びたい！　１個ずつセルを移動するのも面倒くさいし、次の見出しがどこにあるのかを目視で確認しながらスクロールするのも疲れる！」なんてときにこのショートカットキーが役立ちます。&lt;/p&gt;&lt;p&gt;Ctrl + 矢印キーで、現在選択しているセルから指定した方向へ値が埋まっているセルまでジャンプしてくれます。
PageupとかPagedownもありますが、１度の入力で飛べる量が限られているので、このショートカットーキーですと、最大でシートの端から端まで一発で飛べます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8　１つ上のセルをペーストする（Ctrl + D）&lt;a href=&quot;#8１つ上のセルをペーストするctrl--d&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在選んでいるセルの１つ上のセルの値やら書式やらを、現在選んでいるセルにペーストします。&lt;/p&gt;&lt;p&gt;この処理では、クリップボードを介さないので、コピーした内容がこの処理で上書きされることはありません。
主に、表形式で書いてある部分でそれぞれのセルの書式がバラバラになっている場合に、その部分を同じ書式に修正する際に多用することになるでしょう。&lt;/p&gt;&lt;p&gt;さらに、ペーストしたい内容が１番上になるようにセルを複数選択すると、選ばれたセルが全て一番上の内容でペーストされます。
コピペ（Ctrl + C、Ctrl + V）よりも、このショートカットキーのほうが処理速度が速いので、ぜひ活用してもらいたいです。&lt;/p&gt;&lt;p&gt;覚え方としては、「ペースとしたい内容を下（Down）にペーストするのでDを使う。」と僕は覚えています。
&lt;img loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;296&quot; src=&quot;/_astro/03.Ck8QY6Qb_1rVAF7.webp&quot; srcset=&quot;/_astro/03.Ck8QY6Qb_Z1FFrFP.webp 640w, /_astro/03.Ck8QY6Qb_22Hn21.webp 750w, /_astro/03.Ck8QY6Qb_Yj7tx.webp 828w, /_astro/03.Ck8QY6Qb_1rVAF7.webp 837w&quot; /&gt;&lt;/p&gt;&lt;p&gt;左の状態から右の状態へ、一気にペーストされます！　気持ちいい！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9　１つ左のセルをペーストする（Ctrl + R）&lt;a href=&quot;#9１つ左のセルをペーストするctrl--r&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在選んでいるセルの１つ左のセルの値やら書式やらを、現在選んでいるセルにペーストします。&lt;/p&gt;&lt;p&gt;この処理でも、「8.　１つ上のセルをペーストする（Ctrl + D）」と同様に、クリップボードを介さないので、コピーした内容がこの処理で上書きされることはありません。
主に、表形式で書いてある部分でそれぞれのセルの書式がバラバラになっている場合に、その部分を同じ書式に修正する際に多用することになるでしょう。&lt;/p&gt;&lt;p&gt;さらに、ペーストしたい内容が１番左になるようにセルを複数選択すると、選ばれたセルが全て一番左の内容でペーストされます。
こちらも、コピペ（Ctrl + C、Ctrl + V）より処理速度が速いので、ぜひ活用してもらいたいです。&lt;/p&gt;&lt;p&gt;覚え方としては、「ペースとしたい内容を右（Right）にペーストするのでRを使う。」と僕は覚えています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10　シートもしくはブック内を検索する（Ctrl + F）&lt;a href=&quot;#10シートもしくはブック内を検索するctrl--f&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「あの記述ってどこに書いてあるんだっけ？」を解決するために、この機能を使いましょう。
デフォルト設定ではシート内で検索しますが、Ctrl + Fを押した後のウインドウでブック内で検索するように設定できます。&lt;/p&gt;&lt;p&gt;覚え方としては、検索（Find）のFです。Excel以外にも、ブラウザのページ内検索をする際に、Ctrl + Fを使いますよね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11　文字を太字にする（Ctrl + B）&lt;a href=&quot;#11文字を太字にするctrl--b&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;意外と知らないかも？
選択したセルの文字を太く（Bold）します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;12　文字を太字にする（Ctrl + U）&lt;a href=&quot;#12文字を太字にするctrl--u&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;意外と知らないかも？
選択したセルの文字にアンダーライン（Underline）を引きます。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;余談が２つあります。&lt;a href=&quot;#余談が２つあります&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;余談１　文字を複数のセルで中央揃えにする際に、セル結合は使わないほうが良い。&lt;a href=&quot;#余談１文字を複数のセルで中央揃えにする際にセル結合は使わないほうが良い&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設計書でセル結合がされているときは、思わずため息が出てしまいます。&lt;/p&gt;&lt;p&gt;これは設計書に限ったことではないのですが、セル結合というのは本当にどうしようもないときにしか使わないほうが良いです。&lt;/p&gt;&lt;p&gt;なぜかというと、&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;フィルターによるソートが出来なくなる。&lt;/li&gt;
&lt;li&gt;セルの値が長くてセルの枠をはみ出てしまった場合に、「9.　１つ左のセルをペーストする（Ctrl + R）」で直すと、同じシートの他の部分に影響を出さずに修正できるのですが、セル結合されているとこのショートカットが使えません。
&lt;img loading=&quot;lazy&quot; width=&quot;1111&quot; height=&quot;413&quot; src=&quot;/_astro/04.Cq9-ZjRC_Z1XOpSH.webp&quot; srcset=&quot;/_astro/04.Cq9-ZjRC_Z1hzlV6.webp 640w, /_astro/04.Cq9-ZjRC_ZLGQol.webp 750w, /_astro/04.Cq9-ZjRC_I9Qk2.webp 828w, /_astro/04.Cq9-ZjRC_Zdec7I.webp 1080w, /_astro/04.Cq9-ZjRC_Z1XOpSH.webp 1111w&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;↑のように、枠を拡張できないのです！　ああああああああああああああああああああああああああ&lt;/p&gt;&lt;p&gt;そのため複数のセルで中央揃えにしたい時は、複数のセルを選択して右クリックして、「セルの書式設定」に飛びます。そこで、「配置」のタブの中に、「横位置」の項目があるので、「選択範囲内で中央」を選択してOKします。
&lt;img loading=&quot;lazy&quot; width=&quot;995&quot; height=&quot;232&quot; src=&quot;/_astro/05.CnCxpvd4_Z2dlXBw.webp&quot; srcset=&quot;/_astro/05.CnCxpvd4_2w8Y7l.webp 640w, /_astro/05.CnCxpvd4_1iIKas.webp 750w, /_astro/05.CnCxpvd4_Om0d6.webp 828w, /_astro/05.CnCxpvd4_Z2dlXBw.webp 995w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、セルは結合状態になっていませんが、中央揃えにはなっているのです！
&lt;img loading=&quot;lazy&quot; width=&quot;1104&quot; height=&quot;224&quot; src=&quot;/_astro/06.DU7EeaJc_UY3xn.webp&quot; srcset=&quot;/_astro/06.DU7EeaJc_ZjHGkx.webp 640w, /_astro/06.DU7EeaJc_ZnIBpk.webp 750w, /_astro/06.DU7EeaJc_ZkpobG.webp 828w, /_astro/06.DU7EeaJc_aRPQa.webp 1080w, /_astro/06.DU7EeaJc_UY3xn.webp 1104w&quot; /&gt;&lt;/p&gt;&lt;p&gt;枠の拡張もできて、拡張した分も考慮して中央揃えになってくれます！&lt;/p&gt;&lt;p&gt;後々の修正の際に、この書き方が効いてくるので早いうちに直したほうが良いでしょう。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;余談２　セルの内容をコピペする際に、値とか書式だけ貼り付ける。&lt;a href=&quot;#余談２セルの内容をコピペする際に値とか書式だけ貼り付ける&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;これはペーストしたいセルで右クリックを押すと適用できます。&lt;/p&gt;&lt;p&gt;値貼り付け、書式貼り付け、行と列を入れ替えて貼り付け・・・などのオプション機能がありますので、活用していきましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1082&quot; height=&quot;312&quot; src=&quot;/_astro/01.CMlmcnbI_XYh3q.webp&quot; srcset=&quot;/_astro/01.CMlmcnbI_Z1ftbdp.webp 640w, /_astro/01.CMlmcnbI_ZKUuro.webp 750w, /_astro/01.CMlmcnbI_Z1wGSla.webp 828w, /_astro/01.CMlmcnbI_Z1yaSf8.webp 1080w, /_astro/01.CMlmcnbI_XYh3q.webp 1082w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回紹介したことを覚えたらだいぶ操作が速くなった気がする！ 他にも便利なショートカットキー無いかねえ？ 調べてみっか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うん。右クリックして操作を選ぶ方法だと、遅いし、細かい操作が必要になるから、疲労度がだいぶ上がるんだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;penguin avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;penguin&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、そもそも設計書を書くという文化が既に時代遅れな気はするよね。”Code is Law.”の考え方をすれば、みんなソースコードが読めれば、設計書を書くなんていう二重作業は要らなくなるしね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うそうだね。暗号資産とかではもう主流の考え方だよね。設計書に限らず契約書もExcelで作る場面は、ドンドン減っていってほしいね・・・。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;penguin avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;penguin&lt;/div&gt;&lt;/div&gt;&lt;div&gt;まあ、その時代が来るまでは、ショートカットキーの恩恵を受け続けるか・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どーどー・・・&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【AppSheet開発事例】自分が今まで食ったサバ缶を見渡せるアプリ</title><link>https://endorphinbath.com/posts/appsheet-case-mackerel/</link><guid isPermaLink="true">https://endorphinbath.com/posts/appsheet-case-mackerel/</guid><description>Googleスプレッドシートに格納したデータを使って、自分が今までに食べたサバ缶を一覧で見れるアプリを作りました。使ったサービスはAppSheetです。リスト形式に一覧で表示する画面を作っています。</description><pubDate>Fri, 05 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はこのスクレイピングでGoogleスプレッドシートに格納したデータを使って、自分が今までに食ったサバ缶を一覧で見れるアプリを作っていきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本当にサバ缶で始まるんだな。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;こんなアプリを作りました。&lt;a href=&quot;#こんなアプリを作りました&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回紹介するアプリはこんな感じのUIになっています。&lt;/p&gt;&lt;p&gt;左の「Cellar」と「OriginRatio」はワイン関連の機能で、今回紹介する機能は、「OmageWeapon3」というサバ缶を管理する機能です。
&lt;img loading=&quot;lazy&quot; width=&quot;623&quot; height=&quot;864&quot; src=&quot;/_astro/00.CxyvUl_R_1VhaLP.webp&quot; srcset=&quot;/_astro/00.CxyvUl_R_1VhaLP.webp 623w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まず、どんなデータを表示させるかを確認してみましょう。&lt;a href=&quot;#まずどんなデータを表示させるかを確認してみましょう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回使うサバ缶のデータは以下の通りになります。&lt;/p&gt;




































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;カラム名&lt;/th&gt;&lt;th&gt;概要&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;1以上の主キー。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;品名&lt;/td&gt;&lt;td&gt;サバ缶の名前。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;魚種&lt;/td&gt;&lt;td&gt;実はサバ缶以外に、鰯とか秋刀魚も食べています。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;風味&lt;/td&gt;&lt;td&gt;味噌煮、醤油煮、水煮などの味。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;メーカー&lt;/td&gt;&lt;td&gt;サバ缶のメーカー。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;缶の色&lt;/td&gt;&lt;td&gt;缶のパッケージの色。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;美味しさ&lt;/td&gt;&lt;td&gt;数字が大きいと美味い：0＜3。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;美味さ&lt;/td&gt;&lt;td&gt;美味しさを日本語にしたもの。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;開け易い&lt;/td&gt;&lt;td&gt;缶の開けやすさ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最近食った日&lt;/td&gt;&lt;td&gt;最近そのサバ缶を食べた日。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;入手場所&lt;/td&gt;&lt;td&gt;サバ缶を入手した場所。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;コメント&lt;/td&gt;&lt;td&gt;サバ缶を食べた時のコメント。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GooglePhotoのURL&lt;/td&gt;&lt;td&gt;Googleフォトに上げたサバ缶の写真のURL。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;InstagramのURL&lt;/td&gt;&lt;td&gt;Instagramに上げたサバ缶の写真のURL。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画像&lt;/td&gt;&lt;td&gt;AppSheetで表示するためのサバ缶の画像のURL。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AppSheetでのデータ設定&lt;a href=&quot;#appsheetでのデータ設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;では早速、GoogleスプレッドシートにあるデータをAppSheetでどのように設定しているかを紹介します。&lt;/p&gt;&lt;p&gt;こんな風に、Googleスプレッドシートにデータが入っています。
&lt;img loading=&quot;lazy&quot; width=&quot;2342&quot; height=&quot;943&quot; src=&quot;/_astro/01.D8hmsyX2_Z1c9Ypc.webp&quot; srcset=&quot;/_astro/01.D8hmsyX2_Z2n9eb0.webp 640w, /_astro/01.D8hmsyX2_27qRKf.webp 750w, /_astro/01.D8hmsyX2_Z2rBQ3.webp 828w, /_astro/01.D8hmsyX2_Z11XJsD.webp 1080w, /_astro/01.D8hmsyX2_Z2rqpzF.webp 1280w, /_astro/01.D8hmsyX2_rzl0D.webp 1668w, /_astro/01.D8hmsyX2_ZGjWHH.webp 2048w, /_astro/01.D8hmsyX2_Z1c9Ypc.webp 2342w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;テーブルの設定_その1&lt;a href=&quot;#テーブルの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が設定画面です。「LunchMaster」という名前のアプリになります。&lt;/p&gt;&lt;p&gt;まず、テーブルの基本設定です。
&lt;img loading=&quot;lazy&quot; width=&quot;2038&quot; height=&quot;1176&quot; src=&quot;/_astro/02.BREF8hzT_Z1BXIDQ.webp&quot; srcset=&quot;/_astro/02.BREF8hzT_Z1NY9JK.webp 640w, /_astro/02.BREF8hzT_Z1EU9A2.webp 750w, /_astro/02.BREF8hzT_1G3PFz.webp 828w, /_astro/02.BREF8hzT_1VN786.webp 1080w, /_astro/02.BREF8hzT_WM20o.webp 1280w, /_astro/02.BREF8hzT_Z1su1eU.webp 1668w, /_astro/02.BREF8hzT_Z1BXIDQ.webp 2038w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Are updates allowed?」は、UpdatesとAddsしか許可しません。&lt;/p&gt;&lt;p&gt;「Source Path」は、画像にある通りのファイル名のブックになります。&lt;/p&gt;&lt;p&gt;「Worksheet Name/Qualifier」は、画像の通りのシート名になります。&lt;/p&gt;&lt;p&gt;「Data Source」は、Googleスプシを利用しているので、「google」となっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テーブルの設定_その2&lt;a href=&quot;#テーブルの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、テーブルのセキュリティ設定です。
&lt;img loading=&quot;lazy&quot; width=&quot;2037&quot; height=&quot;967&quot; src=&quot;/_astro/03.BfH23DIc_PKP8v.webp&quot; srcset=&quot;/_astro/03.BfH23DIc_2bJ2Jp.webp 640w, /_astro/03.BfH23DIc_Zpz4cH.webp 750w, /_astro/03.BfH23DIc_2fEssD.webp 828w, /_astro/03.BfH23DIc_JP0i7.webp 1080w, /_astro/03.BfH23DIc_ZH08of.webp 1280w, /_astro/03.BfH23DIc_262Wff.webp 1668w, /_astro/03.BfH23DIc_PKP8v.webp 2037w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Filter out all existing rows?」は、既にあるデータを見れなくするかどうかの機能みたいですね。僕は元からあるデータをアプリ上で出したいので、OFFにしています。&lt;/p&gt;&lt;p&gt;「Security filter」は、ここにぶち込んだ関数に一致するデータだけを見れるようにするみたいですね。&lt;/p&gt;&lt;p&gt;「Access mode」は、as app creatorとして、使用しています。as app userでも問題なく使えそうですが、まだ試していません。&lt;/p&gt;&lt;p&gt;「Shared?」も、とりあえずONにして権限広げています。&lt;/p&gt;&lt;p&gt;先程の「テーブルの設定_その1」の画面の「View Columns」をクリックすると、テーブルのカラムを設定できる画面に飛びます！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その1&lt;a href=&quot;#カラムの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの設定になります。以下が、カラムの一覧になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2040&quot; height=&quot;996&quot; src=&quot;/_astro/04.D_EEK3j4_OAPI1.webp&quot; srcset=&quot;/_astro/04.D_EEK3j4_1hJEof.webp 640w, /_astro/04.D_EEK3j4_Z2sBrJ6.webp 750w, /_astro/04.D_EEK3j4_29iMuz.webp 828w, /_astro/04.D_EEK3j4_Z1Lfni1.webp 1080w, /_astro/04.D_EEK3j4_1OvD6F.webp 1280w, /_astro/04.D_EEK3j4_Z1a5anX.webp 1668w, /_astro/04.D_EEK3j4_OAPI1.webp 2040w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「KEY?」に、主キーとしたいカラムを選択します。&lt;/p&gt;&lt;p&gt;「LABEL?」に、レコードのラベルとして表示したいカラムを選択します。この画面でいうと、右のアプリ画面に「品名」が表示されているのが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2007&quot; height=&quot;1082&quot; src=&quot;/_astro/05.CVf3gFDu_1WDwAc.webp&quot; srcset=&quot;/_astro/05.CVf3gFDu_Z17Kkk.webp 640w, /_astro/05.CVf3gFDu_9EivQ.webp 750w, /_astro/05.CVf3gFDu_XJlPQ.webp 828w, /_astro/05.CVf3gFDu_jf2DH.webp 1080w, /_astro/05.CVf3gFDu_ZokUmQ.webp 1280w, /_astro/05.CVf3gFDu_2iAsn6.webp 1668w, /_astro/05.CVf3gFDu_1WDwAc.webp 2007w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちら、また別のカラムになります。設定項目を見るために、右のアプリ画面は閉じました。&lt;/p&gt;&lt;p&gt;「SHOW?」に、アプリに見せたいカラムを設定します。&lt;/p&gt;&lt;p&gt;「EDITABLE?」に、編集できるカラムを設定します。この画像の場合、「美味さ」はGoogleスプシ上で「美味しさ」から取得するようにしているので、OFFにして編集できないようにしています。&lt;/p&gt;&lt;p&gt;・・・「美味さ」は、なんかOFFになっていますね。確か、自己評価を書く前にサバ缶の画像をアップロードしたかったのでOFFにしたんだと思います。&lt;/p&gt;&lt;p&gt;次に、カラムの詳細設定画面に行きます。鉛筆ボタンを押すと行けます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その2&lt;a href=&quot;#カラムの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの詳細設定画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1971&quot; height=&quot;1050&quot; src=&quot;/_astro/06.BnnkRaOx_ZyPEDk.webp&quot; srcset=&quot;/_astro/06.BnnkRaOx_1KVCr3.webp 640w, /_astro/06.BnnkRaOx_1VIGie.webp 750w, /_astro/06.BnnkRaOx_dLHH3.webp 828w, /_astro/06.BnnkRaOx_ByS1y.webp 1080w, /_astro/06.BnnkRaOx_2t8fxm.webp 1280w, /_astro/06.BnnkRaOx_9Y1Ka.webp 1668w, /_astro/06.BnnkRaOx_ZyPEDk.webp 1971w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「美味さ」のカラムを参考に見てみます。&lt;/p&gt;&lt;p&gt;「Type」には列挙型が入る設定になっています。ここでも設定できますが、この部分は後ほど紹介する処理で、Googleスプシに入っている値から自動的に設定してくれます。
&lt;img loading=&quot;lazy&quot; width=&quot;1972&quot; height=&quot;1020&quot; src=&quot;/_astro/07.DxYPsJXa_19Y0Kj.webp&quot; srcset=&quot;/_astro/07.DxYPsJXa_Z1vRBFd.webp 640w, /_astro/07.DxYPsJXa_ZBr3GF.webp 750w, /_astro/07.DxYPsJXa_22JA7B.webp 828w, /_astro/07.DxYPsJXa_Z1mCOYe.webp 1080w, /_astro/07.DxYPsJXa_C8A59.webp 1280w, /_astro/07.DxYPsJXa_Z1tG2RG.webp 1668w, /_astro/07.DxYPsJXa_19Y0Kj.webp 1972w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Allow other values」には、列挙されている値と以外の値がカラムに入っても良いかどうかを設定できます。&lt;/p&gt;&lt;p&gt;「Auto-complete other values」には、 列挙されている値と以外の値が自動入力で入っても良いかどうかを設定できます。&lt;/p&gt;&lt;p&gt;「Base type」には、列挙される値の型を設定します。Textにします。&lt;/p&gt;&lt;p&gt;「Input mode」には、Autoを設定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1708&quot; height=&quot;842&quot; src=&quot;/_astro/08.CkxLF1VV_ZuWJro.webp&quot; srcset=&quot;/_astro/08.CkxLF1VV_Z15wrf0.webp 640w, /_astro/08.CkxLF1VV_Z1DNElW.webp 750w, /_astro/08.CkxLF1VV_ZdXj8F.webp 828w, /_astro/08.CkxLF1VV_Dzvi4.webp 1080w, /_astro/08.CkxLF1VV_1HbpN0.webp 1280w, /_astro/08.CkxLF1VV_Z1hxsFd.webp 1668w, /_astro/08.CkxLF1VV_ZuWJro.webp 1708w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Data Validity」で、バリデーションチェックの設定ができそうです。「Require」で必須項目かどうかの設定もできます。
&lt;img loading=&quot;lazy&quot; width=&quot;1912&quot; height=&quot;1025&quot; src=&quot;/_astro/09.DC9wJPpu_Z5H3wd.webp&quot; srcset=&quot;/_astro/09.DC9wJPpu_1QjXp5.webp 640w, /_astro/09.DC9wJPpu_2272gg.webp 750w, /_astro/09.DC9wJPpu_Z2e03dF.webp 828w, /_astro/09.DC9wJPpu_Z1MR849.webp 1080w, /_astro/09.DC9wJPpu_3GerE.webp 1280w, /_astro/09.DC9wJPpu_25ykrJ.webp 1668w, /_astro/09.DC9wJPpu_Z5H3wd.webp 1912w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Auto Compute」では、他のカラムなどを見て自動的に値を入力するように設定します。「Spreadsheet formula」では、既にGoogleスプシの方にSWITCH関数が入っているので、それをAppSheet内の関数で表記しているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1891&quot; height=&quot;956&quot; src=&quot;/_astro/10.CaUTtRiJ_1s74i8.webp&quot; srcset=&quot;/_astro/10.CaUTtRiJ_Z1hfwvO.webp 640w, /_astro/10.CaUTtRiJ_Zwr0ql.webp 750w, /_astro/10.CaUTtRiJ_Z28KTbP.webp 828w, /_astro/10.CaUTtRiJ_Ze1gm8.webp 1080w, /_astro/10.CaUTtRiJ_Oryae.webp 1280w, /_astro/10.CaUTtRiJ_Z2c0o0r.webp 1668w, /_astro/10.CaUTtRiJ_1s74i8.webp 1891w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Update Behavior」は特に設定してません。主キーかどうか、編集可能かどうかを設定できます。レコードを更新したら初期化するのかどうかも設定できるようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1790&quot; height=&quot;1056&quot; src=&quot;/_astro/11.D6LBLH6m_Z1mo2Nq.webp&quot; srcset=&quot;/_astro/11.D6LBLH6m_y6Lwu.webp 640w, /_astro/11.D6LBLH6m_HaLGd.webp 750w, /_astro/11.D6LBLH6m_1vYF44.webp 828w, /_astro/11.D6LBLH6m_1LENkH.webp 1080w, /_astro/11.D6LBLH6m_Z2vFqm1.webp 1280w, /_astro/11.D6LBLH6m_Z44UBK.webp 1668w, /_astro/11.D6LBLH6m_Z1mo2Nq.webp 1790w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Display」は、表示する条件やそのカラムの注意書きも設定できるようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1933&quot; height=&quot;1023&quot; src=&quot;/_astro/12.CjiN1A26_1lfBqQ.webp&quot; srcset=&quot;/_astro/12.CjiN1A26_1lwlR1.webp 640w, /_astro/12.CjiN1A26_2ev16f.webp 750w, /_astro/12.CjiN1A26_2lwy1L.webp 828w, /_astro/12.CjiN1A26_2hfAUt.webp 1080w, /_astro/12.CjiN1A26_2mVYcm.webp 1280w, /_astro/12.CjiN1A26_ZBgwkH.webp 1668w, /_astro/12.CjiN1A26_1lfBqQ.webp 1933w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Other Properties」は、AppSheet内の検索時にデータがヒット可とするかとか、個人情報の扱いとするかとかを設定できるっぽいですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その3&lt;a href=&quot;#カラムの設定_その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの追加をGoogleスプシで行った場合に、この画面で表示されているカラムとGoogleスプシのカラム数が一致しないと、AppSheetからエラーメッセージが出されます。&lt;/p&gt;&lt;p&gt;その場合は、「Regenerate Structure」をクリックして、再び右上の「SAVE」をクリックすると、解消されたりします。
&lt;img loading=&quot;lazy&quot; width=&quot;2472&quot; height=&quot;1101&quot; src=&quot;/_astro/13.B4EysIKN_ZjXaUo.webp&quot; srcset=&quot;/_astro/13.B4EysIKN_2vhSCd.webp 640w, /_astro/13.B4EysIKN_b29cO.webp 750w, /_astro/13.B4EysIKN_11XlcQ.webp 828w, /_astro/13.B4EysIKN_ZTiWTg.webp 1080w, /_astro/13.B4EysIKN_Z26IQVM.webp 1280w, /_astro/13.B4EysIKN_1noD19.webp 1668w, /_astro/13.B4EysIKN_1DiESA.webp 2048w, /_astro/13.B4EysIKN_ZjXaUo.webp 2472w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その4&lt;a href=&quot;#カラムの設定_その4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここでは、データ型が「Image」のデータをアップロードする手順を見ていきます。&lt;/p&gt;&lt;p&gt;とりあえず、現在のサバ缶の1レコード分の画面を見てみます。以下のように、色々なカラムの値が表示されています。&lt;/p&gt;&lt;p&gt;右下のピンク色の鉛筆ボタンをクリックすると、編集画面に飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;868&quot; src=&quot;/_astro/14.CQdDKeDA_1XugPo.webp&quot; srcset=&quot;/_astro/14.CQdDKeDA_1XugPo.webp 618w&quot; /&gt;&lt;/p&gt;&lt;p&gt;レコードの編集画面はこんな感じです。
&lt;img loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;863&quot; src=&quot;/_astro/15.Dxsim7ha_Z270VN7.webp&quot; srcset=&quot;/_astro/15.Dxsim7ha_Z270VN7.webp 613w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Clear ×」ボタンを押せば画像は無くなって、カメラボタンを押せば新しく画像をアップロードできます。そして、新しく画像をアップロードして「Save」をクリックするとどうなるのかと言いますと・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;617&quot; height=&quot;860&quot; src=&quot;/_astro/16.C_sKBglm_1oVf3e.webp&quot; srcset=&quot;/_astro/16.C_sKBglm_1oVf3e.webp 617w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちら、Googleドライブ上のテーブルのデータが入っているシートがあるフォルダになるのですが、今回、そのデータがあるシート名が「サバ缶🦈」なので、この画像の中の「サバ缶🦈_Images」にアップロードした画像が入っています。
&lt;img loading=&quot;lazy&quot; width=&quot;2039&quot; height=&quot;722&quot; src=&quot;/_astro/17.Dcscvj6N_Z45Sb4.webp&quot; srcset=&quot;/_astro/17.Dcscvj6N_1nqwYo.webp 640w, /_astro/17.Dcscvj6N_Z22P66y.webp 750w, /_astro/17.Dcscvj6N_Z1TCAlo.webp 828w, /_astro/17.Dcscvj6N_2058wE.webp 1080w, /_astro/17.Dcscvj6N_BBG4e.webp 1280w, /_astro/17.Dcscvj6N_12yR2z.webp 1668w, /_astro/17.Dcscvj6N_Z45Sb4.webp 2039w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に「サバ缶🦈_Images」フォルダを見ると、画像が格納されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1995&quot; height=&quot;1141&quot; src=&quot;/_astro/18.KGf-QTZt_Z6SiEO.webp&quot; srcset=&quot;/_astro/18.KGf-QTZt_1ISRfP.webp 640w, /_astro/18.KGf-QTZt_1TpL9R.webp 750w, /_astro/18.KGf-QTZt_Z2nhi2W.webp 828w, /_astro/18.KGf-QTZt_Z1sY1O5.webp 1080w, /_astro/18.KGf-QTZt_ZxU49i.webp 1280w, /_astro/18.KGf-QTZt_Z2f1imW.webp 1668w, /_astro/18.KGf-QTZt_Z6SiEO.webp 1995w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「サバ缶🦈_Images」フォルダ内の画像のパスが、シートに入っていることも確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2278&quot; height=&quot;679&quot; src=&quot;/_astro/19.BmXQBdEB_ZT4jMa.webp&quot; srcset=&quot;/_astro/19.BmXQBdEB_xfFCB.webp 640w, /_astro/19.BmXQBdEB_Z7eCLB.webp 750w, /_astro/19.BmXQBdEB_ZS11Fn.webp 828w, /_astro/19.BmXQBdEB_Ncf98.webp 1080w, /_astro/19.BmXQBdEB_Z2n7pcO.webp 1280w, /_astro/19.BmXQBdEB_Z1QsIeN.webp 1668w, /_astro/19.BmXQBdEB_ZlrKg8.webp 2048w, /_astro/19.BmXQBdEB_ZT4jMa.webp 2278w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AppSheetでのビュー設定&lt;a href=&quot;#appsheetでのビュー設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここでは、実際に画面のデザインをする設定の紹介になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その0&lt;a href=&quot;#ビューの設定_その0&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「OmegaWeapon3」の画面の紹介です。
&lt;img loading=&quot;lazy&quot; width=&quot;2017&quot; height=&quot;1023&quot; src=&quot;/_astro/20.VO8LWGBX_1y9UkK.webp&quot; srcset=&quot;/_astro/20.VO8LWGBX_ZT9Ma6.webp 640w, /_astro/20.VO8LWGBX_2w73Vs.webp 750w, /_astro/20.VO8LWGBX_66yVN.webp 828w, /_astro/20.VO8LWGBX_acDDw.webp 1080w, /_astro/20.VO8LWGBX_o75sY.webp 1280w, /_astro/20.VO8LWGBX_Z1zutVh.webp 1668w, /_astro/20.VO8LWGBX_1y9UkK.webp 2017w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その1&lt;a href=&quot;#ビューの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上の画像にある通り、 「View name」には「OmegaWeapon3」と入力して、「View type」にはcardを選択します。&lt;/p&gt;&lt;p&gt;「Position」はrightに設定しています。「Cellar」がleft mostで「OriginRatio」がleftなので、「OmegaWeapon3」は右側に表示されています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その2&lt;a href=&quot;#ビューの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;View Optionsでは、「Sort by」で表示する順番を設定したり、「Group by」でどうグループ分けするかを設定できます。&lt;/p&gt;&lt;p&gt;「Group aggregate」では、Group byしたときにそのグループの何を表示するかを設定できます。今回はCOUNTなので、Group名の横に件数が表示されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2011&quot; height=&quot;1037&quot; src=&quot;/_astro/21.mxVFvT-1_ZMaqJO.webp&quot; srcset=&quot;/_astro/21.mxVFvT-1_2nWltp.webp 640w, /_astro/21.mxVFvT-1_Z1LNelY.webp 750w, /_astro/21.mxVFvT-1_Rnpsi.webp 828w, /_astro/21.mxVFvT-1_wD5N1.webp 1080w, /_astro/21.mxVFvT-1_2wpvRo.webp 1280w, /_astro/21.mxVFvT-1_Z25rUm1.webp 1668w, /_astro/21.mxVFvT-1_ZMaqJO.webp 2011w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その3&lt;a href=&quot;#ビューの設定_その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Layoutで、どのようなデザインで表示するかビジュアル的に設定できます。&lt;/p&gt;&lt;p&gt;DisplayのIconは「list-ul」を設定しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2019&quot; height=&quot;1037&quot; src=&quot;/_astro/22.Ba70y6ae_ZT1o2u.webp&quot; srcset=&quot;/_astro/22.Ba70y6ae_75ebc.webp 640w, /_astro/22.Ba70y6ae_10bXo0.webp 750w, /_astro/22.Ba70y6ae_Z1pNvAE.webp 828w, /_astro/22.Ba70y6ae_tm7fC.webp 1080w, /_astro/22.Ba70y6ae_Z1QRLsh.webp 1280w, /_astro/22.Ba70y6ae_Z1oy4RK.webp 1668w, /_astro/22.Ba70y6ae_ZT1o2u.webp 2019w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これ以降のビュー設定は特に設定していませんので、割愛します。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;完成！&lt;a href=&quot;#完成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;はい！　一旦ここまでの設定でSAVEすると、アプリができました！&lt;/p&gt;&lt;p&gt;ここで作ったアプリは、スマホでもAppSheetのアプリを入れれば使用できるはずです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これでサバ缶を管理出来るな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;お～っ、あったまるわぁ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;</content:encoded></item><item><title>【AppSheet開発事例】自分が今まで飲んだワインを見渡せるアプリ</title><link>https://endorphinbath.com/posts/appsheet-case-wine/</link><guid isPermaLink="true">https://endorphinbath.com/posts/appsheet-case-wine/</guid><description>Googleスプレッドシートに格納したデータを使って、自分が今までに飲んだワインを一覧で見れるアプリを作りました。使ったサービスはAppSheetです。リスト形式に一覧で表示する画面と全体をヒストグラム形式に集計した画面を作っています。</description><pubDate>Thu, 04 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;以前に以下のスクレイピングの記事を挙げました。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://www.endorphinbath.com/wine-scraping-vinica/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ワインのデータをスクレイピングする（vinica編）&lt;/div&gt;&lt;div&gt;vinicaというサイトにあるワインのデータをExcelやGoogle Spreadsheetなどに貼り付けられる形式に取得できるスクリプトを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/20211020_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.endorphinbath.com/wine-scraping-vivino/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;ワインのデータをスクレイピングする（Vivino編）&lt;/div&gt;&lt;div&gt;VivinoというサイトにあるワインのデータをExcelやGoogle Spreadsheetなどに貼り付けられる形式に取得できるスクリプトを紹介します。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/20211020_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回はこのスクレイピングでGoogleスプレッドシートに格納したデータを使って、自分が今までに飲んだワインを一覧で見れるアプリを作っていきたいと思います。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;こんなアプリを作りました。&lt;a href=&quot;#こんなアプリを作りました&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回紹介するアプリはこんな感じのUIになっています。&lt;/p&gt;&lt;p&gt;「Cellar」がワインを管理する機能で、「OriginRatio」はワインの原産国の集計する機能です。
&lt;img loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;868&quot; src=&quot;/_astro/22.D91Tdtxz_2kRuwi.webp&quot; srcset=&quot;/_astro/22.D91Tdtxz_2kRuwi.webp 622w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;まず、どんなデータを表示させるかを確認してみましょう。&lt;a href=&quot;#まずどんなデータを表示させるかを確認してみましょう&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今回使うワインのデータは以下の通りになります。&lt;/p&gt;




















































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;カラム名&lt;/th&gt;&lt;th&gt;概要&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;ID&lt;/td&gt;&lt;td&gt;1以上の主キー&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ワイン名&lt;/td&gt;&lt;td&gt;ワインの名前&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;出会った日&lt;/td&gt;&lt;td&gt;ワインを手に入れた日&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Instagramに上げた日&lt;/td&gt;&lt;td&gt;ワインを飲んだ感想をInstagramに上げた日&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;製造年&lt;/td&gt;&lt;td&gt;ワインが作られた年&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;色&lt;/td&gt;&lt;td&gt;ワインの色（赤や白）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;醸造方法&lt;/td&gt;&lt;td&gt;醸造方法は次の４つです。Still、Sparkling,Fortified,Flavored。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;金額&lt;/td&gt;&lt;td&gt;ワインの一般市場での金額です。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;入手場所&lt;/td&gt;&lt;td&gt;ワインを手に入れた場所&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最寄駅&lt;/td&gt;&lt;td&gt;ワインを手に入れた場所の最寄りの駅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;原産地&lt;/td&gt;&lt;td&gt;ワインの原産地&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;原産国&lt;/td&gt;&lt;td&gt;ワインの原産国&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;感想（Instagram用）&lt;/td&gt;&lt;td&gt;Instagramに上げる感想。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ハッシュタグ&lt;/td&gt;&lt;td&gt;Instagramに上げるハッシュタグ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;備考（葡萄とか）&lt;/td&gt;&lt;td&gt;これもInstagramに上げます。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;参考1&lt;/td&gt;&lt;td&gt;各々のワインの参考資料です。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;参考2&lt;/td&gt;&lt;td&gt;その2です。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Instagramに貼り付け&lt;/td&gt;&lt;td&gt;Instagramに貼り付ける内容です。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vinicaフォルダに入れた&lt;/td&gt;&lt;td&gt;vinicaのブックマークに登録したかどうかです。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ボリューム（軽い＜重い）&lt;/td&gt;&lt;td&gt;1～5。1：軽い、5：重い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;タンニン（控えめ＜強い）&lt;/td&gt;&lt;td&gt;1～5。1：控えめ、5：強い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;甘み（ドライ＜甘い）&lt;/td&gt;&lt;td&gt;1～5。1：ドライ、5：甘い。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;酸味（まろやか＜シャープ）&lt;/td&gt;&lt;td&gt;1～5。1：まろやか、5：シャープ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;果実味（スパイシー＜フルーティ）&lt;/td&gt;&lt;td&gt;1～5。1：スパイシー、5：フルーティー。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;個人評価&lt;/td&gt;&lt;td&gt;僕の個人的なワインの評価。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画像URL&lt;/td&gt;&lt;td&gt;Googleフォトに上げたワインの画像のURL。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;画像&lt;/td&gt;&lt;td&gt;AppSheetで表示するためのワインの画像のURL。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h2&gt;AppSheetでのデータ設定&lt;a href=&quot;#appsheetでのデータ設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;では早速、GoogleスプレッドシートにあるデータをAppSheetでどのように設定しているかを紹介します。&lt;/p&gt;&lt;p&gt;こんな風に、Googleスプレッドシートにデータが入っています。
&lt;img loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;898&quot; src=&quot;/_astro/01.DAXnJokZ_1BUuly.webp&quot; srcset=&quot;/_astro/01.DAXnJokZ_ZOfhEL.webp 640w, /_astro/01.DAXnJokZ_Z1NP57n.webp 750w, /_astro/01.DAXnJokZ_Z2uIbtC.webp 828w, /_astro/01.DAXnJokZ_Z19oor1.webp 1080w, /_astro/01.DAXnJokZ_2ttUzQ.webp 1280w, /_astro/01.DAXnJokZ_261Fhb.webp 1668w, /_astro/01.DAXnJokZ_1BUuly.webp 2048w&quot; /&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;テーブルの設定_その1&lt;a href=&quot;#テーブルの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下が設定画面です。「LunchMaster」という名前のアプリになります。&lt;/p&gt;&lt;p&gt;まず、テーブルの基本設定です。
&lt;img loading=&quot;lazy&quot; width=&quot;2549&quot; height=&quot;1190&quot; src=&quot;/_astro/02.y_ImM8mF_2vK7uX.webp&quot; srcset=&quot;/_astro/02.y_ImM8mF_M1TTR.webp 640w, /_astro/02.y_ImM8mF_XliFl.webp 750w, /_astro/02.y_ImM8mF_1O9pGN.webp 828w, /_astro/02.y_ImM8mF_1ucL37.webp 1080w, /_astro/02.y_ImM8mF_1GybC1.webp 1280w, /_astro/02.y_ImM8mF_1F2Wbz.webp 1668w, /_astro/02.y_ImM8mF_Z1zGKkm.webp 2048w, /_astro/02.y_ImM8mF_2vK7uX.webp 2549w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Are updates allowed?」は、UpdatesとAddsしか許可しません。&lt;/p&gt;&lt;p&gt;「Source Path」は、画像にある通りのファイル名のブックになります。&lt;/p&gt;&lt;p&gt;「Worksheet Name/Qualifier」は、画像の通りのシート名になります。&lt;/p&gt;&lt;p&gt;「Data Source」は、Googleスプシを利用しているので、「google」となっています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;テーブルの設定_その2&lt;a href=&quot;#テーブルの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、テーブルのセキュリティ設定です。
&lt;img loading=&quot;lazy&quot; width=&quot;2550&quot; height=&quot;1075&quot; src=&quot;/_astro/03.DHwnTa0E_1zUtjJ.webp&quot; srcset=&quot;/_astro/03.DHwnTa0E_ZPAMJB.webp 640w, /_astro/03.DHwnTa0E_1UUzmO.webp 750w, /_astro/03.DHwnTa0E_Z2ichsv.webp 828w, /_astro/03.DHwnTa0E_YNtyP.webp 1080w, /_astro/03.DHwnTa0E_Z4olU7.webp 1280w, /_astro/03.DHwnTa0E_1UigT3.webp 1668w, /_astro/03.DHwnTa0E_2dJNMI.webp 2048w, /_astro/03.DHwnTa0E_1zUtjJ.webp 2550w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Filter out all existing rows?」は、既にあるデータを見れなくするかどうかの機能みたいですね。僕は元からあるデータをアプリ上で出したいので、OFFにしています。&lt;/p&gt;&lt;p&gt;「Security filter」は、ここにぶち込んだ関数に一致するデータだけを見れるようにするみたいですね。&lt;/p&gt;&lt;p&gt;「Access mode」は、as app creatorとして、使用しています。as app userでも問題なく使えそうですが、まだ試していません。&lt;/p&gt;&lt;p&gt;「Shared?」も、とりあえずONにして権限広げています。&lt;/p&gt;&lt;p&gt;先程の「テーブルの設定_その1」の画面の「View Columns」をクリックすると、テーブルのカラムを設定できる画面に飛びます！&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その1&lt;a href=&quot;#カラムの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの設定になります。以下が、カラムの一覧になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2510&quot; height=&quot;1015&quot; src=&quot;/_astro/04.B2TQY6-__B45uD.webp&quot; srcset=&quot;/_astro/04.B2TQY6-__Z1A66yf.webp 640w, /_astro/04.B2TQY6-__Z1mUz7J.webp 750w, /_astro/04.B2TQY6-__21iNJC.webp 828w, /_astro/04.B2TQY6-__YFpYt.webp 1080w, /_astro/04.B2TQY6-__Z1LhRsB.webp 1280w, /_astro/04.B2TQY6-__Zxk4UE.webp 1668w, /_astro/04.B2TQY6-__1EFhUB.webp 2048w, /_astro/04.B2TQY6-__B45uD.webp 2510w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「KEY?」に、主キーとしたいカラムを選択します。&lt;/p&gt;&lt;p&gt;「LABEL?」に、レコードのラベルとして表示したいカラムを選択します。この画面でいうと、右のアプリ画面に「ワイン名」が表示されているのが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2464&quot; height=&quot;1071&quot; src=&quot;/_astro/05.k3HWQKUT_Z25NU9R.webp&quot; srcset=&quot;/_astro/05.k3HWQKUT_1lqu73.webp 640w, /_astro/05.k3HWQKUT_1ykQAp.webp 750w, /_astro/05.k3HWQKUT_2nWeOH.webp 828w, /_astro/05.k3HWQKUT_Zr9wqz.webp 1080w, /_astro/05.k3HWQKUT_Z1zsTcj.webp 1280w, /_astro/05.k3HWQKUT_22REjc.webp 1668w, /_astro/05.k3HWQKUT_1sVjCD.webp 2048w, /_astro/05.k3HWQKUT_Z25NU9R.webp 2464w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちら、また別のカラムになります。設定項目を見るために、右のアプリ画面は閉じました。&lt;/p&gt;&lt;p&gt;「SHOW?」に、アプリに見せたいカラムを設定します。&lt;/p&gt;&lt;p&gt;「EDITABLE?」に、編集できるカラムを設定します。この画像の場合、「原産国」はGoogleスプシ上で「原産地」から取得するようにしているので、OFFにして編集できないようにしています。&lt;/p&gt;&lt;p&gt;次に、カラムの詳細設定画面に行きます。鉛筆ボタンを押すと行けます。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その2&lt;a href=&quot;#カラムの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの詳細設定画面になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1957&quot; height=&quot;1072&quot; src=&quot;/_astro/06.CUwQKy6S_aI8fd.webp&quot; srcset=&quot;/_astro/06.CUwQKy6S_gEgNs.webp 640w, /_astro/06.CUwQKy6S_Z25HLe7.webp 750w, /_astro/06.CUwQKy6S_1goj14.webp 828w, /_astro/06.CUwQKy6S_ZVWd4l.webp 1080w, /_astro/06.CUwQKy6S_1Ny3hf.webp 1280w, /_astro/06.CUwQKy6S_183Kbo.webp 1668w, /_astro/06.CUwQKy6S_aI8fd.webp 1957w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「原産国」のカラムを参考に見てみます。&lt;/p&gt;&lt;p&gt;「Type」にはテキストが入る設定になっています。ここでも設定できますが、この部分は後ほど紹介する処理で、Googleスプシに入っている値から自動的に設定してくれます。&lt;/p&gt;&lt;p&gt;「Type Details」に、Maximum lengthとMinimum lengthを設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1501&quot; height=&quot;1058&quot; src=&quot;/_astro/07.CQFyiOph_P4j03.webp&quot; srcset=&quot;/_astro/07.CQFyiOph_1Hivq3.webp 640w, /_astro/07.CQFyiOph_1PqVJK.webp 750w, /_astro/07.CQFyiOph_3LFNv.webp 828w, /_astro/07.CQFyiOph_1G5tG0.webp 1080w, /_astro/07.CQFyiOph_Z1hzrqK.webp 1280w, /_astro/07.CQFyiOph_P4j03.webp 1501w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1497&quot; height=&quot;845&quot; src=&quot;/_astro/08.DZ4ngQCf_1l51rT.webp&quot; srcset=&quot;/_astro/08.DZ4ngQCf_1gu1IG.webp 640w, /_astro/08.DZ4ngQCf_Z1mgXWJ.webp 750w, /_astro/08.DZ4ngQCf_2mYbnJ.webp 828w, /_astro/08.DZ4ngQCf_ZH2k0r.webp 1080w, /_astro/08.DZ4ngQCf_Z2dPU01.webp 1280w, /_astro/08.DZ4ngQCf_1l51rT.webp 1497w&quot; /&gt;&lt;/p&gt;&lt;p&gt;他の入力型として、「Number」と「Image」も見てみます。Numberでは桁数とか1000区切りの設定などができそうです。Imageは特に設定する項目はありません。どのように画像が登録されるかは、後ほど紹介します。
&lt;img loading=&quot;lazy&quot; width=&quot;1466&quot; height=&quot;1055&quot; src=&quot;/_astro/09.DhP8ZgBn_MoLjV.webp&quot; srcset=&quot;/_astro/09.DhP8ZgBn_3y1LH.webp 640w, /_astro/09.DhP8ZgBn_aeym6.webp 750w, /_astro/09.DhP8ZgBn_Z1A5RNp.webp 828w, /_astro/09.DhP8ZgBn_18Dh3j.webp 1080w, /_astro/09.DhP8ZgBn_2qS8r3.webp 1280w, /_astro/09.DhP8ZgBn_MoLjV.webp 1466w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Data Validity」で、バリデーションチェックの設定ができそうです。「Require」で必須項目かどうかの設定もできます。
&lt;img loading=&quot;lazy&quot; width=&quot;1473&quot; height=&quot;755&quot; src=&quot;/_astro/10.BDQC8Vay_ZeiSzb.webp&quot; srcset=&quot;/_astro/10.BDQC8Vay_Z2ulL47.webp 640w, /_astro/10.BDQC8Vay_Rv9rD.webp 750w, /_astro/10.BDQC8Vay_ZINJiQ.webp 828w, /_astro/10.BDQC8Vay_dDoDy.webp 1080w, /_astro/10.BDQC8Vay_Z1g2RHP.webp 1280w, /_astro/10.BDQC8Vay_ZeiSzb.webp 1473w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Auto Compute」では、他のカラムなどを見て自動的に値を入力するように設定します。「Spreadsheet formula」では、既にGoogleスプシの方にLEFT関数が入っているので、それをAppSheet内の関数で表記しているようです。
&lt;img loading=&quot;lazy&quot; width=&quot;1470&quot; height=&quot;710&quot; src=&quot;/_astro/11.BY9YG0BH_doRqD.webp&quot; srcset=&quot;/_astro/11.BY9YG0BH_ZlvB44.webp 640w, /_astro/11.BY9YG0BH_ZkLjzT.webp 750w, /_astro/11.BY9YG0BH_ZN3daa.webp 828w, /_astro/11.BY9YG0BH_DiYCG.webp 1080w, /_astro/11.BY9YG0BH_1IuRQv.webp 1280w, /_astro/11.BY9YG0BH_doRqD.webp 1470w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Update Behavior」は特に設定してません。主キーかどうか、編集可能かどうかを設定できます。レコードを更新したら初期化するのかどうかも設定できるようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1464&quot; height=&quot;667&quot; src=&quot;/_astro/12.3UYgHtua_Z1T3nCk.webp&quot; srcset=&quot;/_astro/12.3UYgHtua_IazX9.webp 640w, /_astro/12.3UYgHtua_1LBGlH.webp 750w, /_astro/12.3UYgHtua_2oOkbS.webp 828w, /_astro/12.3UYgHtua_126pi0.webp 1080w, /_astro/12.3UYgHtua_Zpsyrd.webp 1280w, /_astro/12.3UYgHtua_Z1T3nCk.webp 1464w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Display」は、表示する条件やそのカラムの注意書きも設定できるようですね。
&lt;img loading=&quot;lazy&quot; width=&quot;1527&quot; height=&quot;977&quot; src=&quot;/_astro/13.DVRSzsJP_1wxWwp.webp&quot; srcset=&quot;/_astro/13.DVRSzsJP_Z17f8oh.webp 640w, /_astro/13.DVRSzsJP_2p4hx.webp 750w, /_astro/13.DVRSzsJP_X7cre.webp 828w, /_astro/13.DVRSzsJP_25msXM.webp 1080w, /_astro/13.DVRSzsJP_2m8UUA.webp 1280w, /_astro/13.DVRSzsJP_1wxWwp.webp 1527w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Other Properties」は、バーコード読み取りとかNFC読み取りとかを設定できるっぽいですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その3&lt;a href=&quot;#カラムの設定_その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カラムの追加をGoogleスプシで行った場合に、この画面で表示されているカラムとGoogleスプシのカラム数が一致しないと、AppSheetからエラーメッセージが出されます。&lt;/p&gt;&lt;p&gt;その場合は、「Regenerate Structure」をクリックして、再び右上の「SAVE」をクリックすると、解消されたりします。
&lt;img loading=&quot;lazy&quot; width=&quot;1990&quot; height=&quot;903&quot; src=&quot;/_astro/14.Dgocm8c-_Z2jK0uF.webp&quot; srcset=&quot;/_astro/14.Dgocm8c-_1wB83L.webp 640w, /_astro/14.Dgocm8c-_Z2u8TmB.webp 750w, /_astro/14.Dgocm8c-_Z2qWL7x.webp 828w, /_astro/14.Dgocm8c-_IAv3D.webp 1080w, /_astro/14.Dgocm8c-_ZHXsFz.webp 1280w, /_astro/14.Dgocm8c-_Z16OWTX.webp 1668w, /_astro/14.Dgocm8c-_Z2jK0uF.webp 1990w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;カラムの設定_その4&lt;a href=&quot;#カラムの設定_その4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここでは、先程述べた「Image」のデータをアップロードする手順を見ていきます。&lt;/p&gt;&lt;p&gt;とりあえず、現在のワインの1レコード分の画面を見てみます。以下のように、色々なカラムの値が表示されています。&lt;/p&gt;&lt;p&gt;「Tenuta San Guido Guidalberto」というワインのレコードです。これ美味かったなあ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;864&quot; src=&quot;/_astro/15.CzPgjg2E_Z2glbDO.webp&quot; srcset=&quot;/_astro/15.CzPgjg2E_Z2glbDO.webp 625w&quot; /&gt;&lt;/p&gt;&lt;p&gt;右下のピンク色の鉛筆ボタンをクリックすると、編集画面に飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;867&quot; src=&quot;/_astro/16.D4GGhDio_HUs05.webp&quot; srcset=&quot;/_astro/16.D4GGhDio_HUs05.webp 630w&quot; /&gt;&lt;/p&gt;&lt;p&gt;レコードの編集画面はこんな感じです。＊がある項目は入力必須項目になります。
&lt;img loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;868&quot; src=&quot;/_astro/17.RSPjkxgU_SRBiz.webp&quot; srcset=&quot;/_astro/17.RSPjkxgU_SRBiz.webp 631w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Clear ×」ボタンを押せば画像は無くなって、カメラボタンを押せば新しく画像をアップロードできます。そして、新しく画像をアップロードして「Save」をクリックするとどうなるのかと言いますと・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;863&quot; src=&quot;/_astro/18.B_P3CVOK_Z1nAlo8.webp&quot; srcset=&quot;/_astro/18.B_P3CVOK_Z1nAlo8.webp 625w&quot; /&gt;&lt;/p&gt;&lt;p&gt;こちら、Googleドライブ上のテーブルのデータが入っているシートがあるフォルダになるのですが、今回、そのデータがあるシート名が「wine🍷」なので、この画像の中の「wine🍷_Images」にアップロードした画像が入っています。
&lt;img loading=&quot;lazy&quot; width=&quot;2039&quot; height=&quot;719&quot; src=&quot;/_astro/19.CARfwaxd_Z1Y2gcs.webp&quot; srcset=&quot;/_astro/19.CARfwaxd_Z1dtCVy.webp 640w, /_astro/19.CARfwaxd_10smmx.webp 750w, /_astro/19.CARfwaxd_yDmwA.webp 828w, /_astro/19.CARfwaxd_Z2ttf7N.webp 1080w, /_astro/19.CARfwaxd_Z1jLzGt.webp 1280w, /_astro/19.CARfwaxd_ZRmuXO.webp 1668w, /_astro/19.CARfwaxd_Z1Y2gcs.webp 2039w&quot; /&gt;&lt;/p&gt;&lt;p&gt;実際に「wine🍷_Images」フォルダを見ると、画像が格納されていることが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1885&quot; height=&quot;1125&quot; src=&quot;/_astro/20.07AZaPn6_Z1mrxuz.webp&quot; srcset=&quot;/_astro/20.07AZaPn6_Z1lemey.webp 640w, /_astro/20.07AZaPn6_1mbtB5.webp 750w, /_astro/20.07AZaPn6_ZntxFy.webp 828w, /_astro/20.07AZaPn6_Z1x6777.webp 1080w, /_astro/20.07AZaPn6_1JMAgF.webp 1280w, /_astro/20.07AZaPn6_ZVTz4M.webp 1668w, /_astro/20.07AZaPn6_Z1mrxuz.webp 1885w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「wine🍷_Images」フォルダ内の画像のパスが、シートに入っていることも確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2313&quot; height=&quot;939&quot; src=&quot;/_astro/21.D2T3205Z_Z1wxR5a.webp&quot; srcset=&quot;/_astro/21.D2T3205Z_ZpCP8m.webp 640w, /_astro/21.D2T3205Z_RRmLu.webp 750w, /_astro/21.D2T3205Z_Z1Q2CpU.webp 828w, /_astro/21.D2T3205Z_Z1i5rbi.webp 1080w, /_astro/21.D2T3205Z_ZbWY7s.webp 1280w, /_astro/21.D2T3205Z_bkyjp.webp 1668w, /_astro/21.D2T3205Z_ZY1D9f.webp 2048w, /_astro/21.D2T3205Z_Z1wxR5a.webp 2313w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;AppSheetでのビュー設定&lt;a href=&quot;#appsheetでのビュー設定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここでは、実際に画面のデザインをする設定の紹介になります。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その0&lt;a href=&quot;#ビューの設定_その0&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「Cellar」機能の紹介です。
&lt;img loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;1028&quot; src=&quot;/_astro/27.CYoArwNf_Z2oh6lr.webp&quot; srcset=&quot;/_astro/27.CYoArwNf_ciOAL.webp 640w, /_astro/27.CYoArwNf_15pyNz.webp 750w, /_astro/27.CYoArwNf_Z1kzUb5.webp 828w, /_astro/27.CYoArwNf_CdNXP.webp 1080w, /_astro/27.CYoArwNf_Z1I14J4.webp 1280w, /_astro/27.CYoArwNf_Z1bzPRK.webp 1668w, /_astro/27.CYoArwNf_Z2oh6lr.webp 2012w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その1&lt;a href=&quot;#ビューの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上の画像にある通り、 「View name」には「Cellar」と入力して、「View type」にはcardを選択します。 「Position」はleft mostに設定しています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その2&lt;a href=&quot;#ビューの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;View Optionsでは、「Sort by」で表示する順番を設定したり、「Group by」でどうグループ分けするかを設定できます。&lt;/p&gt;&lt;p&gt;「Group aggregate」では、Group byしたときにそのグループの何を表示するかを設定できます。今回はCOUNTなので、Group名の横に件数が表示されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2008&quot; height=&quot;1033&quot; src=&quot;/_astro/28.BujpPmja_ZkMlJI.webp&quot; srcset=&quot;/_astro/28.BujpPmja_Z205svD.webp 640w, /_astro/28.BujpPmja_1q3iBl.webp 750w, /_astro/28.BujpPmja_ZYWbnj.webp 828w, /_astro/28.BujpPmja_Z1CD2pv.webp 1080w, /_astro/28.BujpPmja_16jcFw.webp 1280w, /_astro/28.BujpPmja_1yCTg3.webp 1668w, /_astro/28.BujpPmja_ZkMlJI.webp 2008w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ビューの設定_その3&lt;a href=&quot;#ビューの設定_その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Layoutで、どのようなデザインで表示するかビジュアル的に設定できます。
&lt;img loading=&quot;lazy&quot; width=&quot;2031&quot; height=&quot;725&quot; src=&quot;/_astro/29.DFcZgBbx_fgcMt.webp&quot; srcset=&quot;/_astro/29.DFcZgBbx_Z1y2670.webp 640w, /_astro/29.DFcZgBbx_Zt85Y8.webp 750w, /_astro/29.DFcZgBbx_ZTW5O5.webp 828w, /_astro/29.DFcZgBbx_ZdbjQ3.webp 1080w, /_astro/29.DFcZgBbx_Z1ADLjt.webp 1280w, /_astro/29.DFcZgBbx_Z1aGAl8.webp 1668w, /_astro/29.DFcZgBbx_fgcMt.webp 2031w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これ以降のビュー設定は後ほど見てみますので、一旦保留にします。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;グラフの設定_その0&lt;a href=&quot;#グラフの設定_その0&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;今回作ったグラフ機能が、以下の画像の「OriginRatio」機能になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2035&quot; height=&quot;1025&quot; src=&quot;/_astro/23.DU9DkDpz_11zh4N.webp&quot; srcset=&quot;/_astro/23.DU9DkDpz_Z1u1VTe.webp 640w, /_astro/23.DU9DkDpz_1WyHX4.webp 750w, /_astro/23.DU9DkDpz_24IkRa.webp 828w, /_astro/23.DU9DkDpz_Ze3whn.webp 1080w, /_astro/23.DU9DkDpz_Z95rU.webp 1280w, /_astro/23.DU9DkDpz_Z1TE8Ao.webp 1668w, /_astro/23.DU9DkDpz_11zh4N.webp 2035w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;グラフの設定_その1&lt;a href=&quot;#グラフの設定_その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上の画像にある通り、「View name」には「OriginRatio」と入力しています。&lt;/p&gt;&lt;p&gt;「For this data」には、このビューで使うテーブルを選択します。&lt;/p&gt;&lt;p&gt;「View type」には、どのような形式でデータを表示するかを設定します。2021/11/07時点では、11種類の形式でデータを表現することができます。&lt;/p&gt;&lt;p&gt;「Position」にはleftが入っていますが、「Cellar」機能がleft mostなので、左から２番めに表示されています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;グラフの設定_その2&lt;a href=&quot;#グラフの設定_その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;次に、View Optionsの設定になります。
&lt;img loading=&quot;lazy&quot; width=&quot;2014&quot; height=&quot;1036&quot; src=&quot;/_astro/24.BD-YdnWH_Z2lqQX8.webp&quot; srcset=&quot;/_astro/24.BD-YdnWH_Z1XT1Wl.webp 640w, /_astro/24.BD-YdnWH_1reJaD.webp 750w, /_astro/24.BD-YdnWH_ZXKJO1.webp 828w, /_astro/24.BD-YdnWH_Z11OwYm.webp 1080w, /_astro/24.BD-YdnWH_1H7H6F.webp 1280w, /_astro/24.BD-YdnWH_2aroGc.webp 1668w, /_astro/24.BD-YdnWH_Z2lqQX8.webp 2014w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Chart type」は、histogramにします。&lt;/p&gt;&lt;p&gt;「Group aggregate」は、COUNTを取ります。「Chart columns」は、原産国のカラムを取ります。これで、原産国のCOUNTを取ります。&lt;/p&gt;&lt;p&gt;「Chart colors」で、チャートの色を決めます。今回は、下のビュー選択ボタンと同じ色のピンクに設定します。&lt;/p&gt;&lt;p&gt;「Trend line」はちょっと分からんです。Noneにしています。&lt;/p&gt;&lt;p&gt;ちなみに、右側のアプリ画面で「France」にマウスのフォーカスを当てると、「France: 13」とポップアップされています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;グラフの設定_その3&lt;a href=&quot;#グラフの設定_その3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まだ、続きます。
&lt;img loading=&quot;lazy&quot; width=&quot;2025&quot; height=&quot;1007&quot; src=&quot;/_astro/25.MLdGvNGw_2lw69O.webp&quot; srcset=&quot;/_astro/25.MLdGvNGw_22sol8.webp 640w, /_astro/25.MLdGvNGw_nx6CK.webp 750w, /_astro/25.MLdGvNGw_uGIwQ.webp 828w, /_astro/25.MLdGvNGw_3eWko.webp 1080w, /_astro/25.MLdGvNGw_Z2dSp6I.webp 1280w, /_astro/25.MLdGvNGw_1K51Rb.webp 1668w, /_astro/25.MLdGvNGw_2lw69O.webp 2025w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「Show legend」でグラフの凡例を表示するかどうかを設定します。ONになっています。&lt;/p&gt;&lt;p&gt;次にDisplay設定です。「Icon」はuser-chartにします。他は特に設定していません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;グラフの設定_その4&lt;a href=&quot;#グラフの設定_その4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;その他の設定です。ここらへんは特に設定していませんが、画面は載せておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;2021&quot; height=&quot;965&quot; src=&quot;/_astro/26.5yxAkeBp_Z1xHIYt.webp&quot; srcset=&quot;/_astro/26.5yxAkeBp_ZF1vYF.webp 640w, /_astro/26.5yxAkeBp_1MQuR9.webp 750w, /_astro/26.5yxAkeBp_ZB66gr.webp 828w, /_astro/26.5yxAkeBp_UzPdD.webp 1080w, /_astro/26.5yxAkeBp_1YrTFI.webp 1280w, /_astro/26.5yxAkeBp_ZgmjHY.webp 1668w, /_astro/26.5yxAkeBp_Z1xHIYt.webp 2021w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;完成！&lt;a href=&quot;#完成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;はい！　一旦ここまでの設定でSAVEすると、アプリができました！&lt;/p&gt;&lt;p&gt;ここで作ったアプリは、スマホでもAppSheetのアプリを入れれば使用できるはずです。&lt;/p&gt;&lt;p&gt;今回は、入力方法をあまり詳細に設定しなかったので、今度やってみたいと思います。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うおおお、今回はこんなもんかあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今度はサバ缶で作ってよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;サバ缶？&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>【画像編集】GIMPで矢印を描画するために使うプラグイン</title><link>https://endorphinbath.com/posts/gimp-to-draw-arrow/</link><guid isPermaLink="true">https://endorphinbath.com/posts/gimp-to-draw-arrow/</guid><description>GIMPでそれなりに良さげな矢印を引けるプラグインを紹介します。Windows標準のペイントの矢印に不満があれば、ぜひ使ってみて下さい。</description><pubDate>Wed, 03 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_020.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ぐぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬんうぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬぬ・・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;gifかwebpにしたら減らせるのだろうか&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_008.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あー！ Windows標準のペイントの矢印がダサすぎるんじゃ！ ちょっと矢印を長くしたら、先っぽも長くなって、正直キツイ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よーし、じゃあ今回は、GIMPでそれなりの矢印を描画するプラグインを紹介すんぞお！&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Windowsの矢印がキツイ&lt;a href=&quot;#windowsの矢印がキツイ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;うーん、このデザインはちょっとキツイ・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;501&quot; src=&quot;/_astro/00.FuxdzpJC_Z2daV21.webp&quot; srcset=&quot;/_astro/00.FuxdzpJC_1r9ycr.webp 640w, /_astro/00.FuxdzpJC_Z2daV21.webp 712w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プラグインを入手&lt;a href=&quot;#プラグインを入手&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GIMPのプラグインをここから入手します。&lt;/p&gt;&lt;a href=&quot;https://www.gimp-forum.net/Thread-Arrow-Script&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;www.gimp-forum.net&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Arrow Script&lt;/div&gt;&lt;div&gt;Looking at the available script-fu and plug-ins available for drawing arrows, I found it difficult to find a compromise between very simple hands-on involving manually stroking paths and all-encompass&lt;/div&gt;&lt;div&gt;www.gimp-forum.net&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、ここをクリックしてダウンロードします。&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;1258&quot; src=&quot;/_astro/01.XQ27Vbkj_y5ji1.webp&quot; srcset=&quot;/_astro/01.XQ27Vbkj_eW1Ge.webp 640w, /_astro/01.XQ27Vbkj_m1Ncl.webp 750w, /_astro/01.XQ27Vbkj_Z1o2t11.webp 828w, /_astro/01.XQ27Vbkj_Z1KcpiY.webp 1080w, /_astro/01.XQ27Vbkj_jKL7D.webp 1280w, /_astro/01.XQ27Vbkj_Zvawek.webp 1668w, /_astro/01.XQ27Vbkj_y5ji1.webp 1886w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;プラグインの導入&lt;a href=&quot;#プラグインの導入&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;次に、プラグインを導入するために、先程ダウンロードしたプラグインのファイルをどこに置けば使えるようになるかを、GIMPの設定で確認しましょう。&lt;/p&gt;&lt;p&gt;まず、GIMPの設定画面を開いて、「フォルダ」配下の「スクリプト」をクリックします。すると、パスが表示されるのでメモっておきましょう。（画像はWindowsのものです。）
&lt;img loading=&quot;lazy&quot; width=&quot;1708&quot; height=&quot;606&quot; src=&quot;/_astro/02.BwWCRfvC_22S7Xd.webp&quot; srcset=&quot;/_astro/02.BwWCRfvC_Z2qVb1h.webp 640w, /_astro/02.BwWCRfvC_ZM0Fii.webp 750w, /_astro/02.BwWCRfvC_Z1dOF8f.webp 828w, /_astro/02.BwWCRfvC_Z2b30Rr.webp 1080w, /_astro/02.BwWCRfvC_1vFFt4.webp 1280w, /_astro/02.BwWCRfvC_1VCQrp.webp 1668w, /_astro/02.BwWCRfvC_22S7Xd.webp 1708w&quot; /&gt;&lt;/p&gt;&lt;p&gt;次に、ダウンロードしたzipファイルを開いて、そのファイルを先程メモしたフォルダに置きます。WindowsとmacOSでそれぞれここらへんっぽいです。macOSの場合は、.appを右クリックしてパッケージの中身を確認すると出てくるかと思います。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Windows: &lt;code&gt;C:\Users\%USERNAME%\AppData\Roaming\GIMP\2.10\scripts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;/Applications/GIMP-2.10.app/Contents/Resource/share/gimp/2.0/scripts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、ファイルを置いた後、GIMPを再度起動させると、「ツール」の中に「Arrow-set-size」が表示されているのが確認できます。
&lt;img loading=&quot;lazy&quot; width=&quot;1211&quot; height=&quot;760&quot; src=&quot;/_astro/03.hy0jwbMq_16gSGh.webp&quot; srcset=&quot;/_astro/03.hy0jwbMq_1r6SRP.webp 640w, /_astro/03.hy0jwbMq_xJcIu.webp 750w, /_astro/03.hy0jwbMq_23sPti.webp 828w, /_astro/03.hy0jwbMq_eyh1a.webp 1080w, /_astro/03.hy0jwbMq_16gSGh.webp 1211w&quot; /&gt;&lt;/p&gt;&lt;p&gt;パスを引いてから、「Arrow-set-size」の機能を使ってみると、こんな感じで矢印が引けました！（「Length of wings」を30にしてみた。）&lt;/p&gt;&lt;p&gt;これで良い！
&lt;img loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;742&quot; src=&quot;/_astro/04.BrnfSCGI_2jUSBh.webp&quot; srcset=&quot;/_astro/04.BrnfSCGI_tp0Bv.webp 640w, /_astro/04.BrnfSCGI_ZfFWMt.webp 750w, /_astro/04.BrnfSCGI_Z211ppO.webp 828w, /_astro/04.BrnfSCGI_2jUSBh.webp 894w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これなら良い！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;この他にも矢印のブラシもどこかにあるらしいから、今度試してみようかねえ。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【バッチ、Windows】フォルダをコピーしまくりたいときに便利なコマンド「Robocopy」</title><link>https://endorphinbath.com/posts/batch-robocopy/</link><guid isPermaLink="true">https://endorphinbath.com/posts/batch-robocopy/</guid><description>最近、フォルダをコピーする機会が多く、そのときに「Robocopy」コマンドを打つことが多くなったので、ここらで集中的に記事としてまとめたいと思います。増分バックアップが出来そうなオプションなど個人で使えそうなものを紹介します。</description><pubDate>Tue, 02 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ロボコピーだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;カワイイ響きじゃんよ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;基本的な構文だけだとフォルダをコピーできないのだ。&lt;a href=&quot;#基本的な構文だけだとフォルダをコピーできないのだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最近、フォルダをコピーする機会が多く、そのときに「Robocopy」コマンドを打つことが多くなったので、ここらで集中的に記事としてまとめたいと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああっ？コピーするコマンドなんだから、`robocopy a b` 的な感じで打てばいいんだろう？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そう慌てるでない。まあ、いっぺんそれで打ってみ。あ、aの中にサブフォルダとかも入れてみてね。空のほうが良いな。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1314&quot; height=&quot;642&quot; src=&quot;/_astro/01.DEDX89Ne_Z1Si0C4.webp&quot; srcset=&quot;/_astro/01.DEDX89Ne_Z198JB9.webp 640w, /_astro/01.DEDX89Ne_JHLEy.webp 750w, /_astro/01.DEDX89Ne_ZhzBuO.webp 828w, /_astro/01.DEDX89Ne_Z19TUdc.webp 1080w, /_astro/01.DEDX89Ne_Z6aUIG.webp 1280w, /_astro/01.DEDX89Ne_Z1Si0C4.webp 1314w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「a」フォルダに画像のとおりにファイルとフォルダを入れて以下のコマンドを打ってみる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1124&quot; height=&quot;323&quot; src=&quot;/_astro/02.zBl_3ig-_XePhN.webp&quot; srcset=&quot;/_astro/02.zBl_3ig-_Z2v9ggH.webp 640w, /_astro/02.zBl_3ig-_2tz3I8.webp 750w, /_astro/02.zBl_3ig-_2hOapt.webp 828w, /_astro/02.zBl_3ig-_9wGCc.webp 1080w, /_astro/02.zBl_3ig-_XePhN.webp 1124w&quot; /&gt;&lt;/p&gt;&lt;p&gt;すると、「foruda」フォルダがコピーされていないことが確認できる。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ハァァアン？？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これが`robocopy`の仕様なのだ。サブフォルダもコピーするためにはオプション値を入れなければならんのだ。これをいっつも忘れるんだよな・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;僕がいつも使ってるrobocopy文&lt;a href=&quot;#僕がいつも使ってるrobocopy文&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕がいつも使うときは、大抵まるっとコピーしたいので、以下の文を使います。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;すると・・・
&lt;img loading=&quot;lazy&quot; width=&quot;1182&quot; height=&quot;389&quot; src=&quot;/_astro/03.BJUluCTo_Nwfvv.webp&quot; srcset=&quot;/_astro/03.BJUluCTo_1t7uM7.webp 640w, /_astro/03.BJUluCTo_1E2Bg3.webp 750w, /_astro/03.BJUluCTo_Z28T1Bu.webp 828w, /_astro/03.BJUluCTo_2oO6KK.webp 1080w, /_astro/03.BJUluCTo_Nwfvv.webp 1182w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そうだよ、これだよ&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今入れたオプション値は以下の効果があるのよ。&lt;/div&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;S&lt;/code&gt;: サブディレクトリをコピーして、空のディレクトリはコピーしない。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E&lt;/code&gt;: 空のサブディレクトリもコピーする。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;コピー元から削除したい場合の書き方&lt;a href=&quot;#コピー元から削除したい場合の書き方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このrobocopyなんだが、コピーだけじゃなく移動もできます。
さっき作った「b」フォルダを「c」としてコピーします。&lt;/p&gt;&lt;p&gt;この文を実行すると、以下の画像のようになる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; b c /s /e /mov&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;224&quot; src=&quot;/_astro/04.ClDr5V3U_ZH6aYA.webp&quot; srcset=&quot;/_astro/04.ClDr5V3U_2rn6P4.webp 640w, /_astro/04.ClDr5V3U_Z1Xjv0S.webp 750w, /_astro/04.ClDr5V3U_Z2rGfXf.webp 828w, /_astro/04.ClDr5V3U_ZH6aYA.webp 993w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1128&quot; height=&quot;253&quot; src=&quot;/_astro/05.BxAPXMMY_ZFzECs.webp&quot; srcset=&quot;/_astro/05.BxAPXMMY_ZVVfDV.webp 640w, /_astro/05.BxAPXMMY_Z2a0aTW.webp 750w, /_astro/05.BxAPXMMY_Z3E3Q9.webp 828w, /_astro/05.BxAPXMMY_Z1uGa2o.webp 1080w, /_astro/05.BxAPXMMY_ZFzECs.webp 1128w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、この文を実行すると、 以下の画像のようになる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; b c /s /e /move&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1003&quot; height=&quot;230&quot; src=&quot;/_astro/06.C8DcJOly_17u5LH.webp&quot; srcset=&quot;/_astro/06.C8DcJOly_Z11jXWS.webp 640w, /_astro/06.C8DcJOly_nEucn.webp 750w, /_astro/06.C8DcJOly_2u0Bgb.webp 828w, /_astro/06.C8DcJOly_17u5LH.webp 1003w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1151&quot; height=&quot;244&quot; src=&quot;/_astro/07.DnH-VLwO_Z2pV22p.webp&quot; srcset=&quot;/_astro/07.DnH-VLwO_nunw3.webp 640w, /_astro/07.DnH-VLwO_Zfx28Q.webp 750w, /_astro/07.DnH-VLwO_2pOzv4.webp 828w, /_astro/07.DnH-VLwO_ZL1liU.webp 1080w, /_astro/07.DnH-VLwO_Z2pV22p.webp 1151w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;「/mov」だとコピー元フォルダの中のファイルが無くなって、 「/move」だとコピー元フォルダごと無くなるんだよね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;なるほどなあ。 「/mov」は家の中のものを盗る泥棒猫で、「/move」は家ごと盗る結婚詐欺師って感じだね。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おお・・・そうだといいな・・・&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;フォルダ構造だけコピーしたい場合の書き方&lt;a href=&quot;#フォルダ構造だけコピーしたい場合の書き方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ファイルは要らねえ！フォルダだけくれ！っていうケースを紹介します。
「a」フォルダに以下のファイルとフォルダを追加します。
&lt;img loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;210&quot; src=&quot;/_astro/08.B-5OTSyV_Z1p0Uxn.webp&quot; srcset=&quot;/_astro/08.B-5OTSyV_ZrCznh.webp 640w, /_astro/08.B-5OTSyV_ZvDus4.webp 750w, /_astro/08.B-5OTSyV_Z1Lq1qQ.webp 828w, /_astro/08.B-5OTSyV_Z1p0Uxn.webp 1059w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以下の2つのコマンドを比べてみると、&lt;code&gt;/nocopy&lt;/code&gt;を入れたらファイルがコピーされずにフォルダ構造だけコピーされていることが確認できる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1105&quot; height=&quot;274&quot; src=&quot;/_astro/09.CWz2pCL1_Z2iUyJN.webp&quot; srcset=&quot;/_astro/09.CWz2pCL1_e6fko.webp 640w, /_astro/09.CWz2pCL1_u2Ijq.webp 750w, /_astro/09.CWz2pCL1_Zx7zRn.webp 828w, /_astro/09.CWz2pCL1_ZvUIIW.webp 1080w, /_astro/09.CWz2pCL1_Z2iUyJN.webp 1105w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;977&quot; height=&quot;194&quot; src=&quot;/_astro/10.WIWzgHd9_ZQOMsT.webp&quot; srcset=&quot;/_astro/10.WIWzgHd9_k09vW.webp 640w, /_astro/10.WIWzgHd9_xRg31.webp 750w, /_astro/10.WIWzgHd9_Zm7Tlg.webp 828w, /_astro/10.WIWzgHd9_ZQOMsT.webp 977w&quot; /&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /nocopy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;972&quot; height=&quot;217&quot; src=&quot;/_astro/11.CQl-PrHR_Z1iIs4N.webp&quot; srcset=&quot;/_astro/11.CQl-PrHR_KpKXy.webp 640w, /_astro/11.CQl-PrHR_1h2O7T.webp 750w, /_astro/11.CQl-PrHR_MF4ax.webp 828w, /_astro/11.CQl-PrHR_Z1iIs4N.webp 972w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;206&quot; src=&quot;/_astro/12.B_twPb0O_fvNDz.webp&quot; srcset=&quot;/_astro/12.B_twPb0O_Z2k9WqP.webp 640w, /_astro/12.B_twPb0O_Z1Wpn68.webp 750w, /_astro/12.B_twPb0O_2uwwVN.webp 828w, /_astro/12.B_twPb0O_fvNDz.webp 976w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;大量のファイルとフォルダをコピーする場合に役立ちそうなオプション&lt;a href=&quot;#大量のファイルとフォルダをコピーする場合に役立ちそうなオプション&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HDDとかSSDに自分が個人レベルで持っているデータをバックアップとかで保存したいときに役立ちそうなオプションを紹介するよ。以下の４つ。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/j&lt;/code&gt;：バッファに蓄積せずにコピー。メモリ使用量を削減。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/purge&lt;/code&gt;：コピー先フォルダが既にある場合に、コピー元フォルダに存在しないコピー先フォルダ内のファイル・フォルダを削除する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/minage:yyyymmdd&lt;/code&gt;：コピー元フォルダ内の更新日時が指定日時より新しいファイルを除外する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/XN&lt;/code&gt;で新しいのを除外。&lt;code&gt;/XO&lt;/code&gt;で古いのを除外。&lt;/li&gt;
&lt;/ul&gt;&lt;section&gt;&lt;h3&gt;/j：バッファに蓄積せずにコピー。メモリ使用量を削減。&lt;a href=&quot;#jバッファに蓄積せずにコピーメモリ使用量を削減&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、&lt;code&gt;/j&lt;/code&gt;を使って、「b」フォルダを作ります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /j&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1105&quot; height=&quot;274&quot; src=&quot;/_astro/09.CWz2pCL1_Z2iUyJN.webp&quot; srcset=&quot;/_astro/09.CWz2pCL1_e6fko.webp 640w, /_astro/09.CWz2pCL1_u2Ijq.webp 750w, /_astro/09.CWz2pCL1_Zx7zRn.webp 828w, /_astro/09.CWz2pCL1_ZvUIIW.webp 1080w, /_astro/09.CWz2pCL1_Z2iUyJN.webp 1105w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;977&quot; height=&quot;194&quot; src=&quot;/_astro/10.WIWzgHd9_ZQOMsT.webp&quot; srcset=&quot;/_astro/10.WIWzgHd9_k09vW.webp 640w, /_astro/10.WIWzgHd9_xRg31.webp 750w, /_astro/10.WIWzgHd9_Zm7Tlg.webp 828w, /_astro/10.WIWzgHd9_ZQOMsT.webp 977w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;/purge：コピー元フォルダにないものはコピー先フォルダで削除。&lt;a href=&quot;#purgeコピー元フォルダにないものはコピー先フォルダで削除&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、「a」フォルダからtest.txtを消します。その状態で、/purgeすると、「b」フォルダからtest.txtが無くなるんだわ。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /j /purge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;201&quot; src=&quot;/_astro/13.CA7AyXRR_Ze2gKG.webp&quot; srcset=&quot;/_astro/13.CA7AyXRR_Z218lHw.webp 640w, /_astro/13.CA7AyXRR_Z1DnLmO.webp 750w, /_astro/13.CA7AyXRR_Z2pvsWs.webp 828w, /_astro/13.CA7AyXRR_Ze2gKG.webp 955w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;/XN：コピー元が新しいとコピーされなくする&lt;a href=&quot;#xnコピー元が新しいとコピーされなくする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;280&quot; src=&quot;/_astro/19.gojlVdxe_2nEBsA.webp&quot; srcset=&quot;/_astro/19.gojlVdxe_1AUGsQ.webp 640w, /_astro/19.gojlVdxe_ZLdpcn.webp 750w, /_astro/19.gojlVdxe_ZF5gTb.webp 828w, /_astro/19.gojlVdxe_2nEBsA.webp 994w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;918&quot; height=&quot;266&quot; src=&quot;/_astro/20.eFdP9_Jz_1mVCnR.webp&quot; srcset=&quot;/_astro/20.eFdP9_Jz_ZqqYPJ.webp 640w, /_astro/20.eFdP9_Jz_2ptv6B.webp 750w, /_astro/20.eFdP9_Jz_CGStV.webp 828w, /_astro/20.eFdP9_Jz_1mVCnR.webp 918w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この状態で、次のコマンドを打つと、 古いのだけコピーされる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /j /purge /XN&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;935&quot; height=&quot;269&quot; src=&quot;/_astro/18.CZXkHv7L_Z2pHt1D.webp&quot; srcset=&quot;/_astro/18.CZXkHv7L_cE5Yv.webp 640w, /_astro/18.CZXkHv7L_Z21BwR5.webp 750w, /_astro/18.CZXkHv7L_Z1UtoyS.webp 828w, /_astro/18.CZXkHv7L_Z2pHt1D.webp 935w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;/XO：コピー元が古いとコピーされなくする&lt;a href=&quot;#xoコピー元が古いとコピーされなくする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;280&quot; src=&quot;/_astro/19.gojlVdxe_2nEBsA.webp&quot; srcset=&quot;/_astro/19.gojlVdxe_1AUGsQ.webp 640w, /_astro/19.gojlVdxe_ZLdpcn.webp 750w, /_astro/19.gojlVdxe_ZF5gTb.webp 828w, /_astro/19.gojlVdxe_2nEBsA.webp 994w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;994&quot; height=&quot;280&quot; src=&quot;/_astro/19.gojlVdxe_2nEBsA.webp&quot; srcset=&quot;/_astro/19.gojlVdxe_1AUGsQ.webp 640w, /_astro/19.gojlVdxe_ZLdpcn.webp 750w, /_astro/19.gojlVdxe_ZF5gTb.webp 828w, /_astro/19.gojlVdxe_2nEBsA.webp 994w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このコマンドを打つと、新しいのだけコピーする増分バックアップができる。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /j /purge /XO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;918&quot; height=&quot;266&quot; src=&quot;/_astro/20.eFdP9_Jz_1mVCnR.webp&quot; srcset=&quot;/_astro/20.eFdP9_Jz_ZqqYPJ.webp 640w, /_astro/20.eFdP9_Jz_2ptv6B.webp 750w, /_astro/20.eFdP9_Jz_CGStV.webp 828w, /_astro/20.eFdP9_Jz_1mVCnR.webp 918w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;/minage：コピー元フォルダ内の更新日時が指定日時より新しいファイルを除外する。&lt;a href=&quot;#minageコピー元フォルダ内の更新日時が指定日時より新しいファイルを除外する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;そして、前にバックアップした日付をメモっていれば、/minageでコピー先に古いファイルのままにしたままで、バックアップもできる。
&lt;img loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;261&quot; src=&quot;/_astro/17.DbmRBdKM_Z1zR6A1.webp&quot; srcset=&quot;/_astro/17.DbmRBdKM_Z1JSi0U.webp 640w, /_astro/17.DbmRBdKM_Nhgj9.webp 750w, /_astro/17.DbmRBdKM_Z17mO7a.webp 828w, /_astro/17.DbmRBdKM_Z1zR6A1.webp 940w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;935&quot; height=&quot;269&quot; src=&quot;/_astro/18.CZXkHv7L_Z2pHt1D.webp&quot; srcset=&quot;/_astro/18.CZXkHv7L_cE5Yv.webp 640w, /_astro/18.CZXkHv7L_Z21BwR5.webp 750w, /_astro/18.CZXkHv7L_Z1UtoyS.webp 828w, /_astro/18.CZXkHv7L_Z2pHt1D.webp 935w&quot; /&gt;&lt;/p&gt;&lt;p&gt;この状態で以下のコマンドを実行すると・・・&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;robocopy&lt;/span&gt;&lt;span&gt; a b /s /e /j /purge /minage:20111026&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;935&quot; height=&quot;269&quot; src=&quot;/_astro/18.CZXkHv7L_Z2pHt1D.webp&quot; srcset=&quot;/_astro/18.CZXkHv7L_cE5Yv.webp 640w, /_astro/18.CZXkHv7L_Z21BwR5.webp 750w, /_astro/18.CZXkHv7L_Z1UtoyS.webp 828w, /_astro/18.CZXkHv7L_Z2pHt1D.webp 935w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これがロボコピーだ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;けっこう色々できるじゃんよ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;参考になったサイト&lt;a href=&quot;#参考になったサイト&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;このサイトがすごくゴリゴリ網羅されていました。もっと知りたかったらオススメです。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://n-archives.net/software/robosync/articles/robocopy-specs-and-command&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;n-archives.net&lt;/span&gt;&lt;/div&gt;&lt;div&gt;n-archives.net&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;n-archives.net&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】複数の画像を一気にトリミングするスクリプトを作った話</title><link>https://endorphinbath.com/posts/trim-multiple-images/</link><guid isPermaLink="true">https://endorphinbath.com/posts/trim-multiple-images/</guid><description>複数の画像を一気にトリミングするツールをPythonで作りました。使い方としては、最初に切り出したい範囲を選んで確定したら、そのエリアで後続の画像も切り出します。利用したモジュールは、OpenCVやTKinter、matplotlibになります。</description><pubDate>Mon, 01 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はあ～、最近髪伸びてきたなあ、切ろっかな～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;そういえば、画像を一気に切り抜いてくれるツールを作ったのを思い出したわ！ 今回はそのツールを紹介するぜ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おぉ、切ってくれぇ&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Anaconda Promptで動かしていきます。&lt;/p&gt;&lt;p&gt;まず、切り抜きたい、トリミングしたい画像たちが入っているフォルダを指定します。
&lt;img loading=&quot;lazy&quot; width=&quot;1844&quot; height=&quot;1027&quot; src=&quot;/_astro/01.CwZGKIKa_Z258hL0.webp&quot; srcset=&quot;/_astro/01.CwZGKIKa_1i8cUf.webp 640w, /_astro/01.CwZGKIKa_Z14mU5T.webp 750w, /_astro/01.CwZGKIKa_ZgJKvd.webp 828w, /_astro/01.CwZGKIKa_Z27OjgM.webp 1080w, /_astro/01.CwZGKIKa_26yMX1.webp 1280w, /_astro/01.CwZGKIKa_Z1dblVY.webp 1668w, /_astro/01.CwZGKIKa_Z258hL0.webp 1844w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像がないフォルダを選ぶとスクリプトは何もなく終了です。
&lt;img loading=&quot;lazy&quot; width=&quot;1155&quot; height=&quot;147&quot; src=&quot;/_astro/02.v7UsORJG_Z2lYwdW.webp&quot; srcset=&quot;/_astro/02.v7UsORJG_1z5jSn.webp 640w, /_astro/02.v7UsORJG_Z2b0ChO.webp 750w, /_astro/02.v7UsORJG_Z2lO0cj.webp 828w, /_astro/02.v7UsORJG_ZJ4aWF.webp 1080w, /_astro/02.v7UsORJG_Z2lYwdW.webp 1155w&quot; /&gt;&lt;/p&gt;&lt;p&gt;１度選んだ範囲で全てトリミングするか、毎回トリミングする範囲を選んでトリミングするかを選びます。今回は「1」にします。（まあ、「1」が出来ることが今回のスクリプトの真骨頂なので。）&lt;/p&gt;&lt;p&gt;表示されているディレクトリがWindowsなのに「/」区切りになっているのが気になりますが、まあ、一旦進んでみましょう。
&lt;img loading=&quot;lazy&quot; width=&quot;1397&quot; height=&quot;357&quot; src=&quot;/_astro/03.Bwhc_yQv_2cXPgF.webp&quot; srcset=&quot;/_astro/03.Bwhc_yQv_Z2rXrlr.webp 640w, /_astro/03.Bwhc_yQv_2j8EQp.webp 750w, /_astro/03.Bwhc_yQv_GVQ4u.webp 828w, /_astro/03.Bwhc_yQv_Ze9Wj.webp 1080w, /_astro/03.Bwhc_yQv_Z1jA58W.webp 1280w, /_astro/03.Bwhc_yQv_2cXPgF.webp 1397w&quot; /&gt;&lt;/p&gt;&lt;p&gt;トリミングした後のファイルを保存するフォルダの名前を入力します。今回は「トリミング後」にします。
&lt;img loading=&quot;lazy&quot; width=&quot;1188&quot; height=&quot;263&quot; src=&quot;/_astro/04.BMzetWye_hJfOP.webp&quot; srcset=&quot;/_astro/04.BMzetWye_1LJP0i.webp 640w, /_astro/04.BMzetWye_yFTJh.webp 750w, /_astro/04.BMzetWye_Z1P8BpJ.webp 828w, /_astro/04.BMzetWye_1QXi35.webp 1080w, /_astro/04.BMzetWye_hJfOP.webp 1188w&quot; /&gt;&lt;/p&gt;&lt;p&gt;入力すると、実際にトリミングする画面になります。画面サイズは決めておらず、縦長の画像なので、最初はこんな風に歪みます。（デフォルトの画面サイズは設定できるんですかねえ？　まあ、使えればいいので、これで良いですが。）
&lt;img loading=&quot;lazy&quot; width=&quot;1162&quot; height=&quot;1194&quot; src=&quot;/_astro/05.BZP58d0f_Z5hnX3.webp&quot; srcset=&quot;/_astro/05.BZP58d0f_1RdlNE.webp 640w, /_astro/05.BZP58d0f_1Q54Lc.webp 750w, /_astro/05.BZP58d0f_ZH8sL2.webp 828w, /_astro/05.BZP58d0f_2jTdeN.webp 1080w, /_astro/05.BZP58d0f_Z5hnX3.webp 1162w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画面も縦長にすれば、まあ見れる感じになりました。
&lt;img loading=&quot;lazy&quot; width=&quot;1084&quot; height=&quot;1211&quot; src=&quot;/_astro/06.Cfn0ucSb_2glMMo.webp&quot; srcset=&quot;/_astro/06.Cfn0ucSb_Z25zHYF.webp 640w, /_astro/06.Cfn0ucSb_Z27noU0.webp 750w, /_astro/06.Cfn0ucSb_mJ2FF.webp 828w, /_astro/06.Cfn0ucSb_yk43v.webp 1080w, /_astro/06.Cfn0ucSb_2glMMo.webp 1084w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、下の４つのスライダーを動かすと、実際にトリムする範囲を指定できます。&lt;/p&gt;&lt;p&gt;上限が青の線、下限がオレンジの線、左限が緑の線、右限が赤の線です。
&lt;img loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;1106&quot; src=&quot;/_astro/07.QfwgH9KU_5ke0r.webp&quot; srcset=&quot;/_astro/07.QfwgH9KU_Z2kpans.webp 640w, /_astro/07.QfwgH9KU_1zu24N.webp 750w, /_astro/07.QfwgH9KU_1dP4bk.webp 828w, /_astro/07.QfwgH9KU_5ke0r.webp 837w&quot; /&gt;&lt;/p&gt;&lt;p&gt;範囲を選んだら、ウインドウを×ボタンで閉じます。&lt;/p&gt;&lt;p&gt;すると・・・・、&lt;strong&gt;できない！！！&lt;/strong&gt;
&lt;img loading=&quot;lazy&quot; width=&quot;1747&quot; height=&quot;116&quot; src=&quot;/_astro/08.ChNObazo_Z2i4jT3.webp&quot; srcset=&quot;/_astro/08.ChNObazo_ZP9qTx.webp 640w, /_astro/08.ChNObazo_Z196nx3.webp 750w, /_astro/08.ChNObazo_21oras.webp 828w, /_astro/08.ChNObazo_Z2cdGTG.webp 1080w, /_astro/08.ChNObazo_Z8h1e6.webp 1280w, /_astro/08.ChNObazo_ZIwK7r.webp 1668w, /_astro/08.ChNObazo_Z2i4jT3.webp 1747w&quot; /&gt;&lt;/p&gt;&lt;p&gt;なぜ、できないんだ～。っていう過程はとりあえず置いておきます。実はここが日本語になってるのが原因だったりします。
&lt;img loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;212&quot; src=&quot;/_astro/09.DN4GtLLQ_Z1QMFSa.webp&quot; srcset=&quot;/_astro/09.DN4GtLLQ_ZMwmYH.webp 640w, /_astro/09.DN4GtLLQ_2kwAVT.webp 750w, /_astro/09.DN4GtLLQ_2nPOax.webp 828w, /_astro/09.DN4GtLLQ_Z1QMFSa.webp 1054w&quot; /&gt;&lt;/p&gt;&lt;p&gt;直して正常に動いたものが以下になります。「このディレクトリを見て確認してね。」的なメッセージが出てきて、トリミングした画像たちも保存されています。
&lt;img loading=&quot;lazy&quot; width=&quot;1274&quot; height=&quot;404&quot; src=&quot;/_astro/10.D2mpvGpw_Z2vKSd3.webp&quot; srcset=&quot;/_astro/10.D2mpvGpw_Z1uXDmf.webp 640w, /_astro/10.D2mpvGpw_ZK22ic.webp 750w, /_astro/10.D2mpvGpw_wdsDc.webp 828w, /_astro/10.D2mpvGpw_Z18tNdD.webp 1080w, /_astro/10.D2mpvGpw_Z2vKSd3.webp 1274w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1276&quot; height=&quot;838&quot; src=&quot;/_astro/11.9Oje9GQb_1dGXnb.webp&quot; srcset=&quot;/_astro/11.9Oje9GQb_Z1DqCAG.webp 640w, /_astro/11.9Oje9GQb_fhNGr.webp 750w, /_astro/11.9Oje9GQb_AXrg1.webp 828w, /_astro/11.9Oje9GQb_Z2faukk.webp 1080w, /_astro/11.9Oje9GQb_1dGXnb.webp 1276w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;気をつけたところ&lt;a href=&quot;#気をつけたところ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここでは、ソースを組むに当たって気をつけたところを記載しています。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;ディレクトリをWindowsの「\」で区切る。&lt;a href=&quot;#ディレクトリをwindowsので区切る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下、ソースの抜粋部分です。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DecideNowDir&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowDir     : String absolutely directory default folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowDirPath : String absolutely path selected folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowDir &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;abspath&lt;/span&gt;&lt;span&gt;(os.path.&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowDirPath &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; filedialog.&lt;/span&gt;&lt;span&gt;askdirectory&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;initialdir&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;nowDir)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Discrimination whether Windows or Mac.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pf &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; platform.&lt;/span&gt;&lt;span&gt;system&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; pf &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;Windows&apos;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;# OS is Windows&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;nowDirPath &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nowDirPath.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;/&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Folder&apos;s Absolutely Path: &lt;/span&gt;&lt;span&gt;{quotation}{folderpath}{quotation}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;quotation&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;&quot;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;folderpath&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;nowDirPath))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; nowDirPath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;該当箇所は、&lt;code&gt;filedialog.askdirectory()&lt;/code&gt;の部分で、これで選択されたファイルのディレクトリはなぜかWindowsでもMacでも”/”区切りとなってしまうみたいなのです。&lt;/p&gt;&lt;p&gt;それで、後続処理に問題が出るかどうかは調べていませんが、どうにも気持ち悪いのでWindowsで動かした時は文字の置換処理が動くようにしています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ディレクトリに日本語が入っていると処理を行わずに強制終了させる。&lt;a href=&quot;#ディレクトリに日本語が入っていると処理を行わずに強制終了させる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下、ソースの抜粋部分です。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TrimImage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;trimmed_img_ext&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;folderList       : List of file filtered with extension in the selected folder.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectTimes      : String of times to input.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir    : String absolutely path of directory has selected file.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;img              : Dictionary of pixels of image. (img [height] [width] [color channel])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;trimmed_img      : Dictionary of pixels of image.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;trimmed_img_ext : String of extension of trimmed_img.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;trimmed_img_name : String of filename of trimmed_img.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fileList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; FileListGetter.&lt;/span&gt;&lt;span&gt;GetFileList&lt;/span&gt;&lt;span&gt;(DirEditor.&lt;/span&gt;&lt;span&gt;DecideNowDir&lt;/span&gt;&lt;span&gt;(),trimmed_img_ext)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;&lt;span&gt;(fileList) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;ImageEditor exits because of no target files.&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;checkStr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;[&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;a-zA-Z0-9\-\_\.\-\s\:\~\^\=]+&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; checkStr.&lt;/span&gt;&lt;span&gt;fullmatch&lt;/span&gt;&lt;span&gt;(fileList[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;ImageEditor exits because of the directory containing shift-jis character.&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectTimes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;What times do you choosing? (&quot;1&quot; or &quot;every&quot;): &apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt;&lt;span&gt; selectTimes &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;1&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt;&lt;span&gt; selectTimes &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;every&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;selectTimes &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Retry. (&quot;1&quot; or &quot;every&quot;): &apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; DirEditor.&lt;/span&gt;&lt;span&gt;MakeDirectory&lt;/span&gt;&lt;span&gt;(fileList[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2個目の「Error Handling」の部分になります。&lt;/p&gt;&lt;p&gt;僕も、この記事を書くために動かして気づいたのですが、この画像切り抜きに使用しているOpenCVというモジュールは、なんと指定したディレクトリに日本語（ちゃんと言うとShift_JIS）が入っていると、画像を読み取れません・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;212&quot; src=&quot;/_astro/09.DN4GtLLQ_Z1QMFSa.webp&quot; srcset=&quot;/_astro/09.DN4GtLLQ_ZMwmYH.webp 640w, /_astro/09.DN4GtLLQ_2kwAVT.webp 750w, /_astro/09.DN4GtLLQ_2nPOax.webp 828w, /_astro/09.DN4GtLLQ_Z1QMFSa.webp 1054w&quot; /&gt;&lt;/p&gt;&lt;p&gt;OpenCVを作った人たちは、Shift_JISを文字だと思っていないようです・・・。日本語を文字だと思っていないようです・・・。&lt;/p&gt;&lt;p&gt;この不具合を回避するために、Pillowやnumpyなどのモジュールを使って処理する方法がありましたが、そこまでして日本語を使いたいわけではないので、いっそのこと、このモジュールを使う時には日本語のディレクトリは使用できないようにエラー処理を行わせるようにしました。&lt;/p&gt;&lt;p&gt;実装方法としては、ソース内で正規表現で指定した文字だけで表記されているディレクトリだけを使用できるようにしています。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;checkStr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;[&lt;/span&gt;&lt;span&gt;\\&lt;/span&gt;&lt;span&gt;a-zA-Z0-9\-\_\.\-\s\:\~\^\=]+&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; checkStr.&lt;/span&gt;&lt;span&gt;fullmatch&lt;/span&gt;&lt;span&gt;(fileList[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;ImageEditor exits because of the directory containing shift-jis character.&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;まとめ&lt;a href=&quot;#まとめ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;私は、ファイル名に日本語を一生使わないことを誓った。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ディレクトリを「\」で区切る。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;じゃあ、髪を区切ってくるわ&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;このツールでトリミングした後は・・・・&lt;a href=&quot;#このツールでトリミングした後は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一気にトリミングした複数の画像の重複を除きたい場合は、以下のツールで重複を排除してみてはいかがでしょうか？
こちらのツールもPythonで動くものになっています！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/remove-duplicate-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】同じような画像が色々な組み合わせで存在する場合に重複分を削除するスクリプトを作った話&lt;/div&gt;&lt;div&gt;同じような画像が色々な組み合わせ・グループで出来てしまった場合に、重複している分を削除するツールをPythonで作りました。OpenCVやTkinterを利用しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211123_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;また、この前段として、以下の記事もあります。&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/extract-movie-to-image/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】動画をフレームごとの画像にして出力するスクリプトを作った話&lt;/div&gt;&lt;div&gt;動画を画像として切り出すツールをPythonで作りました。OpenCVを利用しています。動画として視聴する必要がないコンテンツはこのツールで画像にしてしまいましょう！&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211030_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】動画をフレームごとの画像にして出力するスクリプトを作った話</title><link>https://endorphinbath.com/posts/extract-movie-to-image/</link><guid isPermaLink="true">https://endorphinbath.com/posts/extract-movie-to-image/</guid><description>動画を画像として切り出すツールをPythonで作りました。OpenCVを利用しています。動画として視聴する必要がないコンテンツはこのツールで画像にしてしまいましょう！</description><pubDate>Sat, 30 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;動画から画像を切り出したいな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はい、目玉焼きができたよ～。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールの紹介&lt;a href=&quot;#ツールの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さて、今回使う機能は、&lt;code&gt;ExtractImage()&lt;/code&gt;という関数になります。
&lt;img loading=&quot;lazy&quot; width=&quot;1850&quot; height=&quot;1033&quot; src=&quot;/_astro/01.DiwW48E8_3Iq2X.webp&quot; srcset=&quot;/_astro/01.DiwW48E8_2n3zKF.webp 640w, /_astro/01.DiwW48E8_xrJw.webp 750w, /_astro/01.DiwW48E8_NaBkd.webp 828w, /_astro/01.DiwW48E8_Z1HvTAx.webp 1080w, /_astro/01.DiwW48E8_2vRcDg.webp 1280w, /_astro/01.DiwW48E8_125yeX.webp 1668w, /_astro/01.DiwW48E8_3Iq2X.webp 1850w&quot; /&gt;&lt;/p&gt;&lt;p&gt;スクリプトを起動すると、ファイルを選択するダイアログが表示されます。今回は、このビデオを画像にします。
&lt;img loading=&quot;lazy&quot; width=&quot;2014&quot; height=&quot;1003&quot; src=&quot;/_astro/02.CRXwS5hK_1ocJDt.webp&quot; srcset=&quot;/_astro/02.CRXwS5hK_Z11MAW0.webp 640w, /_astro/02.CRXwS5hK_2otf9y.webp 750w, /_astro/02.CRXwS5hK_Z1o9Qw.webp 828w, /_astro/02.CRXwS5hK_1uSxF5.webp 1080w, /_astro/02.CRXwS5hK_1MTvLk.webp 1280w, /_astro/02.CRXwS5hK_2sxNbd.webp 1668w, /_astro/02.CRXwS5hK_1ocJDt.webp 2014w&quot; /&gt;&lt;/p&gt;&lt;p&gt;選択すると、画像を保存するフォルダの名前を入力します。※日本語（SJIS）は使えません！
&lt;img loading=&quot;lazy&quot; width=&quot;1787&quot; height=&quot;191&quot; src=&quot;/_astro/03.C7fGj1vN_1R9IeR.webp&quot; srcset=&quot;/_astro/03.C7fGj1vN_Z2pTKhF.webp 640w, /_astro/03.C7fGj1vN_Z1ORNgf.webp 750w, /_astro/03.C7fGj1vN_Znrtk5.webp 828w, /_astro/03.C7fGj1vN_Z8CT7I.webp 1080w, /_astro/03.C7fGj1vN_1SjxTg.webp 1280w, /_astro/03.C7fGj1vN_Z1Isk8u.webp 1668w, /_astro/03.C7fGj1vN_1R9IeR.webp 1787w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そして、画像化が始まると順次保存されたファイルの名前を出力します。
&lt;img loading=&quot;lazy&quot; width=&quot;1837&quot; height=&quot;813&quot; src=&quot;/_astro/04.CaXmJK3A_Z1xyyyF.webp&quot; srcset=&quot;/_astro/04.CaXmJK3A_TCswA.webp 640w, /_astro/04.CaXmJK3A_Z2x64iF.webp 750w, /_astro/04.CaXmJK3A_Z1kQURn.webp 828w, /_astro/04.CaXmJK3A_1MMxFf.webp 1080w, /_astro/04.CaXmJK3A_Z2bFn0z.webp 1280w, /_astro/04.CaXmJK3A_2uUqw7.webp 1668w, /_astro/04.CaXmJK3A_Z1xyyyF.webp 1837w&quot; /&gt;&lt;/p&gt;&lt;p&gt;画像化が終わると、保存したフォルダを確認するように促すメッセージが表示されて、スクリプトが終了します。
&lt;img loading=&quot;lazy&quot; width=&quot;1694&quot; height=&quot;220&quot; src=&quot;/_astro/05.C_yAYV8h_2e76RL.webp&quot; srcset=&quot;/_astro/05.C_yAYV8h_15oxqL.webp 640w, /_astro/05.C_yAYV8h_2puJ4v.webp 750w, /_astro/05.C_yAYV8h_1EEQyT.webp 828w, /_astro/05.C_yAYV8h_ZA9KgY.webp 1080w, /_astro/05.C_yAYV8h_1qwwMQ.webp 1280w, /_astro/05.C_yAYV8h_29KXxn.webp 1668w, /_astro/05.C_yAYV8h_2e76RL.webp 1694w&quot; /&gt;&lt;/p&gt;&lt;p&gt;先程の動画があるフォルダを見ると、確かに先程入力したフォルダがあります。
&lt;img loading=&quot;lazy&quot; width=&quot;1174&quot; height=&quot;464&quot; src=&quot;/_astro/06.Dwq3MbKY_14IPNO.webp&quot; srcset=&quot;/_astro/06.Dwq3MbKY_2amRoN.webp 640w, /_astro/06.Dwq3MbKY_1wcmKk.webp 750w, /_astro/06.Dwq3MbKY_1S15it.webp 828w, /_astro/06.Dwq3MbKY_Z2lDst1.webp 1080w, /_astro/06.Dwq3MbKY_14IPNO.webp 1174w&quot; /&gt;&lt;/p&gt;&lt;p&gt;そのフォルダの中を確認すると、確かに画像が入っています。おおよそ１秒毎に切り取っています。
&lt;img loading=&quot;lazy&quot; width=&quot;1308&quot; height=&quot;932&quot; src=&quot;/_astro/07.Cz8YpO3R_Z12N5f8.webp&quot; srcset=&quot;/_astro/07.Cz8YpO3R_Z13DVUX.webp 640w, /_astro/07.Cz8YpO3R_Z1os2ev.webp 750w, /_astro/07.Cz8YpO3R_1PEU3n.webp 828w, /_astro/07.Cz8YpO3R_Z1XQgIv.webp 1080w, /_astro/07.Cz8YpO3R_Z1KM67L.webp 1280w, /_astro/07.Cz8YpO3R_Z12N5f8.webp 1308w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;スクリプトの紹介&lt;a href=&quot;#スクリプトの紹介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらが今回のスクリプトです。そこまで複雑なスクリプトではないと思います。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExtractImage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;video_name&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;video_name    : String absolutely path of selected file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir : String absolutely path of directory has selected file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frame_count   : Integer number of frame of selected video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fps           : Integer number of fps of selected video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_of_image  : Integer number of extracted images from video&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; video_name &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ERROR: No file is selected.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;extracted_dir &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; DirEditor.&lt;/span&gt;&lt;span&gt;MakeDirectory&lt;/span&gt;&lt;span&gt;(video_name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Error Handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;basefilename_without_ext &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;splitext&lt;/span&gt;&lt;span&gt;(os.path.&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;__file__&lt;/span&gt;&lt;span&gt;))[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; InputController.&lt;/span&gt;&lt;span&gt;CheckWhetherSjisExists&lt;/span&gt;&lt;span&gt;(extracted_dir, basefilename_without_ext) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sys.&lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cap &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cv2.&lt;/span&gt;&lt;span&gt;VideoCapture&lt;/span&gt;&lt;span&gt;(video_name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# width&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;width &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cap.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(cv2.&lt;/span&gt;&lt;span&gt;CAP_PROP_FRAME_WIDTH&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# height&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;height &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cap.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(cv2.&lt;/span&gt;&lt;span&gt;CAP_PROP_FRAME_HEIGHT&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# number of frame&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;frame_count &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cap.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(cv2.&lt;/span&gt;&lt;span&gt;CAP_PROP_FRAME_COUNT&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# fps&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;fps &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cap.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(cv2.&lt;/span&gt;&lt;span&gt;CAP_PROP_FPS&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;movie&apos;s width: &quot;&lt;/span&gt;&lt;span&gt;, width, &lt;/span&gt;&lt;span&gt;&quot;, height: &quot;&lt;/span&gt;&lt;span&gt;, height)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; num_of_image &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(frame_count), &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(fps)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# set a property, where frame in this case, in the VideoCapture&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cap.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(cv2.&lt;/span&gt;&lt;span&gt;CAP_PROP_POS_FRAMES&lt;/span&gt;&lt;span&gt;, num_of_image)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# read the next video frame to extract image file (&quot;cap.read()[1]&quot; is arrays of image&apos;s pixels.)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cv2.&lt;/span&gt;&lt;span&gt;imwrite&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{dirname}{sep}&lt;/span&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;&lt;span&gt;{num&lt;/span&gt;&lt;span&gt;:0=3&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.jpg&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;extracted_dir,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;sep,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;((num_of_image&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;(fps))), cap.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# cv2.imwrite(&quot;{video_dir}image{:0=3}.jpg&quot;.format(int((num_of_image-1)/int(fps))), cap.read()[1])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;saved: image&lt;/span&gt;&lt;span&gt;&lt;span&gt;{num&lt;/span&gt;&lt;span&gt;:0=3&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.jpg&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&lt;span&gt;((num_of_image&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(fps))))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Check directory &quot;&lt;/span&gt;&lt;span&gt;{dirname}&lt;/span&gt;&lt;span&gt;&quot;&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;dirname&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;extracted_dir))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cap.&lt;/span&gt;&lt;span&gt;release&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;for文では、フレーム数をFPSで増分しているので、おおよそ１秒毎のフレームを出力する挙動になっています。解説する点はこれくらいですかね（笑）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;動画から画像を切り出せたぞ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;はい、目玉焼きができているよ～。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;このツールで画像にした後は・・・&lt;a href=&quot;#このツールで画像にした後は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このツールで画像として出力した後は、以下のツールで切り出してみてはいかがでしょうか？
こちらのツールもPythonで動きます！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/trim-multiple-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】複数の画像を一気にトリミングするスクリプトを作った話&lt;/div&gt;&lt;div&gt;複数の画像を一気にトリミングするツールをPythonで作りました。使い方としては、最初に切り出したい範囲を選んで確定したら、そのエリアで後続の画像も切り出します。利用したモジュールは、OpenCVやTkinter、matplotlibになります。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211101_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-1.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;さらに、一気にトリミングした複数の画像の重複を除きたい場合は、以下のツールで重複を排除してみてはいかがでしょうか？
こちらのツールもPythonで動くものになっています！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/remove-duplicate-images/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【Python】同じような画像が色々な組み合わせで存在する場合に重複分を削除するスクリプトを作った話&lt;/div&gt;&lt;div&gt;同じような画像が色々な組み合わせ・グループで出来てしまった場合に、重複している分を削除するツールをPythonで作りました。OpenCVやTkinterを利用しています。&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211123_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python】シェル上で出力した文字列で濁点が分かれてしまった文字（結合文字）を濁音に直すスクリプト</title><link>https://endorphinbath.com/posts/make-voiced-sound/</link><guid isPermaLink="true">https://endorphinbath.com/posts/make-voiced-sound/</guid><description>シェル上でファイル名などを出力した際に、バがバになってしまう場合があります。それをいちいち手作業で直すのがしんどいので、直してくれるスクリプトを作りました。テストコードもあります。</description><pubDate>Fri, 29 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ただいマジLOVE1000%～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おかえListen to my heart!!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今日さ～、道を歩いてたら側溝のドブに落ちちゃってさ～&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あれ？ なんか、君のセリフの中の濁音が1文字として認識されていないような・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;え？ 本当に？ ビビデバビデブー・・・。本当だ！ 全部濁音が変だ！ （コピペしてみよう！）&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、直すか。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;しかし、この記事を移植する過程で、濁音が分かれてしまう現象が再現しなくなってしまった。そんな不具合が再現しなくなった反面、物悲しさも感じた、うp主なのであった。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ツールのソース&lt;a href=&quot;#ツールのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;こちらがツールのソースになります。&lt;/p&gt;&lt;p&gt;&lt;code&gt;target&lt;/code&gt;に濁点が別の文字となってしまっている文字列を列挙して、&lt;code&gt;replace&lt;/code&gt;にその文字と同じ順序に修正後の文字列を列挙しています。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text           : String of target text.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;target  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replace &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞだぢづてどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_target  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_replace &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(target), &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_target.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(target[i : i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(replace), &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_replace.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(replace[i : i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(list_target)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; text.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(list_target[i], list_replace[i])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;テストクラスのソース&lt;a href=&quot;#テストクラスのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回初めて、テストコードを作って、pytestモジュールでテストさせてみました。&lt;/p&gt;&lt;p&gt;pytestがテストコードを認識できるように、&lt;code&gt;test/__&amp;lt;strong&amp;gt;init__&amp;lt;/strong&amp;gt;.py&lt;/code&gt;を作るのを忘れずに。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; TextReplacer &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; ReplaceCharacter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Test_ReplaceCharacter&lt;/span&gt;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unicode : \u3099&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;だぢづでどばびぶべぼ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;だぢづてどばびぶべぼ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unicode : \u309A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_3&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ぱぴぷぺぽ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ぱぴぷぺぽ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unicode : \u3099&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_4&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ガギグゲゴザジズゼゾ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ガギグゲゴザジズゼゾ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_5&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ダヂヅデドバビブベボ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ダヂヅデドバビブベボ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Unicode : \u309A&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_1_6&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;パピプペポ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;パピプペポ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# dakuon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_1&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;がぎぐげござじずぜぞ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_2&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;だぢづてどばびぶべぼ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;だぢづてどばびぶべぼ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#handakuon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_3&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ぱぴぷぺぽ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ぱぴぷぺぽ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# dakuon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_4&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ガギグゲゴザジズゼゾ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ガギグゲゴザジズゼゾ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_5&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ダヂヅデドバビブベボ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;ダヂヅデドバビブベボ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# handakuon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;test_MakeVoicedsound_2_6&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;replaceCharacter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReplaceCharacter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;assert&lt;/span&gt;&lt;span&gt;&lt;span&gt; replaceCharacter.&lt;/span&gt;&lt;span&gt;MakeVoicedsound&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;パピプペポ&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;パピプペポ&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;どうだい？ 直ったかね？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_016.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ビビデバビデブー！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;しかし、この記事を移植する過程で、濁音が分かれてしまう現象が再現しなくなってしまった。本記事の中には、既に濁音が分かれてしまう文字は存在しない。そういう不具合が再現しなくなった反面、物悲しさも感じた、うp主なのであった。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Python、Flask】自分の服を選んでくれるアプリを作ろうとした時の話（Webアプリ編）</title><link>https://endorphinbath.com/posts/wardrobe-app-web/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wardrobe-app-web/</guid><description>自分が登録した服とその服の着用の傾向から、毎日着る服を選んでくれるWebアプリを作ろうとした時の記事になります。利用したツールは、Python、Flask、Scikit-Learn、Sqlite、Scikit-Learnなどです。</description><pubDate>Wed, 27 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじまり&lt;a href=&quot;#はじまり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;…. PiPiPiPi ….!    PiPiPiPi …!!&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;うるせえなあ！　ああ、もう朝か。　うわー今日も仕事めんどくせえなあ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_021.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほらほら、起きろ！　朝だお朝だお浅田真央！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おー、朝からえらい元気だな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ちょっと・・・遅刻しますよ・・・？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ああそう言えば、確かPythonで作ったなあ。いわゆるAIってやつにデータを読ませて使った初めての体験だった・・&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;もしもーし？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;よし、今回は、僕が自分の服を選んでくれるアプリを作ろうとした時の話をしよう！　刮目せよ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とりあえず、ズボン穿けよ。&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;アプリを作った経緯&lt;a href=&quot;#アプリを作った経緯&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、今回のアプリを作った経緯を話します。&lt;/p&gt;&lt;p&gt;なぜ今回のような機能のアプリを作ったかと、アプリを作った動機は違います。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;アプリを作った動機&lt;a href=&quot;#アプリを作った動機&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、アプリを作ったきっかけは、会社の同期とかメンターぐるみで何か学習会を開こう的な話になったことです。&lt;/p&gt;&lt;p&gt;そして、学習会の教材がこのedx内の&lt;a href=&quot;https://www.edx.org/course/introduction-computer-science-harvardx-cs50x?index=product&amp;amp;queryID=0ba4e630d6257ec923543272e0e10d44&amp;amp;position=1&quot; target=&quot;_blank&quot;&gt;CS50&lt;/a&gt;というものです。
&lt;img loading=&quot;lazy&quot; width=&quot;2558&quot; height=&quot;1262&quot; src=&quot;/_astro/01.DQM7PBcd_ZGQ7Y7.webp&quot; srcset=&quot;/_astro/01.DQM7PBcd_Z1US21t.webp 640w, /_astro/01.DQM7PBcd_Z12DcP6.webp 750w, /_astro/01.DQM7PBcd_ZT1GbG.webp 828w, /_astro/01.DQM7PBcd_ZYKrec.webp 1080w, /_astro/01.DQM7PBcd_1RoQpp.webp 1280w, /_astro/01.DQM7PBcd_Lb9zn.webp 1668w, /_astro/01.DQM7PBcd_qlKbX.webp 2048w, /_astro/01.DQM7PBcd_ZGQ7Y7.webp 2558w&quot; /&gt;&lt;/p&gt;&lt;p&gt;現在の画面UIは、僕が取り組んでいた頃と比べてだいぶ様変わりしたようです・・・&lt;/p&gt;&lt;p&gt;このCS50の学習内容は以下の流れです。興味があって英語に抵抗がない方はぜひやってみて下さい。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;C言語で、コンソールに階段を描画する。暗号文を作る。など。&lt;/li&gt;
&lt;li&gt;HTML、CSSでとりあえずタグを並べてデザインしてみる。&lt;/li&gt;
&lt;li&gt;Pythonで、C言語と同じ処理を書く。&lt;/li&gt;
&lt;li&gt;Pythonで、株取引ツールを作る。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;そして、それらを経た最終課題というのが、自作のWebアプリを作るというものです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;なぜ今回のような機能にしたか？&lt;a href=&quot;#なぜ今回のような機能にしたか&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;800&quot; src=&quot;/_astro/02.r4mvptIf_1o4yQ0.webp&quot; srcset=&quot;/_astro/02.r4mvptIf_Z1WQNWF.webp 640w, /_astro/02.r4mvptIf_yrAGm.webp 750w, /_astro/02.r4mvptIf_Z2aAttC.webp 828w, /_astro/02.r4mvptIf_Z207Qk9.webp 1080w, /_astro/02.r4mvptIf_1o4yQ0.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;p&gt;服を選ぶのって、面倒くさくないですか？&lt;/p&gt;&lt;p&gt;スティーブ・ジョブズくらい忙しくなくても面倒くさいものは面倒くさいなのです。&lt;/p&gt;&lt;p&gt;でも、一年中半袖のTシャツとかタートルネックを貫き通すなんてキツイし、気温によって服を選ばなければならないので、その選択をなんとか省略して生活したかったのです。&lt;/p&gt;&lt;p&gt;そこで、自分の代わりにAIが服を選んでくれればいいんじゃね？　と思い、とりあえず自分がとある日に着た服と、最高最低気温と、自分はその日に快適だったかどうかなど・・・記録したデータをAIに読ませて、服のコンシェルジュを作ろうとしたのです。&lt;/p&gt;&lt;p&gt;そして、Webサーバを立ち上げないと今回のアプリは動かないので、その立ち上げの作業でよく分からなくなって、断念したのが今回の試みの結論です（笑）&lt;/p&gt;&lt;p&gt;まあ、使うのは僕一人だけなので、AppSheetに必要なデータだけは打ち込んで、そのデータはPCのPythonファイルを実行して食わせるなりして、実現できたらなあと思います。・・・なんか書いてたら、アイデア出てきましたね！（笑）　今度書いてみます！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;今回利用したツール&lt;a href=&quot;#今回利用したツール&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回利用したツールというかモジュールというか、以下のものを利用しました。&lt;/p&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;/th&gt;&lt;th&gt;概要&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;アプリ形式&lt;/td&gt;&lt;td&gt;Webアプリ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web描画用フレームワーク&lt;/td&gt;&lt;td&gt;Flask&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;サーバ処理&lt;/td&gt;&lt;td&gt;Python&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DB&lt;/td&gt;&lt;td&gt;SQLite3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AIツール&lt;/td&gt;&lt;td&gt;Scikit-Learn&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;ざっと、紹介します。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;Flask&lt;a href=&quot;#flask&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;164&quot; src=&quot;/_astro/03.DQ4KhyCR_WUfd.webp&quot; srcset=&quot;/_astro/03.DQ4KhyCR_WUfd.webp 419w&quot; /&gt;&lt;/p&gt;&lt;p&gt;これは、Pythonでサーバサイドの処理を書けるようになるモジュールです。&lt;/p&gt;&lt;p&gt;同じPython用のWebフレームワークにDjangoがありますが、DjangoよりもFlaskの方が手軽にHTMLを記述できて気に入っています。HTMLの中に少しPythonicな表現を書くことが出来ます。あとはヘッダーとかフッターとかがHTMLのコード上で見やすいですね。&lt;/p&gt;&lt;p&gt;当時だと、PythonといえばDjangoとかが主流だったんですよね、確か。&lt;/p&gt;&lt;p&gt;でも今のwebの記事を見てると、FlaskとDjangoは半々な感じっぽいですね。Flask使いやすいもんなあ。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Python&lt;a href=&quot;#python&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;379&quot; src=&quot;/_astro/04.r60RWAku_ZLDea3.webp&quot; srcset=&quot;/_astro/04.r60RWAku_Z2qKJMC.webp 640w, /_astro/04.r60RWAku_Z2weyBI.webp 750w, /_astro/04.r60RWAku_1Mbbir.webp 828w, /_astro/04.r60RWAku_2ndwrA.webp 1080w, /_astro/04.r60RWAku_ZLDea3.webp 1280w&quot; /&gt;&lt;/p&gt;&lt;p&gt;Flaskを使うということでPython、Pythonを使うということでFlaskにしたかはもう記憶の彼方に行ってしまい覚えていませんが、この頃、会社の研修でPythonを習っていたいうのもあり、すごいPythonに親しんでいた時期でした。「最初に始めるならPython」はあながち間違いじゃないと思います。型推論してくれるから無邪気にコーディングできるし、tabで制御するからコード見やすいし、モジュール多いし、うんうん、大好きなプログラミング言語の一つです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;SQLite3&lt;a href=&quot;#sqlite3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;569&quot; src=&quot;/_astro/05.uNyhvDa3_UcztM.webp&quot; srcset=&quot;/_astro/05.uNyhvDa3_aJ9t6.webp 640w, /_astro/05.uNyhvDa3_24AFJN.webp 750w, /_astro/05.uNyhvDa3_ZklUnM.webp 828w, /_astro/05.uNyhvDa3_ZIHPak.webp 1080w, /_astro/05.uNyhvDa3_UcztM.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;p&gt;個人で利用するのであれば、SQLite3はかなりお手軽だと思います。.sqliteファイルにDBが丸々入っているので、なんてポータブルなんでしょうか！&lt;/p&gt;&lt;p&gt;・・・なので、おそらく複数人が利用するようなシステムのDBとしては使えないかと思います。パンクすると思います。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Scikit-Learn&lt;a href=&quot;#scikit-learn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;646&quot; src=&quot;/_astro/06.BBi3E5ff_ZWFwWK.webp&quot; srcset=&quot;/_astro/06.BBi3E5ff_Z10mhwg.webp 640w, /_astro/06.BBi3E5ff_Z1U3Mrl.webp 750w, /_astro/06.BBi3E5ff_Z26VKIz.webp 828w, /_astro/06.BBi3E5ff_Z1RydyM.webp 1080w, /_astro/06.BBi3E5ff_ZWFwWK.webp 1200w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回使用したAIのモデルが線形重回帰モデルだったので、まあScikit-Learnだろ。ってなりますよね。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;早速作るぞ！（まず設計）&lt;a href=&quot;#早速作るぞまず設計&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一旦やりたいことは、こんな感じのフローチックな設計書にまとめていました。
&lt;img loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;1462&quot; src=&quot;/_astro/07.BEBZ3BSi_Z26UTyP.webp&quot; srcset=&quot;/_astro/07.BEBZ3BSi_2dePWP.webp 640w, /_astro/07.BEBZ3BSi_Zd6DmW.webp 750w, /_astro/07.BEBZ3BSi_xg7AY.webp 828w, /_astro/07.BEBZ3BSi_Z1dNbWd.webp 1080w, /_astro/07.BEBZ3BSi_NBtsb.webp 1280w, /_astro/07.BEBZ3BSi_24B1xX.webp 1668w, /_astro/07.BEBZ3BSi_Z26UTyP.webp 2048w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ああ・・・すごい懐かしい・・・。&lt;/p&gt;&lt;p&gt;えーと、まず、このアプリには、下記の2つの機能があります。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;服を管理する&lt;/li&gt;
&lt;li&gt;その日の服をオススメする&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;まずは、1. 服を管理する機能から紹介します。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;機能1：服を管理する。&lt;a href=&quot;#機能1服を管理する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これはページごとに紹介したいと思います。このWebアプリ用に作ったページは以下の11点になります。あまり複雑なアプリではないはずですが、11ページも作ったとは・・・アプリ作るのも大変ですねえ（小並感）&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;login.html（ユーザーがログインするため）&lt;/li&gt;
&lt;li&gt;Register.html（ユーザーを登録するため）&lt;/li&gt;
&lt;li&gt;Registered.html（ユーザーの登録完了を確認するため）&lt;/li&gt;
&lt;li&gt;Index.html（ユーザーが今日実際に着ている服の表示および快適だったかどうかを入力するため）&lt;/li&gt;
&lt;li&gt;EditUser.html（ユーザー情報を編集するため）&lt;/li&gt;
&lt;li&gt;Recommend.html（ユーザーに服をオススメして、実際に着る服を入力するため）&lt;/li&gt;
&lt;li&gt;CatalogCloth.html（ユーザーが登録している服を管理するため）&lt;/li&gt;
&lt;li&gt;AddCloth.html（ユーザーが服を登録するため）&lt;/li&gt;
&lt;li&gt;EditCloth.html（ユーザーが登録している服を編集するため_その1）&lt;/li&gt;
&lt;li&gt;EditingCloth.html（ユーザーが登録している服を編集するため_その2）&lt;/li&gt;
&lt;li&gt;DeleteCloth.html（ユーザーが登録している服を削除するため）&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;以下、画面を載せながら紹介します。&lt;/p&gt;&lt;p&gt;（実は、ソースを2年前にGithubに保存していたつもりだったのですが、ちゃんと保存されておらず歯抜けになっていたりしていました・・・Dropboxにいつ更新したか分からないやつしか転がっておらず、そのhtmlを使って動かしました・・・。　2年ぶりにプログラマ先駆けの奴が書いたもので、そんな状態なので果たしてどんなことになっているのやら・・・。ちゃんとcommit出来ているか本当に細心の注意を払わないとですね(T_T)）&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1.　login.html&lt;a href=&quot;#1loginhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、このアプリではマルチユーザーが使えるような構造になっています。（これはCS50の前の課題でマルチユーザーが使えるアプリを作った名残ですね。）
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1076&quot; src=&quot;/_astro/08.BsIxaHpL_Z2jiQ4N.webp&quot; srcset=&quot;/_astro/08.BsIxaHpL_Z20RfUq.webp 640w, /_astro/08.BsIxaHpL_Z1MONsu.webp 750w, /_astro/08.BsIxaHpL_ZVKwtS.webp 828w, /_astro/08.BsIxaHpL_2cNGjF.webp 1080w, /_astro/08.BsIxaHpL_1RLEQn.webp 1280w, /_astro/08.BsIxaHpL_CfFnj.webp 1668w, /_astro/08.BsIxaHpL_UHdgY.webp 2048w, /_astro/08.BsIxaHpL_Z2jiQ4N.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ちなみにログインをしくると以下の画面が出ます。（懐かしい・・・！）
&lt;img loading=&quot;lazy&quot; width=&quot;2545&quot; height=&quot;1256&quot; src=&quot;/_astro/10.CXRfuX0M_1eVGYV.webp&quot; srcset=&quot;/_astro/10.CXRfuX0M_ZEHWQM.webp 640w, /_astro/10.CXRfuX0M_dvQjA.webp 750w, /_astro/10.CXRfuX0M_Z2b1IUK.webp 828w, /_astro/10.CXRfuX0M_Z2setQk.webp 1080w, /_astro/10.CXRfuX0M_Z2advK5.webp 1280w, /_astro/10.CXRfuX0M_ZGhS2K.webp 1668w, /_astro/10.CXRfuX0M_1sUvPp.webp 2048w, /_astro/10.CXRfuX0M_1eVGYV.webp 2545w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.　Register.html&lt;a href=&quot;#2registerhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ユーザーを登録する画面になります。いっちょ前に「Confirm Password」なんて入れてやがる・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1149&quot; src=&quot;/_astro/09.Cjh9yGDA_Zby5en.webp&quot; srcset=&quot;/_astro/09.Cjh9yGDA_Y721W.webp 640w, /_astro/09.Cjh9yGDA_1bSjwJ.webp 750w, /_astro/09.Cjh9yGDA_ZvEp7I.webp 828w, /_astro/09.Cjh9yGDA_2w3dza.webp 1080w, /_astro/09.Cjh9yGDA_Z1fw10I.webp 1280w, /_astro/09.Cjh9yGDA_ZkwPA9.webp 1668w, /_astro/09.Cjh9yGDA_2qoYxR.webp 2048w, /_astro/09.Cjh9yGDA_Zby5en.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.　Registered.html&lt;a href=&quot;#3registeredhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここで不思議なことに、「Register」ボタンを押したら、この画面に行かずに「login.html」に行ってしまった・・・。しかし、ユーザー登録はされている・・・。・・・まあいいか。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.　Index.html&lt;a href=&quot;#4indexhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;パスワード地獄をくぐり抜けて、やっとたどり着きました・・（笑）
&lt;img loading=&quot;lazy&quot; width=&quot;2557&quot; height=&quot;1261&quot; src=&quot;/_astro/11.Df2pfvoh_1Fz6ns.webp&quot; srcset=&quot;/_astro/11.Df2pfvoh_2jTdaU.webp 640w, /_astro/11.Df2pfvoh_Z1R36rD.webp 750w, /_astro/11.Df2pfvoh_Z1IqzNe.webp 828w, /_astro/11.Df2pfvoh_Z1bptdi.webp 1080w, /_astro/11.Df2pfvoh_1FJOqj.webp 1280w, /_astro/11.Df2pfvoh_zw7Ah.webp 1668w, /_astro/11.Df2pfvoh_eGIcR.webp 2048w, /_astro/11.Df2pfvoh_1Fz6ns.webp 2557w&quot; /&gt;&lt;/p&gt;&lt;p&gt;「ユーザーネーム」, welcome.　です。&lt;/p&gt;&lt;p&gt;天気と気温は、OpenWeatherMapというサービスのAPIで取ってきています。&lt;/p&gt;&lt;p&gt;そして、今日ユーザーが選んだ服が描画されます。まだ、選んでないので描画されていません。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.　EditUser.html&lt;a href=&quot;#5edituserhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここでも問題発生。EditUser押せども押せども、この画面が表示されない・・・。なんかFlask仕様変わったのかなあー？&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6.　Recommend.html&lt;a href=&quot;#6recommendhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この画面には飛べました！やった！&lt;/p&gt;&lt;p&gt;上にはAIによるレコメンドの服が表示されていて、下には自分が今日着る服を選ぶためのプルダウンが配置されています。
&lt;img loading=&quot;lazy&quot; width=&quot;2535&quot; height=&quot;1096&quot; src=&quot;/_astro/12.CXMfle80_Z1X2wTI.webp&quot; srcset=&quot;/_astro/12.CXMfle80_14iIBs.webp 640w, /_astro/12.CXMfle80_Z1fNUOm.webp 750w, /_astro/12.CXMfle80_28hn4q.webp 828w, /_astro/12.CXMfle80_Z1tJFBz.webp 1080w, /_astro/12.CXMfle80_Z2THOW.webp 1280w, /_astro/12.CXMfle80_14o2oY.webp 1668w, /_astro/12.CXMfle80_1eCvK5.webp 2048w, /_astro/12.CXMfle80_Z1X2wTI.webp 2535w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2528&quot; height=&quot;1166&quot; src=&quot;/_astro/13.CAqEgUGL_1Hb1pn.webp&quot; srcset=&quot;/_astro/13.CAqEgUGL_Z12YQMu.webp 640w, /_astro/13.CAqEgUGL_1GNrCt.webp 750w, /_astro/13.CAqEgUGL_2whJSc.webp 828w, /_astro/13.CAqEgUGL_Z2eqikh.webp 1080w, /_astro/13.CAqEgUGL_P3A8G.webp 1280w, /_astro/13.CAqEgUGL_ZWjCwF.webp 1668w, /_astro/13.CAqEgUGL_Z1CU0vf.webp 2048w, /_astro/13.CAqEgUGL_1Hb1pn.webp 2528w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とりあえず、登録しておきます。登録されている状態の画面は以下のようになります。&lt;/p&gt;&lt;p&gt;登録すると、今日快適だったかどうかを入力するスライダーが表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;2573&quot; height=&quot;1207&quot; src=&quot;/_astro/14.r8-zQlZa_ZjWKoO.webp&quot; srcset=&quot;/_astro/14.r8-zQlZa_Z2eNISy.webp 640w, /_astro/14.r8-zQlZa_1d35US.webp 750w, /_astro/14.r8-zQlZa_ZtaNWP.webp 828w, /_astro/14.r8-zQlZa_1iANzA.webp 1080w, /_astro/14.r8-zQlZa_1MVmvc.webp 1280w, /_astro/14.r8-zQlZa_Z1KLCzb.webp 1668w, /_astro/14.r8-zQlZa_ZqIxX.webp 2048w, /_astro/14.r8-zQlZa_Z9Tv5R.webp 2560w, /_astro/14.r8-zQlZa_ZjWKoO.webp 2573w&quot; /&gt;&lt;/p&gt;&lt;p&gt;とりあえず、5（最高に快適）で入力しておきます。
&lt;img loading=&quot;lazy&quot; width=&quot;751&quot; height=&quot;316&quot; src=&quot;/_astro/15.DMNQcvMY_Z1cBYdb.webp&quot; srcset=&quot;/_astro/15.DMNQcvMY_Z2bbc6M.webp 640w, /_astro/15.DMNQcvMY_Z1cG3oR.webp 750w, /_astro/15.DMNQcvMY_Z1cBYdb.webp 751w&quot; /&gt;&lt;/p&gt;&lt;p&gt;快適さを入力した日は、画面上部にこんな表示がされます。（この機能は動いた！ホッとした！）
&lt;img loading=&quot;lazy&quot; width=&quot;2544&quot; height=&quot;518&quot; src=&quot;/_astro/16.CIdqNQyW_Z1Uuz3v.webp&quot; srcset=&quot;/_astro/16.CIdqNQyW_8bjLg.webp 640w, /_astro/16.CIdqNQyW_ZuQ5SD.webp 750w, /_astro/16.CIdqNQyW_ZrwRF0.webp 828w, /_astro/16.CIdqNQyW_ZUcTS3.webp 1080w, /_astro/16.CIdqNQyW_Z1uo132.webp 1280w, /_astro/16.CIdqNQyW_1ETLEQ.webp 1668w, /_astro/16.CIdqNQyW_Z12N5qc.webp 2048w, /_astro/16.CIdqNQyW_Z1Uuz3v.webp 2544w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7.　CatalogCloth.html&lt;a href=&quot;#7catalogclothhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自分が登録した服を管理できます。&lt;/p&gt;&lt;p&gt;画像が表示されていない原因としては、画像フォルダの読み込む部分がちゃんと動いておらず、とりあえずすり抜けて表示させたようとしたら、画像が消えてしまったためです。今更直すのもあれなので、このまま進行したいと思います・・・。&lt;/p&gt;&lt;p&gt;自分のPCでローカルサーバを立てて動かしているのですが、そんなことあるんですね。まりっか。
&lt;img loading=&quot;lazy&quot; width=&quot;2549&quot; height=&quot;1258&quot; src=&quot;/_astro/17.Cv_IETKr_Z2bXanp.webp&quot; srcset=&quot;/_astro/17.Cv_IETKr_Z1gnDi1.webp 640w, /_astro/17.Cv_IETKr_Zn8O6D.webp 750w, /_astro/17.Cv_IETKr_2iuIrW.webp 828w, /_astro/17.Cv_IETKr_ZK6WTH.webp 1080w, /_astro/17.Cv_IETKr_Zs5YNs.webp 1280w, /_astro/17.Cv_IETKr_10OCSR.webp 1668w, /_astro/17.Cv_IETKr_Z1T961T.webp 2048w, /_astro/17.Cv_IETKr_Z2bXanp.webp 2549w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;8.　AddCloth.html&lt;a href=&quot;#8addclothhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;服を新しく登録します。&lt;/p&gt;&lt;p&gt;服の名前、服の種類、服の袖の長さ、服の色、服の暖かさ、着る頻度、服の画像を登録できます。&lt;/p&gt;&lt;p&gt;服の画像は緑のボタンからアップロードできます。
&lt;img loading=&quot;lazy&quot; width=&quot;2533&quot; height=&quot;1217&quot; src=&quot;/_astro/18.rijn0aPo_Z1mmqy.webp&quot; srcset=&quot;/_astro/18.rijn0aPo_1SMTdk.webp 640w, /_astro/18.rijn0aPo_f0Gtw.webp 750w, /_astro/18.rijn0aPo_Z1rlinL.webp 828w, /_astro/18.rijn0aPo_1Fmc2r.webp 1080w, /_astro/18.rijn0aPo_Zsy6Q6.webp 1280w, /_astro/18.rijn0aPo_Z1msdQL.webp 1668w, /_astro/18.rijn0aPo_ZHnNuH.webp 2048w, /_astro/18.rijn0aPo_Z1mmqy.webp 2533w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;9.　EditCloth.html&lt;a href=&quot;#9editclothhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;既に登録した服の情報を編集することが出来ます。&lt;/p&gt;&lt;p&gt;編集項目は、「8.　AddCloth.html」の画面にある項目と同じです。服に孔が空いたりしたら服のビジュアルも変わりますもんね (*ﾟ∀ﾟ)
&lt;img loading=&quot;lazy&quot; width=&quot;2558&quot; height=&quot;1262&quot; src=&quot;/_astro/19.CHjGq8S6_AdysU.webp&quot; srcset=&quot;/_astro/19.CHjGq8S6_IKP7u.webp 640w, /_astro/19.CHjGq8S6_1C0EiR.webp 750w, /_astro/19.CHjGq8S6_1KCaWh.webp 828w, /_astro/19.CHjGq8S6_ijfdP.webp 1080w, /_astro/19.CHjGq8S6_Z1THzVu.webp 1280w, /_astro/19.CHjGq8S6_24fQ2p.webp 1668w, /_astro/19.CHjGq8S6_1IqrE0.webp 2048w, /_astro/19.CHjGq8S6_AdysU.webp 2558w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;10.　EditingCloth.html&lt;a href=&quot;#10editingclothhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編集し終わったら、その情報で確定していいかどうかを確認する画面に移動します。この状態では、まだ前の画面のリクエストから貰った情報がページに書いてあるだけです。
&lt;img loading=&quot;lazy&quot; width=&quot;2553&quot; height=&quot;1010&quot; src=&quot;/_astro/20.CNHHIFTH_2fX6Cf.webp&quot; srcset=&quot;/_astro/20.CNHHIFTH_Z274y0F.webp 640w, /_astro/20.CNHHIFTH_Z1anBqn.webp 750w, /_astro/20.CNHHIFTH_1vMg2v.webp 828w, /_astro/20.CNHHIFTH_Z1GGxs4.webp 1080w, /_astro/20.CNHHIFTH_FCOaz.webp 1280w, /_astro/20.CNHHIFTH_ZwkEhg.webp 1668w, /_astro/20.CNHHIFTH_ZKgypM.webp 2048w, /_astro/20.CNHHIFTH_2fX6Cf.webp 2553w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;11.　DeleteCloth.html&lt;a href=&quot;#11deleteclothhtml&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「7.　CatalogCloth.html」でグレーのDeleteボタンを押すと、本当に消していいかどうかを尋ねてくるページに飛びます。
&lt;img loading=&quot;lazy&quot; width=&quot;2554&quot; height=&quot;924&quot; src=&quot;/_astro/21.DTdT2RMU_2pXm11.webp&quot; srcset=&quot;/_astro/21.DTdT2RMU_1vVqxe.webp 640w, /_astro/21.DTdT2RMU_Z1TkcxI.webp 750w, /_astro/21.DTdT2RMU_ZostOl.webp 828w, /_astro/21.DTdT2RMU_1ejxWu.webp 1080w, /_astro/21.DTdT2RMU_2nS8pf.webp 1280w, /_astro/21.DTdT2RMU_ZqvnSd.webp 1668w, /_astro/21.DTdT2RMU_1Hbog0.webp 2048w, /_astro/21.DTdT2RMU_2pXm11.webp 2554w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;機能2： その日の服をオススメする。&lt;a href=&quot;#機能2-その日の服をオススメする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;機械学習方法の詳細&lt;a href=&quot;#機械学習方法の詳細&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;こちらの機能は、先程記載した「6.　Recommend.html」で行う処理になります。&lt;/p&gt;&lt;p&gt;AIには、線形重回帰モデルで学習させます。学習させるデータは以下の通りになります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;厚い上着の暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;上着の暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;中着の暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;下着の暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;ボトムスの暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;スパッツの暖かさ（1～9）&lt;/li&gt;
&lt;li&gt;その日の最高気温&lt;/li&gt;
&lt;li&gt;その日の最低気温&lt;/li&gt;
&lt;li&gt;快適さ（1～9）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;快適さは、1（寒い）～9（暑い）までの数値を取り、5が最も快適な数値となります。&lt;/p&gt;&lt;p&gt;そして、AIにはその日の気温から快適さが５になるような服の組み合わせになるようにレコメンドさせるといった感じです。&lt;/p&gt;&lt;p&gt;以下が、「6.　Recommend.html」の中身です。昔のソースコードを見ると面白いですね（笑）&lt;/p&gt;&lt;p&gt;確か学習させるためにデータを加工するのが面倒くさかった記憶が・・・。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;@app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;route&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/recommend&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;methods&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;GET&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@login_required&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;recommend&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;Recommend user&apos;s best cloth today&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# User reached route via GET (as by clicking a link or via redirect)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt;&lt;span&gt; request.method &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;POST&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# User reached route via POST (as by submitting a form via POST)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# DB connection and cursor generation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;connection &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sqlite3.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(dbpath)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# connection.isolation_level = None # 自動コミットにする場合は下記を指定（コメントアウトを解除のこと）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; connection.&lt;/span&gt;&lt;span&gt;cursor&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Prepare csv file to Machine Learning --------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Get wardrobe-image url to display&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM history_wear WHERE userid = :userid AND NOT comfort_score = &apos;&apos;;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&quot;userid&quot;&lt;/span&gt;&lt;span&gt;: session[&lt;/span&gt;&lt;span&gt;&quot;user_id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_hw &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;# history_wear row&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Generate list of &quot;history_wear&quot; (wardrobeid is converted to warmscore AND wear_date is removed)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hw  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [] &lt;/span&gt;&lt;span&gt;# List about a record of history_wear&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hws &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [] &lt;/span&gt;&lt;span&gt;# List about records of history_wear&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; num &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(rows_hw)):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_c&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobeid_o&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobeid_t&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobeid_i&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobeid_b&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wardrobeid_s&apos;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Select DB same as wardrobe-id.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM wardrobes WHERE id = :wardrobeid;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&quot;wardrobeid&quot;&lt;/span&gt;&lt;span&gt;: rows_hw[num][column_history_wear[i]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_wr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;# wardorbes row&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; rows_wr &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; []: &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# If rows_wr is empty,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;warmscore &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [] &lt;/span&gt;&lt;span&gt;# wardorbes list あとで使うかも&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wr.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(rows_wr) &lt;/span&gt;&lt;span&gt;# あとで使うかも&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;warmscore &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; rows_wr[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][column_wardrobes[&lt;/span&gt;&lt;span&gt;&apos;warmscore&apos;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;# Get warmscore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hw.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(warmscore) &lt;/span&gt;&lt;span&gt;# Store in a list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;temperature_max&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;temperature_min&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;comfort_score&apos;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hw.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;round&lt;/span&gt;&lt;span&gt;(rows_hw[num][column_history_wear[i]], &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hws.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(list_hw) &lt;/span&gt;&lt;span&gt;# Store in a list&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_hw &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [] &lt;/span&gt;&lt;span&gt;# Set default value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Part of Machine Learning -----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Convert list of &quot;history_wear&quot; to pd.DataFrame of &quot;history_wear&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;feature_names &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;warmscore_c&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;warmscore_o&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;warmscore_t&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;&quot;warmscore_i&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;warmscore_b&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;warmscore_s&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span&gt;&quot;temperature_max&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;temperature_min&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;comfort_score&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.&lt;/span&gt;&lt;span&gt;DataFrame&lt;/span&gt;&lt;span&gt;(list_hws, &lt;/span&gt;&lt;span&gt;columns&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;feature_names)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model_learning&lt;/span&gt;&lt;span&gt;(data)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Part of Machine Predicting -------------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Select DB for wardrobes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM wardrobes WHERE userid = :t_userid AND inuse = 1;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&quot;t_userid&quot;&lt;/span&gt;&lt;span&gt;: session[&lt;/span&gt;&lt;span&gt;&quot;user_id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_wr &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_category &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;category_dictionary&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;# Dictionary about wardrobe&apos;s category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wr_category &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;-Outer Category-&quot;&lt;/span&gt;&lt;span&gt;: [], &lt;/span&gt;&lt;span&gt;&quot;-Tops Category-&quot;&lt;/span&gt;&lt;span&gt;: [],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&quot;-Inner Category-&quot;&lt;/span&gt;&lt;span&gt;: [], &lt;/span&gt;&lt;span&gt;&quot;-Bottoms Category-&quot;&lt;/span&gt;&lt;span&gt;: []}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {} &lt;/span&gt;&lt;span&gt;# wardrobe-combination on category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_score   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {} &lt;/span&gt;&lt;span&gt;# score on wardrobe-combination on category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num           &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# for index of &quot;combi_content&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iter_num_o    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# for iterate like MECE for &apos;-Outer Category-&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iter_num_b    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# for iterate like MECE for &apos;-Bottoms Category-&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;__len_combi__ &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;20000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(__len_combi__):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Generate dictionary on category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; rows_wr:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; key, value &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; dict_category.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&apos;category&apos;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; value: &lt;/span&gt;&lt;span&gt;# If category is same,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wr_category[key].&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&apos;id&apos;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Append NULL to dictionary on category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; key &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; dict_wr_category.&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wr_category[key].&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Generate wardrobe-combination on category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len_o &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(dict_wr_category[&lt;/span&gt;&lt;span&gt;&apos;-Outer Category-&apos;&lt;/span&gt;&lt;span&gt;])   &lt;/span&gt;&lt;span&gt;# Length of dictionary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;len_b &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(dict_wr_category[&lt;/span&gt;&lt;span&gt;&apos;-Bottoms Category-&apos;&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;# Length of dictionary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; c &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, len_o):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; o &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(iter_num_o, len_o):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bool_co &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; c &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; len_o &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt;&lt;span&gt; o &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; len_o &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;87&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; bool_co &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt;&lt;span&gt; c &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; o : &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Same wardrobes cannot be combi except both are None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;88&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; t &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;span&gt;&apos;-Tops Category-&apos;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;89&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;span&gt;&apos;-Inner Category-&apos;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;90&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iter_num_b &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Reset start of counting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;91&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; b &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, len_b):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;92&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; s &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(iter_num_b, len_b):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;93&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;bool_bs &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; b &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; len_b &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt;&lt;span&gt; s &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; len_b &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;94&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; b &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; s &lt;/span&gt;&lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; bool_bs: &lt;/span&gt;&lt;span&gt;# Same wardrobes cannot be combi except both are None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;95&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_c&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;-Outer Category-&apos;&lt;/span&gt;&lt;span&gt;][c]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;96&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_o&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;-Outer Category-&apos;&lt;/span&gt;&lt;span&gt;][o]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;97&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_t&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;98&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_i&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;99&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_b&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;-Bottoms Category-&apos;&lt;/span&gt;&lt;span&gt;][b]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;100&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num][&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_s&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dict_wr_category[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;-Bottoms Category-&apos;&lt;/span&gt;&lt;span&gt;][s]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;101&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Count dictionary-length&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;102&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; num &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; __len_combi__:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;103&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content[num] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;104&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                                    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;105&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                                        &lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;106&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iter_num_b &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Shift start of counting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;107&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;iter_num_o &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Shift start of counting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;108&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;109&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Generate predicted values on wardrobe-combination&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;110&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;__best_score__ &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;# Best comfort score&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;111&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(num):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;112&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_score[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;# Set default value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;113&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; key, value &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; combi_content.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;(): &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Search in the dictionaries about wardrobe-combination&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;114&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k, v &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; value.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;():           &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Search in the dictionary about wardrobe-combination&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;115&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; rows_wr:                &lt;/span&gt;&lt;span&gt;# Search in the list about wardrobes-DB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;116&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; v &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;id&apos;&lt;/span&gt;&lt;span&gt;]]: &lt;/span&gt;&lt;span&gt;# If two wardrobe-id are same&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;117&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_score[key][column_history_wear[k] &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; column_history_wear[&lt;/span&gt;&lt;span&gt;&apos;wardrobeid_c&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;warmscore&apos;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;# Store warmscore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;118&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;119&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Append temperature&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;120&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; session[&lt;/span&gt;&lt;span&gt;&quot;user_location&quot;&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;# Get user&apos;s location&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;121&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM weather_today WHERE location = :t_location;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;122&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&apos;t_location&apos;&lt;/span&gt;&lt;span&gt;: location})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;123&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_weather &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;124&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; key, value &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; combi_score.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;125&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_score[key].&lt;/span&gt;&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;([rows_weather[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][column_weather_today[&lt;/span&gt;&lt;span&gt;&quot;temperature_max&quot;&lt;/span&gt;&lt;span&gt;]],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;126&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                 &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_weather[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;][column_weather_today[&lt;/span&gt;&lt;span&gt;&quot;temperature_min&quot;&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;127&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;128&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;129&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# # If you wanna execute other environment(ex. jupyternotebook)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;130&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# path_w = &quot;combi_score.py&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;131&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# generate_function_to_text(&quot;generate_dict_score&quot;, path_w, combi_score)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;132&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;133&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Generate pandas-dataframe from dictionary&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;134&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data_warmscore &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; pd.DataFrame.&lt;/span&gt;&lt;span&gt;from_dict&lt;/span&gt;&lt;span&gt;(combi_score, &lt;/span&gt;&lt;span&gt;orient&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;index&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;columns&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;feature_names[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;135&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_predict_score &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; model.&lt;/span&gt;&lt;span&gt;predict&lt;/span&gt;&lt;span&gt;(data_warmscore) &lt;/span&gt;&lt;span&gt;# Predict (Linear Multiple Regression)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;136&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_predict_score &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}                            &lt;/span&gt;&lt;span&gt;# predict-scores by model of machine learning&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;137&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, num): &lt;/span&gt;&lt;span&gt;# Store absolute value of difference between &quot;__best_score__&quot; and &quot;list_predict_score&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;138&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_predict_score[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;abs&lt;/span&gt;&lt;span&gt;&lt;span&gt;(list_predict_score[i] &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; __best_score__)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;139&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_predict_best &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}  &lt;/span&gt;&lt;span&gt;# Store best comfort-score&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;140&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_candidate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;# Number of candidates of combination&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;141&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;142&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Get &quot;num_candidate&quot; of the best &quot;comfort-score&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;143&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k, v &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sorted&lt;/span&gt;&lt;span&gt;&lt;span&gt;(dict_predict_score.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;lambda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt;: x[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;144&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_predict_best[k] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; v&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;145&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_candidate &lt;/span&gt;&lt;span&gt;-=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;146&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; num_candidate &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;147&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;148&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;149&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Get wardrobeid-combination&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;150&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# dict_predict_best = {3761: 0.0006331531891259345, 19205: 0.0006331531891259345, 3597: 0.0012729990001982827}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;151&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content_best &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;152&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_candidate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;153&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; dict_predict_best.&lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt;():&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;154&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;combi_content_best.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(combi_content[k])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;155&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;num_candidate &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;156&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;157&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Part of &quot;Today&apos;s Recommend&quot; -----------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;158&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Dicionary which will put image-url on wardrobeid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;159&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_image_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;wardrobeid_c&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;wardrobeid_o&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;wardrobeid_t&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;160&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                      &lt;/span&gt;&lt;span&gt;&quot;wardrobeid_i&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;wardrobeid_b&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;wardrobeid_s&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;161&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;162&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# dict_image_url = combi_content_best[0]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;163&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Dictionary which will put wardrobe-name on wardrobeid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;164&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wardrobename &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;165&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Display the wardrobes selected today&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;166&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; key, value &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt;&lt;span&gt; dict_image_url.&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;(): &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# if a wardrobe isn&apos;t selected,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;167&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; value &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;168&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_image_url[key] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nowardrobe_path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;169&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wardrobename[key] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;~NoWardrobe~&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;170&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;# if a wardrobe is selected,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;171&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Select DB for wardrobes to get wardrobename from wardrobeid&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;172&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT wardrobename FROM wardrobes WHERE id = :wardrobeid;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;173&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&quot;wardrobeid&quot;&lt;/span&gt;&lt;span&gt;: value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;174&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;175&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Get wardrobename&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;176&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rows_wn &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchone&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;177&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# Set image-url from wardrobename&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;178&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_image_url[key] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os.path.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;..&quot;&lt;/span&gt;&lt;span&gt;, image_path, &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(session[&lt;/span&gt;&lt;span&gt;&quot;user_id&quot;&lt;/span&gt;&lt;span&gt;]), &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;.jpg&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(rows_wn[&lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;179&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_wardrobename[key] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; rows_wn[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;180&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;181&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Part of &quot;What&apos;s your outfit today?&quot; --------------------------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;182&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Select DB for wardrobes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;183&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;cursor.&lt;/span&gt;&lt;span&gt;execute&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT * FROM wardrobes as T1 LEFT JOIN (SELECT wardrobeid, date_to FROM history_own) T2 ON T1.id = T2.wardrobeid WHERE userid = :t_userid AND date_to = &apos;ongoing&apos;;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;184&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&apos;t_userid&apos;&lt;/span&gt;&lt;span&gt;: session[&lt;/span&gt;&lt;span&gt;&quot;user_id&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;185&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;186&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tuple_row &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cursor.&lt;/span&gt;&lt;span&gt;fetchall&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;187&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;188&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_category &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;category_dictionary&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;# Dictionary about wardrobe&apos;s category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;189&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_o &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []                  &lt;/span&gt;&lt;span&gt;# outer category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;190&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_t &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []                  &lt;/span&gt;&lt;span&gt;# tops category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;191&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_i &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []                  &lt;/span&gt;&lt;span&gt;# inner category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;192&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_b &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; []                  &lt;/span&gt;&lt;span&gt;# bottoms category&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;193&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Put wardrobe-name in list for &quot;select&quot; tag&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;194&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; tuple_row:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;195&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;category&quot;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_category[&lt;/span&gt;&lt;span&gt;&quot;-Outer Category-&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;196&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_o.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;wardrobename&quot;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;197&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;category&quot;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_category[&lt;/span&gt;&lt;span&gt;&quot;-Tops Category-&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;198&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_t.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;wardrobename&quot;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;199&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;category&quot;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_category[&lt;/span&gt;&lt;span&gt;&quot;-Inner Category-&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;200&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_i.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;wardrobename&quot;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;201&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;category&quot;&lt;/span&gt;&lt;span&gt;]] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; dict_category[&lt;/span&gt;&lt;span&gt;&quot;-Bottoms Category-&quot;&lt;/span&gt;&lt;span&gt;]:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;202&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_wardrobe_b.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(i[column_wardrobes[&lt;/span&gt;&lt;span&gt;&quot;wardrobename&quot;&lt;/span&gt;&lt;span&gt;]])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;203&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dict_list_wardrobe &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;&quot;c&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_o, &lt;/span&gt;&lt;span&gt;&quot;o&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_o,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;204&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;&quot;t&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_t, &lt;/span&gt;&lt;span&gt;&quot;i&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_i,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;205&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                          &lt;/span&gt;&lt;span&gt;&quot;b&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_b, &lt;/span&gt;&lt;span&gt;&quot;s&quot;&lt;/span&gt;&lt;span&gt;: list_wardrobe_b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;206&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                         &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;207&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;208&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Remember which page user is in now&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;209&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;session[&lt;/span&gt;&lt;span&gt;&quot;nowpage&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;recommend&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;210&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;211&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;render_template&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;recommend.html&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;img_urls&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dict_image_url, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;names&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dict_wardrobename, &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wardrobes&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dict_list_wardrobe) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# おすすめの服を反映。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下が学習に利用した、モジュールになりますね。&lt;/p&gt;&lt;p&gt;どの回帰モデルが正解率が高いかを試してますね・・・コメント多すぎだろ（笑）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model_learning&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# # 線形単回帰 Linear Regression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# for i in feature_names:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     train_X, test_X, train_y, test_y = train_test_split(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#         data[i],data[&quot;comfort_score&quot;],random_state=42) # トレーニングとテストデータを作成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     print(data[i][0])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     # Xのデータの形を修正&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     train_X = train_X.values.reshape((-1, 1))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     test_X = test_X.values.reshape((-1, 1))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     model = LinearRegression() # Generate model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     model.fit(train_X, train_y) # Let model learn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     print(model.predict(test_X))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     print(&quot;線形単回帰：{}&quot;.format(i)) # データ列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;#     print(&quot;決定係数：{}\n&quot;.format(model.score(test_X, test_y))) # テストして出た決定係数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# 線形重回帰 Linear Multiple Regression&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;train_X, test_X, train_y, test_y &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;train_test_split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data.&lt;/span&gt;&lt;span&gt;drop&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;comfort_score&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;axis&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), data[&lt;/span&gt;&lt;span&gt;&quot;comfort_score&quot;&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;random_state&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LinearRegression&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model.&lt;/span&gt;&lt;span&gt;fit&lt;/span&gt;&lt;span&gt;(train_X, train_y)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# save model as .sav file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pickle.&lt;/span&gt;&lt;span&gt;dump&lt;/span&gt;&lt;span&gt;(model, &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;comfort_model.sav&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;wb&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(test_X)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# print(model.predict(test_X))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;線形重回帰：&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;comfort_score&quot;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;# データ列&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;決定係数：&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;(model.&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;(test_X, test_y))) &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# テストして出た決定係数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# # ElasticNet回帰&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# train_X, test_X, train_y, test_y = train_test_split(data.drop(&quot;comfort_score&quot;, axis=1), data[&quot;comfort_score&quot;], random_state=42)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# model = ElasticNet(l1_ratio=0.0) # ラッソで鑑みる割合&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# model.fit(train_X, train_y) # Let model learn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# print(&quot;ElasticNet回帰：{}&quot;.format(model.score(test_X, test_y)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;学習させる情報が8つもあるため、たくさんデータを学習させる必要があります。なので、快適な組み合わせをレコメンドさせるには、色々な組み合わせと快適さのデータを取らないとですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;予想外のレコメンド&lt;a href=&quot;#予想外のレコメンド&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちなみに、僕が100日分くらいのデータをAIに学習させた際には、どんなコーディネートを提案されたと思いますか？&lt;/p&gt;&lt;p&gt;以下の画像がそのときのレコメンド画面のイメージになります。
&lt;img loading=&quot;lazy&quot; width=&quot;2535&quot; height=&quot;1096&quot; src=&quot;/_astro/22.Ci8OGbJV_Z1jfeQ6.webp&quot; srcset=&quot;/_astro/22.Ci8OGbJV_ZHtgWQ.webp 640w, /_astro/22.Ci8OGbJV_22Acpg.webp 750w, /_astro/22.Ci8OGbJV_lumu7.webp 828w, /_astro/22.Ci8OGbJV_ZOWnxW.webp 1080w, /_astro/22.Ci8OGbJV_ARzdF.webp 1280w, /_astro/22.Ci8OGbJV_1IbksB.webp 1668w, /_astro/22.Ci8OGbJV_1SpNNH.webp 2048w, /_astro/22.Ci8OGbJV_Z1jfeQ6.webp 2535w&quot; /&gt;&lt;/p&gt;&lt;p&gt;上記の画面をよく見ると・・・、ボトムスが空白になっています。つまり、AIは「今日はズボン穿かなくても良いんじゃね？」と、勧めてきたのです（笑）&lt;/p&gt;&lt;p&gt;実際にそれで着てみると以下のような感じになるんでしょうか？　なかなか前衛的ですね・・・
&lt;img loading=&quot;lazy&quot; width=&quot;399&quot; height=&quot;555&quot; src=&quot;/_astro/23.DQpXEobf_18TShe.webp&quot; srcset=&quot;/_astro/23.DQpXEobf_18TShe.webp 399w&quot; /&gt;&lt;/p&gt;&lt;p&gt;おそらく、僕が毎日同じ暖かさのズボンしか穿かないため、AIは「こいつ何穿いても変わんなくね？」と判断したのだと思われます・・・。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ふー・・・、沢山話したなぁ！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_001.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;・・・ところで、いつになったらズボンを穿くんだい？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;あ・・・、AIのレコメンドだから・・・。&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【ガジェット、Mac】7年ぶりにMacを買うから、2013年のMacBook Proと2021年のMacBook Proを比べてみた。</title><link>https://endorphinbath.com/posts/comparing-macbookpro-2013-2021/</link><guid isPermaLink="true">https://endorphinbath.com/posts/comparing-macbookpro-2013-2021/</guid><description>7年ぶりにMacを新調するので、2013年のMacBook Proと2021年のMacBook Proを比べて、どれだけ性能・仕様に違いがあるのかを調べてみました。流石に7年も違うとなると、全然違う・・・！？</description><pubDate>Mon, 25 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;おい、聞いてくれ、ついに来たんだよ・・・！！&lt;a href=&quot;#おい聞いてくれついに来たんだよ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おい、聞いてくれ、ついに来たんだよ・・・！！&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_017.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;ほえ～。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;おーい、昼飯ねえか？&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;新しいMacのビジュアル&lt;a href=&quot;#新しいmacのビジュアル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;強そう。
&lt;img loading=&quot;lazy&quot; width=&quot;2068&quot; height=&quot;1221&quot; src=&quot;/_astro/01.XwG4yRcT_Z1Wmw90.webp&quot; srcset=&quot;/_astro/01.XwG4yRcT_2wmntK.webp 640w, /_astro/01.XwG4yRcT_8ggJI.webp 750w, /_astro/01.XwG4yRcT_W5a7z.webp 828w, /_astro/01.XwG4yRcT_ZGVtpJ.webp 1080w, /_astro/01.XwG4yRcT_4TpGt.webp 1280w, /_astro/01.XwG4yRcT_2wuUqJ.webp 1668w, /_astro/01.XwG4yRcT_ZcBuAr.webp 2048w, /_astro/01.XwG4yRcT_Z1Wmw90.webp 2068w&quot; /&gt;&lt;/p&gt;&lt;p&gt;MagSafeとかHDMIがあるじゃねえか！subara see.
&lt;img loading=&quot;lazy&quot; width=&quot;2355&quot; height=&quot;587&quot; src=&quot;/_astro/02.szXifyb2_1RiUms.webp&quot; srcset=&quot;/_astro/02.szXifyb2_2n4s1K.webp 640w, /_astro/02.szXifyb2_Zy3X0B.webp 750w, /_astro/02.szXifyb2_Z1Aehcp.webp 828w, /_astro/02.szXifyb2_2u3KNz.webp 1080w, /_astro/02.szXifyb2_Z1mkbif.webp 1280w, /_astro/02.szXifyb2_1J0a7q.webp 1668w, /_astro/02.szXifyb2_Z140X2z.webp 2048w, /_astro/02.szXifyb2_1RiUms.webp 2355w&quot; /&gt;&lt;/p&gt;&lt;p&gt;強いな。
&lt;img loading=&quot;lazy&quot; width=&quot;1880&quot; height=&quot;1087&quot; src=&quot;/_astro/03.CbYGhn7C_1OhSDc.webp&quot; srcset=&quot;/_astro/03.CbYGhn7C_z8ztt.webp 640w, /_astro/03.CbYGhn7C_Z1MuCvf.webp 750w, /_astro/03.CbYGhn7C_1ytmKm.webp 828w, /_astro/03.CbYGhn7C_Z1Tdzqv.webp 1080w, /_astro/03.CbYGhn7C_Z13g92v.webp 1280w, /_astro/03.CbYGhn7C_2gIegY.webp 1668w, /_astro/03.CbYGhn7C_1OhSDc.webp 1880w&quot; /&gt;&lt;/p&gt;&lt;p&gt;End of Touch Bar!!
&lt;img loading=&quot;lazy&quot; width=&quot;2247&quot; height=&quot;1117&quot; src=&quot;/_astro/04.9f6J_a2b_ZK9Wro.webp&quot; srcset=&quot;/_astro/04.9f6J_a2b_tG49r.webp 640w, /_astro/04.9f6J_a2b_Z1aedxV.webp 750w, /_astro/04.9f6J_a2b_Z134ADP.webp 828w, /_astro/04.9f6J_a2b_Z2l10ex.webp 1080w, /_astro/04.9f6J_a2b_Z23028i.webp 1280w, /_astro/04.9f6J_a2b_ZDaUGK.webp 1668w, /_astro/04.9f6J_a2b_Z136QlW.webp 2048w, /_astro/04.9f6J_a2b_ZK9Wro.webp 2247w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7年待った甲斐があった・・・！！&lt;a href=&quot;#7年待った甲斐があった&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もうディスプレイも見づらいし、めっちゃ再起動するし、早く買い替えたかったんですけど・・・。&lt;/p&gt;&lt;p&gt;これまでMacを新調しなかったのは、下記の色々な理由があったためでした。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;バタフライキーボードが嫌だった。&lt;/li&gt;
&lt;li&gt;TouchBarとかいうのが搭載された。&lt;/li&gt;
&lt;li&gt;MagSafeじゃなくなった。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;例えば、このペタペタなキーボード。
なんか無駄に電気を消費して光ってるよくわかんねえ細長いパッドが嫌だった・・・！
&lt;img loading=&quot;lazy&quot; width=&quot;1073&quot; height=&quot;674&quot; src=&quot;/_astro/05.W9egctyf_Z1jCuy8.webp&quot; srcset=&quot;/_astro/05.W9egctyf_1e5l6D.webp 640w, /_astro/05.W9egctyf_kHDWi.webp 750w, /_astro/05.W9egctyf_1PrhH6.webp 828w, /_astro/05.W9egctyf_Z1jCuy8.webp 1073w&quot; /&gt;&lt;/p&gt;&lt;p&gt;また、それらの要素は世間的にも受け入れられていませんでした。&lt;/p&gt;&lt;p&gt;しかし、そんな中、今回のMacがいよいよ登場しました。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;比較してみたぜい。&lt;a href=&quot;#比較してみたぜい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一旦、全体的に表にしてみたよ。今、僕が持っているMacbook Proが「Retina, 13-inch, Late 2013」という機種です。&lt;/p&gt;&lt;p&gt;買った時は、20万後半だった記憶があって、7年前と今だと今のほうが半導体不足でPCの値段が上がってることを考慮して、10コアCPUで16コアGPU（執筆時299,800円）のものと比較するよ。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;表（その1）&lt;a href=&quot;#表その1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;

























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;要素&lt;/th&gt;&lt;th&gt;Retina, 13-inch, Late 2013&lt;/th&gt;&lt;th&gt;10コアCPUで16コアGPU 2021&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;メモリ&lt;/td&gt;&lt;td&gt;8 GB&lt;/td&gt;&lt;td&gt;16 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ストレージ&lt;/td&gt;&lt;td&gt;512GB HDD&lt;/td&gt;&lt;td&gt;1TB SSD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;Intel Core i5&lt;/td&gt;&lt;td&gt;Apple M1 Pro&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPUのコア数&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CPUの動作周波数&lt;/td&gt;&lt;td&gt;2.6 GHz&lt;/td&gt;&lt;td&gt;3.2 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPU&lt;/td&gt;&lt;td&gt;Intel HD Graphics 4000&lt;/td&gt;&lt;td&gt;Apple M1 Pro&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPUのコア数&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPUの動作周波数&lt;/td&gt;&lt;td&gt;1.4 GHz&lt;/td&gt;&lt;td&gt;1.3 GHz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Neural Engine&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;16コアNeural Engine&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ディスプレイ&lt;/td&gt;&lt;td&gt;Retinaディスプレイ&lt;/td&gt;&lt;td&gt;Liquid Retina XDRディスプレイ&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ディスプレイの解像度&lt;/td&gt;&lt;td&gt;227 ppi&lt;/td&gt;&lt;td&gt;254 ppi&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ディスプレイの色対応&lt;/td&gt;&lt;td&gt;数百万色以上対応&lt;/td&gt;&lt;td&gt;10億色対応&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ディスプレイ拡張&lt;/td&gt;&lt;td&gt;最大2台の外部ディスプレイで最大2,560 x 1,600ピクセル表示をサポート&lt;/td&gt;&lt;td&gt;最大2台の外部ディスプレイで最大6K（6016 x 3384ピクセル）解像度&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wi-Fi対応&lt;/td&gt;&lt;td&gt;IEEE 802.11a/b/g/n&lt;/td&gt;&lt;td&gt;IEEE 802.11a/b/g/n/ac/ax&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bluetooth対応&lt;/td&gt;&lt;td&gt;4.0&lt;/td&gt;&lt;td&gt;5.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;カメラ&lt;/td&gt;&lt;td&gt;720p FaceTime HDカメラ&lt;/td&gt;&lt;td&gt;1080p FaceTime HDカメラ&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;何から何まで逞しくなりました・・・。&lt;/p&gt;&lt;p&gt;これ以外にもディスプレイのリフレッシュレートも逞しくなって、画面がヌルヌルに動くらしい。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;表（その2）&lt;a href=&quot;#表その2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;その1で書けなかった分です。&lt;/p&gt;
































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;要素&lt;/th&gt;&lt;th&gt;Retina, 13-inch, Late 2013&lt;/th&gt;&lt;th&gt;10コアCPUで16コアGPU 2021&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;画面インチ&lt;/td&gt;&lt;td&gt;13 inch&lt;/td&gt;&lt;td&gt;14 inch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;長辺長さ&lt;/td&gt;&lt;td&gt;31.4 cm&lt;/td&gt;&lt;td&gt;31.26 cm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;短辺長さ&lt;/td&gt;&lt;td&gt;21.9 cm&lt;/td&gt;&lt;td&gt;22.12 cm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;厚さ&lt;/td&gt;&lt;td&gt;1.9 cm&lt;/td&gt;&lt;td&gt;1.55 cm&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;重さ&lt;/td&gt;&lt;td&gt;1.62 kg&lt;/td&gt;&lt;td&gt;1.6 kg&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;充電方法&lt;/td&gt;&lt;td&gt;MagSafe 2&lt;/td&gt;&lt;td&gt;MagSafe 3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;USBポート&lt;/td&gt;&lt;td&gt;USB3 ×2&lt;/td&gt;&lt;td&gt;USB4 ×3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Thunderboltポート&lt;/td&gt;&lt;td&gt;Thunderbolt ×2&lt;/td&gt;&lt;td&gt;Thunderbolt 4 ×3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SDXCカードスロット&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;HDMIポート&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヘッドフォンポート&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;td&gt;×1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;２０１３年のMacbook Pro&lt;/strong&gt;
&lt;img loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;392&quot; src=&quot;/_astro/06.5bqa9Vzr_1EsIso.webp&quot; srcset=&quot;/_astro/06.5bqa9Vzr_1A2cdg.webp 640w, /_astro/06.5bqa9Vzr_ZGbqGs.webp 750w, /_astro/06.5bqa9Vzr_ZxXUVi.webp 828w, /_astro/06.5bqa9Vzr_NcswV.webp 1080w, /_astro/06.5bqa9Vzr_1EsIso.webp 1153w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;２０２１年のMacbook Pro&lt;/strong&gt;
&lt;img loading=&quot;lazy&quot; width=&quot;1225&quot; height=&quot;546&quot; src=&quot;/_astro/07.DQFlXiyB_Z1E1BIO.webp&quot; srcset=&quot;/_astro/07.DQFlXiyB_KUJ8K.webp 640w, /_astro/07.DQFlXiyB_2ool7q.webp 750w, /_astro/07.DQFlXiyB_Z23A9Qk.webp 828w, /_astro/07.DQFlXiyB_2qOeCW.webp 1080w, /_astro/07.DQFlXiyB_Z1E1BIO.webp 1225w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今使ってるThunderboltとか結局一度も使わなそうだな・・・USB-type Cに規格が統一されたのは本当に助かる。&lt;/p&gt;&lt;p&gt;拡張性がほとんど変わらず（性能は大幅に上がったが）、薄くなってるのが凄いですね。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;一体いくつものOSの屍を乗り越えてきたんだ・・・？&lt;a href=&quot;#一体いくつものosの屍を乗り越えてきたんだ&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;僕が今持ってるMacから最新のMacまでのOSの移り変わりをまとめてみました。&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;OS&lt;/th&gt;&lt;th&gt;出来事&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;OS X 10.9 Mavericks&lt;/td&gt;&lt;td&gt;僕の7年前買ったMacにデフォルトで入っていたOS。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS X 10.10 Yosemite&lt;/td&gt;&lt;td&gt;僕はBootcampを使い始める。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OS X 10.11 El Capitan&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 10.12 Sierra&lt;/td&gt;&lt;td&gt;macOSというOSになる。BootcampがOSから起動できねえええ。&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 10.13 High Sierra&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 10.14 Mojave&lt;/td&gt;&lt;td&gt;僕のMacはこれ以降OSアップグレードしてません・・・&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 10.15 Catalina&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 11 Big Sur&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;macOS 12 Monterey&lt;/td&gt;&lt;td&gt;2021版Macbook Pro発表の1週間後くらいに正式発表された。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;9つもOSを経ているわけで、UIとか色々変わりました・・・。例えば、Dockとかすんごいフラットになりました。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;２０１３年のMacbook Pro&lt;/strong&gt;
&lt;img loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;47&quot; src=&quot;/_astro/08.DLa3q9rp_Z1XLnSH.webp&quot; srcset=&quot;/_astro/08.DLa3q9rp_Z1KNcDj.webp 640w, /_astro/08.DLa3q9rp_Z1XLnSH.webp 674w&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;２０２１年のMacbook Pro&lt;/strong&gt;
&lt;img loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;32&quot; src=&quot;/_astro/09.BEkm1U7u_ZiQcPe.webp&quot; srcset=&quot;/_astro/09.BEkm1U7u_ZiQcPe.webp 493w&quot; /&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;7年使った僕のMacbook Proの勇姿を見たい・・・！&lt;a href=&quot;#7年使った僕のmacbook-proの勇姿を見たい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まあでもしかし、本当に頑張った！&lt;/p&gt;&lt;p&gt;BootcampしたWindowsでRhinocerosを開きながら、IllustratorとPhotoshopを開くという暴挙をよく受け入れてくれた！&lt;/p&gt;&lt;p&gt;本当に感謝しかねえ・・・&lt;/p&gt;&lt;p&gt;なんかディスプレイのフィルムが剥がれている・・・表面を水拭きしても取れないような汚れも・・・
&lt;img loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; src=&quot;/_astro/10.BsixzsLr_ZPVA5U.webp&quot; srcset=&quot;/_astro/10.BsixzsLr_Z1Rny79.webp 640w, /_astro/10.BsixzsLr_Z1KXbtT.webp 750w, /_astro/10.BsixzsLr_Of12a.webp 828w, /_astro/10.BsixzsLr_1iOnoD.webp 1080w, /_astro/10.BsixzsLr_1qGdQr.webp 1280w, /_astro/10.BsixzsLr_Z3e89V.webp 1668w, /_astro/10.BsixzsLr_2cDS7o.webp 2048w, /_astro/10.BsixzsLr_Z18iXpr.webp 2560w, /_astro/10.BsixzsLr_ZPVA5U.webp 4032w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ディスプレイがある方とキーボードがある方が微妙にずれている・・・どこかで変な力がかかっちゃったのかも・・・リュックに入ってるときかなあ。
&lt;img loading=&quot;lazy&quot; width=&quot;2461&quot; height=&quot;837&quot; src=&quot;/_astro/11.CzESeDzT_1u37yg.webp&quot; srcset=&quot;/_astro/11.CzESeDzT_2ohuK2.webp 640w, /_astro/11.CzESeDzT_73QPj.webp 750w, /_astro/11.CzESeDzT_fgmAt.webp 828w, /_astro/11.CzESeDzT_oYa69.webp 1080w, /_astro/11.CzESeDzT_1yNTv3.webp 1280w, /_astro/11.CzESeDzT_ZvwRJk.webp 1668w, /_astro/11.CzESeDzT_ZS0XPg.webp 2048w, /_astro/11.CzESeDzT_1u37yg.webp 2461w&quot; /&gt;&lt;/p&gt;&lt;p&gt;普段どおり使ってたら急にこの画面が・・・何が「？」なんだ？
だいぶ疲れているようだ・・・
&lt;img loading=&quot;lazy&quot; width=&quot;3461&quot; height=&quot;2927&quot; src=&quot;/_astro/12.CRhSLkFi_Z1Eehkk.webp&quot; srcset=&quot;/_astro/12.CRhSLkFi_Z2igInL.webp 640w, /_astro/12.CRhSLkFi_jbrv3.webp 750w, /_astro/12.CRhSLkFi_knosk.webp 828w, /_astro/12.CRhSLkFi_ZOPIUr.webp 1080w, /_astro/12.CRhSLkFi_Z1mNQ0h.webp 1280w, /_astro/12.CRhSLkFi_eDXEs.webp 1668w, /_astro/12.CRhSLkFi_Z1wRJyq.webp 2048w, /_astro/12.CRhSLkFi_Z2e7aJv.webp 2560w, /_astro/12.CRhSLkFi_Z1Eehkk.webp 3461w&quot; /&gt;&lt;/p&gt;&lt;p&gt;このMacで何本アニメを見て、何回24を見たことか・・・。こんな風に光ることはもうないのかな・・・。
&lt;img loading=&quot;lazy&quot; width=&quot;2101&quot; height=&quot;1185&quot; src=&quot;/_astro/13.BV9uYTPx_ZRvaFV.webp&quot; srcset=&quot;/_astro/13.BV9uYTPx_1kgiaQ.webp 640w, /_astro/13.BV9uYTPx_Z12eOPi.webp 750w, /_astro/13.BV9uYTPx_ZdhQtR.webp 828w, /_astro/13.BV9uYTPx_ZqJRQT.webp 1080w, /_astro/13.BV9uYTPx_Z21IIsG.webp 1280w, /_astro/13.BV9uYTPx_Z14z5Rc.webp 1668w, /_astro/13.BV9uYTPx_Z1bYFkM.webp 2048w, /_astro/13.BV9uYTPx_ZRvaFV.webp 2101w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ぅあ～、随分お世話になったな～。&lt;/p&gt;&lt;p&gt;やっぱり長い間使ってると、思い入れが強くなりますわ。新しいのを買うまでもう少しお世話になります・・・！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Macの電力条件および動作環境&lt;a href=&quot;#macの電力条件および動作環境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回調べてみて、7年経っても変わらない項目がありましたが、PCが動く環境って基本的には変わらないってことを小並ながら分かりました。&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指標&lt;/th&gt;&lt;th&gt;数値&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;電源電圧&lt;/td&gt;&lt;td&gt;100V～240V AC&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;電源周波数&lt;/td&gt;&lt;td&gt;50Hz〜60Hz&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;動作時温度&lt;/td&gt;&lt;td&gt;10°〜35°C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;保管時温度&lt;/td&gt;&lt;td&gt;24°〜45°C&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;相対湿度&lt;/td&gt;&lt;td&gt;0%〜90%（結露しないこと）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最高動作高度&lt;/td&gt;&lt;td&gt;3,048 m&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最高保管高度&lt;/td&gt;&lt;td&gt;4,572 m&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;最高輸送高度&lt;/td&gt;&lt;td&gt;10,668 m&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/02_nayutarisa_005.webp&quot; alt=&quot;リサちゃん avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;リサちゃん&lt;/div&gt;&lt;/div&gt;&lt;div&gt;本当にMacって7年の間で随分様変わりしたんだねぇ。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/01_kinkinbeer135ml_001.webp&quot; alt=&quot;135ml avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;135ml&lt;/div&gt;&lt;/div&gt;&lt;div&gt;保育園児が中学生になるくらい変わったな。これからさらに磨きがかかるかどうか楽しみですな。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;/assets/images/speech-bubble/03_penguinbeer135ml_001.webp&quot; alt=&quot;ペンギン avatar&quot; loading=&quot;lazy&quot; /&gt;&lt;div&gt;ペンギン&lt;/div&gt;&lt;/div&gt;&lt;div&gt;今回、参考になったサイトとかを書いておくぜ。&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;https://support.apple.com/ja-jp/118466&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.apple.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Apple Support&lt;/span&gt;&lt;/div&gt;&lt;div&gt;MacBook Pro (Retina, 13-inch, Early 2013) - 技術仕様 - Apple サポート (日本)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;support.apple.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://support.apple.com/ja-jp/111971&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://support.apple.com/favicon.ico&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;Apple Support&lt;/span&gt;&lt;/div&gt;&lt;div&gt;MacBook Pro (Retina, 15-inch, Late 2013) - 技術仕様 - Apple サポート (日本)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;support.apple.com&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://www.apple.com/jp/macbook-pro/specs/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Apple（日本）&lt;/span&gt;&lt;/div&gt;&lt;div&gt;MacBook Pro - 仕様&lt;/div&gt;&lt;div&gt;M5、M5 Pro、またはM5 Maxチップを搭載した14インチと16インチMacBook Proの詳しい仕様を紹介します。&lt;/div&gt;&lt;div&gt;www.apple.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.apple.com/jp/macbook-pro/specs/images/meta/macbook-pro__cbx23ubsuefm_og.png?202604222158&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;a href=&quot;https://ja.wikipedia.org/wiki/MacOS&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://ja.wikipedia.org/static/apple-touch/wikipedia.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;ja.wikipedia.org&lt;/span&gt;&lt;/div&gt;&lt;div&gt;macOS - Wikipedia&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;ja.wikipedia.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【SKYSEA、PowerShell】ソフトウェア配布先でバッチ以外の処理を実行させる</title><link>https://endorphinbath.com/posts/skysea-exeuting-powershell/</link><guid isPermaLink="true">https://endorphinbath.com/posts/skysea-exeuting-powershell/</guid><description>SKYSEAで配布先のPCでバッチ以外のファイルを実行する方法およびバッチファイルのコードを紹介します。バッチの遅延環境変数とか使っても出来ない処理をPowerShellで実行させたときに今回の処理を行いました。</description><pubDate>Sun, 24 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじめに&lt;a href=&quot;#はじめに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前にお仕事でSKYSEAから全配布端末にある、とあるデータを配布元端末に送るツールを作りました。&lt;/p&gt;&lt;p&gt;その際に、バッチだけだと限界があったのでPowerShellで書きました。
（あの頃やりたかった処理は、遅延環境変数とか使っても無理でしたね・・・）&lt;/p&gt;&lt;p&gt;しかし、SKYSEAで配布後に実行するコマンドにPowerShellを実行できるものが見つからず焦ったことが思い出にあります。
先にPowerShellを書く前に調べろよ・・という話ですが・・・、いやー焦った焦った（笑）&lt;/p&gt;&lt;p&gt;今回紹介するのは、PowerShellで実行するのに必要なファイルと、バッチファイルでPowerShellでキックするソースになります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;必要なファイル&lt;a href=&quot;#必要なファイル&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず、PowerShellの処理に必要なファイルを挙げておきます。&lt;/p&gt;&lt;p&gt;SKYSEAで配信するときに、以下のファイルを全て一緒に配布する必要があります。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;バッチファイル（&lt;code&gt;.bat&lt;/code&gt;）・・・PowerShellをキックするため。&lt;/li&gt;
&lt;li&gt;PowerShell（&lt;code&gt;.ps1&lt;/code&gt;）・・・行いたい処理をするため。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;バッチファイルのソース&lt;a href=&quot;#バッチファイルのソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下、PowerShellをキックするためのバッチのソースになります。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;REM&lt;/span&gt;&lt;span&gt; --- code in utf-8 ---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ExecPS.bat&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;..\Media\&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execPS&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;haifu.ps1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;span&gt; -NoProfile -ExecutionPolicy Unrestricted &lt;/span&gt;&lt;span&gt;%execDir%%execPS%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;exit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;SKYSEAの配布先のディレクトリなどを変数に入れる&lt;a href=&quot;#skyseaの配布先のディレクトリなどを変数に入れる&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の記述で、PowerShellのファイルがあるディレクトリを指定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;..\Media\&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、以下の記述で、実行したいPowerShellファイルを指定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execPS&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;haifu.ps1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;PowerShellを実行する&lt;a href=&quot;#powershellを実行する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の記述で、PowerShellのファイル を実行します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;span&gt; -NoProfile -ExecutionPolicy Unrestricted &lt;/span&gt;&lt;span&gt;%execDir%%execPS%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;以下が「powershell」コマンドを実行するときに今回指定したオプションです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;NoProfile&lt;a href=&quot;#noprofile&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ちょっと調べたら、Windows PowerShell プロファイルを読み込まないようにするらしいです。&lt;/p&gt;&lt;p&gt;「PowerShell プロファイルとは何ぞや？」と思って調べたら、「PowerShell の開始時に実行されるスクリプト」のことだそうです。&lt;/p&gt;&lt;p&gt;なるほど、そのスクリプトの中に、自分が使うエイリアスが混じってたら、なんか面倒くさいことになるっぽいですね・・・（以下が、参考サイトです。）&lt;/p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;@MicrosoftLearn&lt;/span&gt;&lt;/div&gt;&lt;div&gt;about_Profiles - PowerShell&lt;/div&gt;&lt;div&gt;PowerShell プロファイルを作成して使用する方法について説明します。&lt;/div&gt;&lt;div&gt;learn.microsoft.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://learn.microsoft.com/media/logos/logo-powershell-social.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ExecutionPolicy&lt;a href=&quot;#executionpolicy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自分が作ったファイルを実行したので、「Unrestricted」くらいにしています。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ちなみに、データの格納先の指定の仕方は・・・&lt;a href=&quot;#ちなみにデータの格納先の指定の仕方は&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;吸い上げたデータを配布元のPCなどに格納する場合は、SKYSEAでは厳しそうでした。&lt;/p&gt;&lt;p&gt;なので、PowerShell内で、配布元のPCのIPアドレスを指定して、そこにデータを送る処理を入れていました。（&lt;code&gt;\\IPアドレス\c$&lt;/code&gt;的な。）&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おわり&lt;a href=&quot;#おわり&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WindowsのPCであれば、ほぼ間違いなくPowerShellファイルを実行できる環境はあると思います。&lt;/p&gt;&lt;p&gt;なので、僕と同じように沢山の端末に対して、何かしらのデータを取得したい場合は、本記事をご参考下さい。&lt;/p&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>【Salesforce】Data Loaderのインストール手順をメモ書いておく</title><link>https://endorphinbath.com/posts/salesforce-dataloader-install/</link><guid isPermaLink="true">https://endorphinbath.com/posts/salesforce-dataloader-install/</guid><description>Salesforceにあるデータを更新および取得してくれるData Loaderのインストール手順をまとめています。発端としては、公式サイトの記事が消えてしまったのでここでまとめています。</description><pubDate>Sat, 23 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじめに&lt;a href=&quot;#はじめに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;3日前くらいにSalesforceのData Loaderを入れる機会がありまして、3ヶ月前くらいに先輩から聞いたインストール手順があるページを開いたら・・・
&lt;img loading=&quot;lazy&quot; width=&quot;2559&quot; height=&quot;1253&quot; src=&quot;/_astro/01.Bee0Ldgp_1UCird.webp&quot; srcset=&quot;/_astro/01.Bee0Ldgp_OAYao.webp 640w, /_astro/01.Bee0Ldgp_ZMQoMF.webp 750w, /_astro/01.Bee0Ldgp_1Qsk0b.webp 828w, /_astro/01.Bee0Ldgp_Z14Ht5u.webp 1080w, /_astro/01.Bee0Ldgp_1MrOy7.webp 1280w, /_astro/01.Bee0Ldgp_KkDYR.webp 1668w, /_astro/01.Bee0Ldgp_Z25wxE7.webp 2048w, /_astro/01.Bee0Ldgp_1UCird.webp 2559w&quot; /&gt;&lt;/p&gt;&lt;p&gt;404でしたー。&lt;/p&gt;&lt;p&gt;なんで、そんな大事なページを無くしてしまうかな・・・転載したならリダイレクトさせて下さいよ・・・&lt;/p&gt;&lt;p&gt;よし、転載先がまた消えても困るので、自分で手順を書くことにする。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;インストール手順&lt;a href=&quot;#インストール手順&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;手順としては、以下の通り。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;JRE（Java Runtime Environment）をインストールする。&lt;/li&gt;
&lt;li&gt;Data Loaderをインストールする。&lt;/li&gt;
&lt;/ol&gt;&lt;section&gt;&lt;h3&gt;JRE（Java Runtime Environment）をインストールする。&lt;a href=&quot;#jrejava-runtime-environmentをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Data Loaderを動かすために、JREというものが入っていなければなりません。&lt;/p&gt;&lt;p&gt;なので、まず、JREかJDKがPCに入っているかどうかをチェック。&lt;/p&gt;&lt;p&gt;「JDK」か「JRE」で検索。
&lt;img loading=&quot;lazy&quot; width=&quot;1467&quot; height=&quot;1105&quot; src=&quot;/_astro/02.GO7f0NfG_QpGeq.webp&quot; srcset=&quot;/_astro/02.GO7f0NfG_Zw9dAU.webp 640w, /_astro/02.GO7f0NfG_ZpIPXF.webp 750w, /_astro/02.GO7f0NfG_ZmFKlm.webp 828w, /_astro/02.GO7f0NfG_Z9CFO5.webp 1080w, /_astro/02.GO7f0NfG_2tgWTi.webp 1280w, /_astro/02.GO7f0NfG_QpGeq.webp 1467w&quot; /&gt;&lt;/p&gt;&lt;p&gt;ここにJDKかJREが無かったら、PCに入っていないのでインストールする必要あり。&lt;/p&gt;&lt;p&gt;そして、JDK（Java Development Kit）というものを入れれば、JREも一緒に入ります。&lt;/p&gt;&lt;p&gt;なので、JDKを&lt;a href=&quot;https://www.oracle.com/java/technologies/downloads/#jdk17-windows&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;からインストールすれば大丈夫。&lt;/p&gt;&lt;p&gt;※JREのインストールには管理者権限が必要！&lt;/p&gt;&lt;p&gt;パッケージをダウンロードする場所はこんなページ。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1248&quot; src=&quot;/_astro/03.DxiMfyXi_1cw3sw.webp&quot; srcset=&quot;/_astro/03.DxiMfyXi_Z1ABno3.webp 640w, /_astro/03.DxiMfyXi_1Q7mrO.webp 750w, /_astro/03.DxiMfyXi_ZyK2yg.webp 828w, /_astro/03.DxiMfyXi_2rCyea.webp 1080w, /_astro/03.DxiMfyXi_Z2gr5cJ.webp 1280w, /_astro/03.DxiMfyXi_ZIoUdC.webp 1668w, /_astro/03.DxiMfyXi_Z8r28l.webp 2048w, /_astro/03.DxiMfyXi_1cw3sw.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;JDKには、これ以外にAzul社のOpenJDKとかいうやつもあります。それでもData Loaderは動くっぽいです。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Data Loaderをインストールする。&lt;a href=&quot;#data-loaderをインストールする&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず、アカウントにログインします。（Data Loader使うんだからあり・・・ますよね？）&lt;/p&gt;&lt;p&gt;それで、アカウントの右上の歯車アイコンをクリックして、さらに「設定」をクリック。&lt;/p&gt;&lt;p&gt;そして、検索ボックスに「データローダ」を入力して検索。データローダのダウンロードページに遷移するのでそこで手順に沿ってダウンロードおよびインストールする。
&lt;img loading=&quot;lazy&quot; width=&quot;2556&quot; height=&quot;1258&quot; src=&quot;/_astro/04.DA3M8iwI_GtRk3.webp&quot; srcset=&quot;/_astro/04.DA3M8iwI_2bqXLr.webp 640w, /_astro/04.DA3M8iwI_xXzNn.webp 750w, /_astro/04.DA3M8iwI_F8cHt.webp 828w, /_astro/04.DA3M8iwI_ZoyDP6.webp 1080w, /_astro/04.DA3M8iwI_2sADNv.webp 1280w, /_astro/04.DA3M8iwI_Z18EQi6.webp 1668w, /_astro/04.DA3M8iwI_1KImBI.webp 2048w, /_astro/04.DA3M8iwI_GtRk3.webp 2556w&quot; /&gt;&lt;/p&gt;&lt;p&gt;インストール画面になると、コマンドプロンプトみたいなコンソール画面になって、質問に「Yes」「No」とかで答えます。&lt;/p&gt;&lt;p&gt;そして、無事インストールできて、Data Loaderがちゃんと開けると、こんな画面が表示されます。
&lt;img loading=&quot;lazy&quot; width=&quot;908&quot; height=&quot;319&quot; src=&quot;/_astro/05.qbaTSkfT_Z190dun.webp&quot; srcset=&quot;/_astro/05.qbaTSkfT_2igvau.webp 640w, /_astro/05.qbaTSkfT_MzIfL.webp 750w, /_astro/05.qbaTSkfT_ZfNwhH.webp 828w, /_astro/05.qbaTSkfT_Z190dun.webp 908w&quot; /&gt;&lt;/p&gt;&lt;p&gt;以上、データローダのインストール手順でした！&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;余談&lt;a href=&quot;#余談&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;少しData Loaderの処理の概要を書いておくと、&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Insert・・・普通のInsert。&lt;/li&gt;
&lt;li&gt;Update・・・普通のUpdate。&lt;/li&gt;
&lt;li&gt;Upsert・・・主キーに設定したカラムの値と合致するレコードがあれば、そのレコードをUpdate。なければ、Insert。&lt;/li&gt;
&lt;li&gt;Delete・・・普通のDelete。&lt;/li&gt;
&lt;li&gt;Hard Delete・・・？&lt;/li&gt;
&lt;li&gt;Export、Export All・・・CSVとかの形式で出力できる。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;となります。&lt;/p&gt;&lt;p&gt;今回は、以上になります！&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>ワインのデータをスクレイピングする（Vivino編） </title><link>https://endorphinbath.com/posts/wine-scraping-vivino/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wine-scraping-vivino/</guid><description>VivinoというサイトにあるワインのデータをExcelやGoogle Spreadsheetなどに貼り付けられる形式に取得できるスクリプトを紹介します。</description><pubDate>Thu, 21 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじめに&lt;a href=&quot;#はじめに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は今まで自分が飲んだワインの情報をメモしています。&lt;/p&gt;&lt;p&gt;そして、一時期に週2くらいで飲んでいたときに、そのメモを取るのがめんどくさくなったので、一気にワインの情報を集められるようにスクリプトを作成しました。&lt;/p&gt;&lt;p&gt;そして、このスクリプトで取得したデータをGoogle Spreadsheetに貼り付けて、以下のように管理しています。
&lt;img loading=&quot;lazy&quot; width=&quot;2447&quot; height=&quot;1073&quot; src=&quot;/_astro/01.NWSqYUb0_Z2CnxF.webp&quot; srcset=&quot;/_astro/01.NWSqYUb0_f5Vbi.webp 640w, /_astro/01.NWSqYUb0_Z23GTtM.webp 750w, /_astro/01.NWSqYUb0_Z1e5wfu.webp 828w, /_astro/01.NWSqYUb0_QFHaN.webp 1080w, /_astro/01.NWSqYUb0_ZgCEzV.webp 1280w, /_astro/01.NWSqYUb0_Lyynd.webp 1668w, /_astro/01.NWSqYUb0_Z1GrO5P.webp 2048w, /_astro/01.NWSqYUb0_Z2CnxF.webp 2447w&quot; /&gt;&lt;/p&gt;&lt;p&gt;という冒頭で前回のvinica編もお届けしましたが、今回は、Vivinoというサイトで取得するスクリプトを紹介します。なぜ、Vivinoを使ったかというと、vinicaに取得したかったワインがなかったのです・・・。&lt;/p&gt;&lt;p&gt;このスクリプトは開発者ツールで実行します。 今回使ったワインのページは、&lt;a href=&quot;https://www.vivino.com/kanonkop-pinotage/w/56164?year=2018&amp;amp;price_id=26351523&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;です。&lt;/p&gt;&lt;p&gt;※　今回注意したいのが、Vivinoは一度ページの最下部までスクロールしないと、ページが全てレンダリングされないみたいなので、スクロールしてから開発者ツールで要素を選ぶ必要があります。&lt;/p&gt;&lt;p&gt;以下になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソース&lt;a href=&quot;#ソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// code by utf-8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Use Developer Tool（by ⌥⌘I）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;width: 20%; left: &apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;color_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;wine&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;Wine&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// ワインの種類によって、取得するパラメータを変える。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;color_of_wine&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;White Wine&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Red Wine&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 各パラメータにスコアを付けて、その各スコアを結果用のリストに出す。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Vivino上のスコアを取得する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementsByClassName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;indicatorBar__progress--3aXLX&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;cssText&apos;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;11&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// ワイン名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getFullYear&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 出会った日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// Instagramに上げた日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 製造年&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;color_of_wine&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 色&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 醸造方法&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 入手場所&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 最寄り駅&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// 原産地&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 原産国&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// ハッシュタグ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/, /&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;、&apos;&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// 備考（葡萄とか）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 参考1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 参考2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// Instagramに貼り付け&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// vinicaフォルダに入れた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;// ボリューム（軽い＜重い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;// タンニン（控えめ＜強い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;// 甘み（ドライ＜甘い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;// 酸味（まろやか＜シャープ）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;// 果実味（スパイシー＜フルーティ）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// This is it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下、コードの解説ですが、&lt;/p&gt;&lt;p&gt;基本的にこの表記でどのタグの何番目のものを取得するかを指定します。&lt;/p&gt;&lt;p&gt;下の場合だと、4番目のspanから取得します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;「&lt;code&gt;${～}&lt;/code&gt;」の表記&lt;a href=&quot;#の表記&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;この表記は、どうやら文字列を結合するときにいちいち「+」を書かずに、直感的に文字列を表記することができるようです。（Pythonだと、format文的な感じです。）&lt;/p&gt;&lt;p&gt;例えば、以下のような文字列を直感的に書けてしまうというわけです。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ワイン&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;のむ&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;を&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// ワインをのむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;を&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;// ワインをのむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;.replace(‘wine’, ‘Wine’)&lt;a href=&quot;#replacewine-wine&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ここは、vinicaの表記に合わせるために、「White wine」だったら「White Wine」にして、「Red wine」だったら「Red Wine」にしています。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ワインの種類によって、取るパラメータを変える。&lt;a href=&quot;#ワインの種類によって取るパラメータを変える&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ワインは、主にこの5つのパラメータで評価されがちです。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ボリューム（軽い＜重い）&lt;/li&gt;
&lt;li&gt;タンニン（控えめ＜強い）&lt;/li&gt;
&lt;li&gt;甘み（ドライ＜甘い）&lt;/li&gt;
&lt;li&gt;酸味（まろやか＜シャープ）&lt;/li&gt;
&lt;li&gt;果実味（スパイシー＜フルーティ）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;ワインのパラメータに関しては、こちらに記事を出してますので、よければ見てみて下さい！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/wine-5tastes/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【ワイン】主な5種類の性質について解説。これでワイン道のスタートラインに立てるかも？&lt;/div&gt;&lt;div&gt;ワインの味わいには、主に５種類あり、ボリューム、タンニン、甘味、酸味、果実味となります。どういったワインにどの味わいの傾向があるかを知っていると、ワインを飲むのがますます楽しくなるかも？&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211112_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-scaled.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;p&gt;そして、Vivinoでは、白ワインか赤ワインかで表示するパラメータが違うようです。（vinicaでは赤白の両方で5つのパラメータが用意されていましたが。）&lt;/p&gt;&lt;p&gt;そして、白ワインではタンニンと果実味が、赤ワインでは果実味が用意されていませんでした。Vivinoには果実味が無いんですねえ。&lt;/p&gt;&lt;p&gt;なので、下のリストにタグの順番を入れておきます。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;color_of_wine&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;White Wine&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Red Wine&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;配列を作る。&lt;a href=&quot;#配列を作る&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;上の配列を、以下のように別の配列にマッピングしています。Vivinoでは0～100％の評価なので、以下の境界値でvinicaと同じ5段階評価になるようにマッピングしています。けっこう甘めにつけています（笑）&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list_of_result_parameter_of_wine&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list_of_target_parameter_of_wine&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Vivino上のスコアを取得する。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Number&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getElementsByClassName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;indicatorBar__progress--3aXLX&apos;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&apos;cssText&apos;&lt;/span&gt;&lt;span&gt;].&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;switch&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;70&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;case&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;文字列を置換する。&lt;a href=&quot;#文字列を置換する&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;「/」を「&amp;gt;」に置換しています。&lt;/p&gt;&lt;p&gt;以下のように書くと複数回「/」が出てきても全て置換してくれます。（「\」でエスケープ。）&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;14&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;\/&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;g&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// 原産地&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;そして、タブ文字（”\t”）を区切り文字として、配列arrayを文字列にします。&lt;/p&gt;&lt;p&gt;最後、consoleに出力しておしまい。
&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1263&quot; src=&quot;/_astro/02.DPlfLCwO_2rMizq.webp&quot; srcset=&quot;/_astro/02.DPlfLCwO_12rUjq.webp 640w, /_astro/02.DPlfLCwO_1UGJuN.webp 750w, /_astro/02.DPlfLCwO_ZsPPJx.webp 828w, /_astro/02.DPlfLCwO_ZmGol4.webp 1080w, /_astro/02.DPlfLCwO_Z4FqeO.webp 1280w, /_astro/02.DPlfLCwO_1ofcsv.webp 1668w, /_astro/02.DPlfLCwO_13pN56.webp 2048w, /_astro/02.DPlfLCwO_2rMizq.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;原産国の部分とかは、「=IFERROR(LEFT(K2, FIND(“&amp;gt;”,K2)-2),K2)」とかやって、隣のセルから取ってきています。これで集計すると自分がどの国のワインを今まで飲んでいるかが分かるといった感じです。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のスクリプトの紹介はこんなもので終了です。&lt;/p&gt;&lt;p&gt;Vivinoをvinicaの表記に合わせるところで、一工夫必要でしたね。&lt;/p&gt;&lt;p&gt;また、このスクリプトを実行できない場合は、下に備忘録的なものを貼っておくので、見てみて下さい。&lt;/p&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発者ツールの立ち上げ方&lt;a href=&quot;#開発者ツールの立ち上げ方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;取得したいワインを&lt;a href=&quot;https://www.vivino.com/&quot; target=&quot;_blank&quot;&gt;Vivinoのサイト&lt;/a&gt;内で調べてそのワインのページに行く。&lt;/li&gt;
&lt;li&gt;ブラウザ上で、Ctrl + Shift + C を押す。開発者ツールが立ち上がります。&lt;/li&gt;
&lt;li&gt;ページ内の欲しい情報がある要素にマウスを合わせるとハイライトされるので、その状態でクリック。&lt;/li&gt;
&lt;li&gt;開発者ツール内のコンソールで、このスクリプトを実行。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;</content:encoded></item><item><title>ワインのデータをスクレイピングする（vinica編）</title><link>https://endorphinbath.com/posts/wine-scraping-vinica/</link><guid isPermaLink="true">https://endorphinbath.com/posts/wine-scraping-vinica/</guid><description>vinicaというサイトにあるワインのデータをExcelやGoogle Spreadsheetなどに貼り付けられる形式に取得できるスクリプトを紹介します。</description><pubDate>Wed, 20 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;はじめに&lt;a href=&quot;#はじめに&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;僕は今まで自分が飲んだワインの情報をメモしています。&lt;/p&gt;&lt;p&gt;そして、一時期に週2くらいで飲んでいたときに、そのメモを取るのがめんどくさくなったので、一気にワインの情報を集められるようにスクリプトを作成しました。&lt;/p&gt;&lt;p&gt;そして、このスクリプトで取得したデータをGoogle Spreadsheetに貼り付けて、以下のように管理しています。&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2447&quot; height=&quot;1073&quot; src=&quot;/_astro/01.NWSqYUb0_Z2CnxF.webp&quot; srcset=&quot;/_astro/01.NWSqYUb0_f5Vbi.webp 640w, /_astro/01.NWSqYUb0_Z23GTtM.webp 750w, /_astro/01.NWSqYUb0_Z1e5wfu.webp 828w, /_astro/01.NWSqYUb0_QFHaN.webp 1080w, /_astro/01.NWSqYUb0_ZgCEzV.webp 1280w, /_astro/01.NWSqYUb0_Lyynd.webp 1668w, /_astro/01.NWSqYUb0_Z1GrO5P.webp 2048w, /_astro/01.NWSqYUb0_Z2CnxF.webp 2447w&quot; /&gt;&lt;/p&gt;&lt;p&gt;今回は、そのスクリプトを紹介します。&lt;/p&gt;&lt;p&gt;このスクリプトは開発者ツールで実行します。&lt;/p&gt;&lt;p&gt;以下になります。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;ソース&lt;a href=&quot;#ソース&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// code by utf-8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// Use Developer Tool（by ⌥⌘I）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;taste-bar taste-&apos;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// ワイン名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getFullYear&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getMonth&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/&quot;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;today&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;getDate&lt;/span&gt;&lt;span&gt;(), &lt;/span&gt;&lt;span&gt;// 出会った日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// Instagramに上げた日&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 製造年&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;21&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 色&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 醸造方法&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 金額&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 入手場所&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 最寄り駅&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;18&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 原産地&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 原産国&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 感想&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// ハッシュタグ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 備考&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;href&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// 参考1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// 参考2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// Instagramに貼り付け&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;// vinicaフォルダに入れた&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;27&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// ボリューム（軽い＜重い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;28&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// タンニン（控えめ＜強い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;29&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// 甘み（ドライ＜甘い）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;// 酸味（まろやか＜シャープ）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;             &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;31&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;className&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;substr&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length_of_taste&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;// 果実味（スパイシー＜フルーティ）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\t&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;``&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;forEach&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sep&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// This is it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展開する&lt;/span&gt;&lt;span&gt;折りたたむ&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以下、コードの解説ですが、&lt;/p&gt;&lt;p&gt;基本的にこの表記でどのタグの何番目のものを取得するかを指定します。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;document&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;querySelectorAll&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)][&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;innerText&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;下の場合だと、4番目のspanから取得します。&lt;/p&gt;&lt;p&gt;この「&lt;code&gt;${～}&lt;/code&gt;」の表記は、querySelectorやquerySelectorAllなどの関数を調べているときに偶然見つけました。調べた当初は、この書き方のメリットをほとんど理解しておらず、たまたま自分にしっくり来たので、この表記に落ち着いていましたが、最近少し理解が進んだので、それはまた今度書きます（笑）&lt;/p&gt;&lt;p&gt;そして、タブ文字（”\t”）を区切り文字として、配列arrayを文字列にします。&lt;/p&gt;&lt;p&gt;最後、consoleに出力しておしまい。&lt;/p&gt;&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;2560&quot; height=&quot;1257&quot; src=&quot;/_astro/02.D8lIrz0r_Z1WYocR.webp&quot; srcset=&quot;/_astro/02.D8lIrz0r_i4EUC.webp 640w, /_astro/02.D8lIrz0r_Z1knI2r.webp 750w, /_astro/02.D8lIrz0r_Z1de68l.webp 828w, /_astro/02.D8lIrz0r_ZvyiBR.webp 1080w, /_astro/02.D8lIrz0r_Z23vQ2k.webp 1280w, /_astro/02.D8lIrz0r_1Yy7dm.webp 1668w, /_astro/02.D8lIrz0r_1DIHOW.webp 2048w, /_astro/02.D8lIrz0r_Z1WYocR.webp 2560w&quot; /&gt;&lt;/p&gt;&lt;p&gt;原産国の部分とかは、「=IFERROR(LEFT(K2, FIND(“&amp;gt;”,K2)-2),K2)」とかやって、隣のセルから取ってきています。これで集計すると自分がどの国のワインを今まで飲んでいるかが分かるといった感じです。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;おしまい&lt;a href=&quot;#おしまい&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回のスクリプトの紹介はこんなもので終了です。&lt;/p&gt;&lt;p&gt;そして、このスクリプトを実行できない場合は、下に備忘録的なものを貼っておくので、見てみて下さい。&lt;/p&gt;&lt;p&gt;以上になります！&lt;/p&gt;&lt;p&gt;また、ワインの５つのパラメータに関する記事は以下に掲載していますので、よければ見てみて下さい！&lt;/p&gt;&lt;a href=&quot;https://www.endorphinbath.com/wine-5tastes/&quot; target=&quot;_blank&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/10/cropped-%E3%83%95%E3%82%A1%E3%83%93%E3%82%B3%E3%83%B3_20211023-32x32.png&quot; alt=&quot;&quot; width=&quot;16&quot; height=&quot;16&quot; loading=&quot;lazy&quot; /&gt;&lt;span&gt;エンドルフィン風呂に浸かる。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;【ワイン】主な5種類の性質について解説。これでワイン道のスタートラインに立てるかも？&lt;/div&gt;&lt;div&gt;ワインの味わいには、主に５種類あり、ボリューム、タンニン、甘味、酸味、果実味となります。どういったワインにどの味わいの傾向があるかを知っていると、ワインを飲むのがますます楽しくなるかも？&lt;/div&gt;&lt;div&gt;www.endorphinbath.com&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://www.endorphinbath.com/wp-content/uploads/2021/11/20211112_%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81-scaled.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;開発者ツールの立ち上げ方&lt;a href=&quot;#開発者ツールの立ち上げ方&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;取得したいサイトに行く。今回使ったワインのページは、&lt;a href=&quot;https://vinica.me/Dom-de-Nalys-Ch%C3%A2teauneuf-du-Pape-Rouge-w98&quot; target=&quot;_blank&quot;&gt;ここ&lt;/a&gt;ですが、別途取得したいワインがあれば、それをvinicaのサイト内で調べてそのワインのページに行く。&lt;/li&gt;
&lt;li&gt;ブラウザ上で、Ctrl + Shift + C を押す。開発者ツールが立ち上がります。&lt;/li&gt;
&lt;li&gt;ページ内の欲しい情報がある要素にマウスを合わせるとハイライトされるので、その状態でクリック。&lt;/li&gt;
&lt;li&gt;開発者ツール内のコンソールで、このスクリプトを実行。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;</content:encoded></item><item><title>朝起きたら喉が痛くてその状態で出社してワクチン（2回目：モデルナ）を打って21時半に帰宅して昨夜から作り置きしていた味噌汁が腐っていたときの絶望感はヤバイよな。</title><link>https://endorphinbath.com/posts/morning-throatache/</link><guid isPermaLink="true">https://endorphinbath.com/posts/morning-throatache/</guid><description>私、kinkinbeer135mlのブログがここから始まります。</description><pubDate>Wed, 13 Oct 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今日、書きたいことはタイトルに全て書いてしまった。&lt;/p&gt;
&lt;p&gt;ここから、ブログ生活が始まるんだなあ。&lt;/p&gt;
&lt;p&gt;とりあえず、明日は熱が出ると思うので、寝るか。&lt;/p&gt;</content:encoded></item></channel></rss>